结构化输出#
LLM 生成结构化输出的能力对于依赖可靠解析输出值的下游应用程序至关重要。LlamaIndex 本身也在以下方面依赖于结构化输出。
- 文档检索: LlamaIndex 中的许多数据结构依赖于具有特定模式的 LLM 调用进行文档检索。例如,树状索引期望 LLM 调用采用“ANSWER: (number)”的格式。
- 响应合成: 用户可能期望最终响应包含一定程度的结构(例如 JSON 输出、格式化的 SQL 查询等)。
LlamaIndex 提供了多种模块,使 LLM 能够生成结构化格式的输出。默认情况下,我们的 LLM 类中提供了结构化输出。我们还提供了较低级别的模块
- Pydantic 程序: 这些是通用模块,将输入提示映射到由 Pydantic 对象表示的结构化输出。它们可以使用函数调用 API 或文本补全 API + 输出解析器。这些也可以与查询引擎集成。
- 预定义 Pydantic 程序: 我们有预定义的 Pydantic 程序,将输入映射到特定的输出类型(如数据帧)。
- 输出解析器: 这些模块在 LLM 文本补全端点之前和之后运行。它们不用于 LLM 函数调用端点(因为这些端点本身就包含结构化输出)。
请参阅以下部分,了解输出解析器和 Pydantic 程序的概述。
🔬 结构化输出函数的剖析#
在这里,我们描述了基于 LLM 的结构化输出函数的不同组件。流程取决于您使用的是通用 LLM 文本补全 API 还是 LLM 函数调用 API。
使用通用补全 API 时,输入和输出通过文本提示处理。输出解析器在 LLM 调用之前和之后都起作用,以确保结构化输出。在 LLM 调用之前,输出解析器可以将格式说明附加到提示符。在 LLM 调用之后,输出解析器可以将输出解析为指定的说明。
使用函数调用 API 时,输出本身就是结构化格式,输入可以接受所需对象的签名。结构化输出只需转换为正确的对象格式(例如 Pydantic)。