ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

输出解析器

输出解析器

常见解析器分类:

解析器 最终结果 适用场景 说明
StrOutputParser 字符串 str 只需要展示文本,不需要拆字段 最简单,通常就是取出模型输出正文内容
JsonOutputParser Python dict / list 希望模型返回 JSON,再交给程序继续处理 适合字段抽取、接口返回、工作流参数传递
PydanticOutputParser Pydantic 对象 需要强类型和运行时校验 适合对字段类型、长度、范围有明确要求的业务场景

schema: 可以看成“数据结构说明书”或“输出格式规范”。有点像ts的约束

结构化输出的本质,就是先定义 schema,再让模型按这个 schema 输出结果

常见结构化输出:

方案 定义方式 最终结果 是否支持运行时校验 适用场景
TypedDict Python 标准库 typing.TypedDict dict 只需要固定字段结构,不需要严格校验
Pydantic BaseModel + Field(...) Pydantic 对象 需要强类型、范围、长度、必填项校验
JSON Schema 标准 JSON Schema 字典 通常为 dict 视具体实现而定 需要跨语言、跨系统共享结构协议

在 LangChain 中,这些结构通常会和下面这种方式配合使用:

model.with_structured_output(...)
  • TypedDict / Pydantic / JSON Schema 是“定义输出结构”的方式;
  • with_structured_output(...) 是“让模型按这个结构输出并自动解析”的入口。

区分结构化输出和输出解析器

  • 输出解析器:更强调“模型已经输出了,我怎么把它转成程序可用的数据”;
  • 结构化输出:更强调“在模型输出之前,我先规定好它应该长什么样”。

 

方式一(只用输出解析器):

from langchain_core.output_parsers import JsonOutputParserparser = JsonOutputParser()
result = model.invoke("你是谁")
data = parser.invoke(result)print(data)
# 让模型生成结果,再由 parser 负责解析

方式二(只用结构化输出):

from typing import TypeDictclass Person(TypeDict):name: strage: intstructured_model = model.with_structured_output(Person)
result = structured_model.invoke("请返回一个任务信息")
print(reuslt)#不需要单独手写 parser,而是由 with_structured_output(...) 统一完成“约束输出 + 自动解析”
#更适合现代模型已经支持原生结构化输出的场景

方式三(结构化输出+额外校验处理):

structured_model = model.with_structed_output(Person)
result = structured_model.invoke("请返回一个人物信息")# 这里可以继续做业务校验、入库前清洗、字段转换等处理
print(reuslt)

 

返回列表