输出解析器
常见解析器分类:
| 解析器 | 最终结果 | 适用场景 | 说明 |
| 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 JsonOutputParser
parser = JsonOutputParser()
result = model.invoke("你是谁")
data = parser.invoke(result)
print(data)
# 让模型生成结果,再由 parser 负责解析
方式二(只用结构化输出):
from typing import TypeDict
class Person(TypeDict):
name: str
age: int
structured_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)
实际使用场景:
| 场景 | 不做解析,常见问题 | 更合适的做法 |
| 聊天问答、文案润色、摘要展示 | 只需要显示文本,结构要求低 | StrOutputParser |
| 从文本里抽取字段,如“问题/答案”“时间/人物/事件” | 文本不稳定,后续逻辑难写 | JsonOutputParser |
| 给前端卡片、表单、列表页返回固定字段 | 字段缺失或字段名漂移会影响渲染 | with_structured_output(TypedDict) |
| 给数据库、审批流、订单系统写入严格数据 | 需要校验类型、范围、长度 | PydanticOutputParser 或 with_structured_output(Pydantic) |
| 与外部系统按统一协议对接 | 需要语言无关、协议明确 | JSON Schema |
输出解析器常用方法:
1.解析输出
parser.invoke(...):更偏 LangChain / Runnable 风格,适合和prompt | model | parser链式组合。本章案例大多是这种写法。parser.parse(text):更偏“我已经拿到一段纯文本了,现在只想解析这段文本”。
2.给模型解释说明
解析器不只是“事后处理”,很多时候还会事前帮你约束模型输出。
常见方法:
parser.get_format_instructions()
会返回一段格式说明文字,告诉模型:应该输出什么结构;有哪些字段;每个字段是什么类型;是否只能返回 JSON;是否不能加额外解释文字
这段说明通常会被拼进 Prompt 中,让模型一开始就尽量按可解析格式输出,从而降低解析失败率
常见解析器用法
1. StrOutParser
LangChain 里最简单的输出解析器,把模型返回内容取出来,当作字符串使用。它不做结构化解析,也不关心字段、键名、数据类型,只关心“把最终文本拿到手
- 问答机器人直接展示文本;
- 文章摘要、标题生成、改写润色;
- 翻译、续写、营销文案;
- 只需要把结果显示到前端,不需要拆字段的场景。
2. JsonOutputParser
将模型的自由文本输出解析为结构化 JSON
用法一
直接在提示词里手写JSON要求
用法二
用get_format_instructions()自动生成格式说明,让解析器自己生成格式说明,再拼进 Prompt。

浙公网安备 33010602011771号