Output parsers #
注意 此处的信息指的是解析器,它从模型输出的文本中尝试解析为更结构化的数据。越来越多的模型支持函数(或工具)调用,能够自动处理这种情况。建议优先使用函数/工具调用,而非输出解析。详见相关文档。
输出解析器负责接收模型的输出并将其转换为更适合下游任务的格式。当你使用大型语言模型(LLMs)生成结构化数据,或规范化聊天模型和 LLM 的输出时,这非常有用。
LangChain 提供了多种类型的输出解析器。以下是 LangChain 支持的输出解析器列表,表格中包含以下信息:
- Name: 输出解析器的名称
- Supports Streaming: 是否支持流式传输
- Has Format Instructions: 是否包含格式说明。通常是有的,除非 (a) 预期的模式在提示中未明确指定,而是在其他参数中(例如 OpenAI 函数调用),或 (b) 输出解析器包装了另一个输出解析器。
- Calls LLM: 输出解析器本身是否调用 LLM。这通常仅限于那些尝试修正格式错误输出的解析器。
- Input Type: 预期的输入类型。大多数输出解析器可以处理字符串和消息,但有些(如 OpenAI 函数)需要具有特定参数的消息。
- Output Type: 解析器返回的对象的输出类型。
- Description: 输出解析器的描述以及适用场景。
Name | Supports Streaming | Has Format Instructions | Calls LLM | Input Type | Output Type | Description |
---|---|---|---|---|---|---|
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 | 将响应解析为datetime string串。 | ||
Structured | ✅ | str | Message | Dict[str, str] | 返回结构化信息的输出解析器。它比其他输出解析器功能较弱,因为它只允许字段为字符串。当你使用较小的 LLM 时,这可能很有用。 |
具体关于如何使用输出解析器的信息,请参阅此处的相关操作指南。