输出解析器(Output Parsers)
输出解析器负责接收 LLM 的输出并将其转换为更合适的格式。当你使用 LLM 生成任何形式的结构化数据时,这非常有用。
除了拥有大量不同类型的输出解析器之外,LangChain OutputParser 的一个显著优势是许多解析器支持流式输出。
快速入门
请参阅 这份快速入门指南,了解输出解析器以及如何使用它们。
输出解析器类型
LangChain 有许多不同类型的 output parser。
表格各列含义:
- Name:输出解析器的名称
- Supports Streaming:该输出解析器是否支持流式输出。
- Has Format Instructions:该输出解析器是否有格式说明。通常都具备,除非 (a) 期望的模式不是在提示中指定,而是在其他参数中指定(如 OpenAI 函数调用),或者 (b) OutputParser 包装了另一个 OutputParser。
- Calls LLM:该输出解析器本身是否调用 LLM。这通常只由那些尝试纠正格式错误输出的解析器来做。
- Input Type:期望的输入类型。大多数输出解析器既能处理字符串也能处理消息,但有些(如 OpenAI Functions)需要带有特定 kwargs 的消息。
- Output Type:解析器返回对象的输出类型。
- Description:我们对这个输出解析器以及何时使用它的说明。
| Name | Supports Streaming | Has Format Instructions | Calls LLM | Input Type | Output Type | Description |
|---|---|---|---|---|---|---|
| OpenAITools | (Passes tools to model) | Message (with tool_choice) | JSON object | 使用最新的 OpenAI 函数调用参数 tools 和 tool_choice 来构建返回输出。如果你使用的模型支持函数调用,这通常是最可靠的方法。 | ||
| OpenAIFunctions | ✅ | (Passes functions to model) | Message (with function_call) | JSON object | 使用旧版 OpenAI 函数调用参数 functions 和 function_call 来构建返回输出。 | |
| 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 DataFrame 进行操作。 | ||
| Enum | ✅ | str | Message | Enum | 将响应解析为所提供的枚举值之一。 | ||
| Datetime | ✅ | str | Message | datetime.datetime | 将响应解析为 datetime 字符串。 | ||
| Structured | ✅ | str | Message | Dict[str, str] | 一种返回结构化信息的输出解析器。它不如其他输出解析器强大,因为它只允许字段为字符串。这在处理较小的 LLM 时很有用。 |