AI News HubLIVE
站内改写1 分钟阅读

使用Outlines进行结构化语言模型生成

Outlines是一个开源库,通过在推理时屏蔽不合法的标记,为大型语言模型(LLM)的输出引入确定性,从而可靠生成结构化输出如JSON和分类结果。本文通过Python示例展示了其三大用例:情感分析的多选分类、基于Pydantic的JSON对象生成,以及REST API的纯JSON生成。

来源KDnuggets作者: Iván Palomares Carrascosa

Outlines是一个开源库,旨在为大型语言模型(LLM)的结构化输出生成过程带来确定性。通常,要让LLM输出如JSON这样的结构化格式,需要精心设计提示并依赖一定的运气,否则模型可能会产生幻觉或格式错误。Outlines通过在推理时屏蔽“句法非法”的标记,从根本上防止了这些问题的发生,从而确保输出严格遵循预定义的格式规则。

本教程通过三个实际的Python用例,展示了Outlines的强大功能。首先,对于情感分析中的多选分类问题,可以使用generate.choice()函数强制模型从一组预定义选项(如“正面”、“负面”、“中性”)中选择一个。代码示例使用Hugging Face的transformers库加载模型,并通过outlines.from_transformers()将模型和分词器包装到Outlines对象中,然后传递一个Literal对象来约束输出。

第二个用例演示了如何生成符合Pydantic模型的JSON对象。通过定义一个BaseModel子类(例如描述虚构角色的Character模型),Outlines能够确保生成的JSON严格遵循该结构,包括字段类型和嵌套规则。这在需要从LLM获取干净、可直接解析的JSON数据时非常有用。

第三个用例进一步展示了如何为REST API生成纯净的JSON字符串。与第二个用例类似,但重点关注输出为原始字符串,且保证能被json.loads()成功解析,避免了多余的逗号或换行符等常见问题。这对于API后端的数据更新场景尤为关键。

总之,Outlines通过编译正则表达式、上下文无关文法或Pydantic模型为有限状态机,在生成过程中实时过滤标记,从而将LLM从“聊天爱好者”转变为可靠的“结构化输出机器”。该库适用于需要确定性输出的任何场景,包括数据提取、自动化报告生成等。本文作者Iván Palomares Carrascosa是AI、机器学习、深度学习和LLM领域的领导者、作家和顾问。