输出解析器
note
此处的信息指的是接收模型文本输出并尝试将其解析为更结构化表示的解析器。 越来越多的模型支持函数(或工具)调用,这将自动处理这个问题。 推荐使用函数/工具调用而不是输出解析。 在此处查看相关文档:here。
Output parser (输出解析器) 负责接收模型的输出,并将其转换为更适合下游任务的格式。
当你使用 LLM 生成结构化数据,或规范化聊天模型和 LLM 的输出时,输出解析器非常有用。
LangChain 提供了许多不同类型的输出解析器。以下是 LangChain 支持的输出解析器列表。下表包含各种信息:
- Name (名称):输出解析器的名称
- Supports Streaming (支持流式传输):输出解析器是否支持流式传输。
- Has Format Instructions (具有格式说明):输出解析器是否具有格式说明。这通常可用,除非 (a) 所需的 schema 不是在 prompt 中指定,而是通过其他参数指定(如 OpenAI function calling),或者 (b) OutputParser 封装了另一个 OutputParser。
- Calls LLM (调用 LLM):此输出解析器本身是否调用 LLM。这通常只由尝试更正格式错误输出的解析器完成。
- Input Type (输入类型):预期的输入类型。大多数输出解析器同时处理字符串和消息,但有些(如 OpenAI Functions)需要带有特定 kwargs 的消息。
- Output Type (输出类型):解析器返回的对象类型。
- Description (描述):我们对此输出解析器的评论以及何时使用它。
| 名称 | 支持流式传输 | 具有格式说明 | 调用 LLM | 输入类型 | 输出类型 | 描述 |
|---|---|---|---|---|---|---|
| Str | ✅ | str | Message | String | 从消息对象解析文本。适用于处理消息内容的可变格式(例如,从内容块中提取文本)。 | ||
| JSON | ✅ | ✅ | str | Message | JSON object | 返回指定的 JSON 对象。你可以指定一个 Pydantic 模型,它将返回该模型的 JSON。可能是获取不使用 function calling 的结构化数据的最可靠的输出解析器。 | |
| 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 DataFrame 进行操作。 | ||
| Enum | ✅ | str | Message | Enum | 将响应解析为提供的枚举值之一。 | ||
| Datetime | ✅ | str | Message | datetime.datetime | 将响应解析为日期时间字符串。 | ||
| Structured | ✅ | str | Message | Dict[str, str] | 一个返回结构化信息的输出解析器。它不如其他输出解析器强大,因为它只允许字段为字符串。当你处理较小的 LLM 时,这可能很有用。 |
有关如何使用输出解析器的具体信息,请参阅此处的相关操作指南。