输出解析器

常见解析器分类:

解析器 最终结果 适用场景 说明
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

 

posted @ 2026-05-05 15:23  幻影之舞  阅读(2)  评论(0)    收藏  举报