结构化输出#
大语言模型(LLM)生成结构化输出的能力对于依赖可靠解析输出值的下游应用至关重要。LlamaIndex 本身在以下方面也依赖于结构化输出:
- 文档检索:LlamaIndex 中的许多数据结构依赖于具有特定模式的 LLM 调用来实现文档检索。例如,树状索引要求 LLM 调用的输出格式为 "ANSWER: (数字)"。
- 响应合成:用户可能期望最终响应包含某种程度的结构(例如 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)。