LangChain 专题7 输出解析器
此处所指的信息是解析器,它们从模型获取文本输出尝试将其解析为一个更结构化的表示。 越来越多的模型支持函数(或工具)调用,此类调用会自动处理这一问题。 建议使用函数/工具调用而不是输出解析。
输出解析器(Output parser)负责获取模型的输出并将其转换为更适合下游任务的格式。 当您使用 LLM 生成结构化数据或规范化聊天模型和 LLM 的输出时,此功能非常有用。
LangChain 有许多不同类型的输出解析器。这是 LangChain 支持的输出解析器列表。下表包含各种信息:
- 名称:输出解析器的名称
- 是否支持流式:输出解析器是否支持流式。
- 是否包含格式指令:输出解析器是否包含格式指令。这通常是可用的,除非(a)所需的模式在提示中而不是在其他参数(如 OpenAI 函数调用)中指定, 或者(b)当 OutputParser 包装另一个 OutputParser 时。
- 能否调用 LLM:此输出解析器本身是否 LLM。这通常只由试图纠正格式错误的输出解析器来做。
- 输入类型:预期输入类型。大多数输出解析器都可以处理字符串和消息,但有些(如 OpenAI 函数)需要带有特定关键字参数的消息。
- 输出类型:解析器返回的对象类型。
- 描述:我们对该输出解析器的评论以及何时使用它的说明。
名称 | 是否支持流式 | 是否包含格式指令 | 能否调用 LLM | 输入类型 | 输出类型 | 描述 |
---|---|---|---|---|---|---|
Str | ✅ | str | Message | String | 从消息对象解析文本。适用于处理消息内容的可变格式(例如,从内容块中提取文本)。 | ||
JSON | ✅ | ✅ | str | Message | JSON object | 返回指定的 JSON 对象。您可以指定一个 Pydantic 模型,它将返回该模型的 JSON。可能是获取不使用函数调用的结构化数据的最可靠的输出解析器。 | |
XML | ✅ | ✅ | str | Message | dict | 返回标签字典。需要 XML 输出时使用。与擅长编写 XML 的模型(如 Anthropic 的模型)一起使用。 | |
CSV | ✅ | ✅ | str | Message | List[str] | 返回以逗号分隔的值的列表。 | |
OutputFixing | ✅ | str | Message | 包装另一个输出解析器。如果该输出解析器出错,则这将把错误消息和错误输出传递给 LLM,并要求其修复输出。 | |||
RetryWithError | ✅ | str | Message | 包装另一个输出解析器。如果该输出解析器出错,则这将把原始输入、错误输出和错误消息传递给 LLM 并要求其修复。与 OutputFixingParser 相比,这个还会发送原始指令。 | |||
Pydantic | ✅ | str | Message | pydantic.BaseModel | 采用用户定义的 Pydantic 模型并以该格式返回数据。 | ||
YAML | ✅ | str | Message | pydantic.BaseModel | 采用用户定义的 Pydantic 模型并以该格式返回数据。使用 YAML 对其进行编码。 | ||
PandasDataFrame | ✅ | str | Message | dict | 对于使用 pandas DataFrames 进行操作很有用。 | ||
Enum | ✅ | str | Message | Enum | 将响应解析为提供的枚举值之一。 | ||
Datetime | ✅ | str | Message | datetime.datetime | 将响应解析为日期时间字符串。 | ||
Structured | ✅ | str | Message | Dict[str, str] | 返回结构化信息的输出解析器。它的功能不如其他输出解析器强大,因为它只允许字段为字符串。当您使用较小的 LLM 时,这会很有用。 |
StrOutputParser 使用示例
|
|