查询引擎 + Pydantic 输出#
通过使用 index.as_query_engine()
及其底层的 RetrieverQueryEngine
,我们可以支持结构化的 Pydantic 输出,而无需额外的 LLM 调用(与典型的输出解析器相比)。
每个查询引擎都支持在 RetrieverQueryEngine
中使用以下 response_mode
来集成结构化响应:
refine
compact
tree_summarize
accumulate
(测试版,需要额外解析以转换为对象)compact_accumulate
(测试版,需要额外解析以转换为对象)
在底层,这使用了 OpenAIPydanitcProgam
或 LLMTextCompletionProgram
,具体取决于您设置的 LLM。如果存在中间的 LLM 响应(即在 refine
或 tree_summarize
中进行多次 LLM 调用),则将 Pydantic 对象作为 JSON 对象注入到下一个 LLM 提示中。
使用模式#
首先,您需要定义要提取的对象。
from typing import List
from pydantic import BaseModel
class Biography(BaseModel):
"""传记的数据模型。"""
name: str
best_known_for: List[str]
extra_info: str
然后,创建您的查询引擎。
query_engine = index.as_query_engine(
response_mode="tree_summarize", output_cls=Biography
)
最后,您可以获取响应并检查输出。
response = query_engine.query("保罗·格雷厄姆是谁?")
print(response.name)
# > '保罗·格雷厄姆'
print(response.best_known_for)
# > ['参与 Bel 的工作', '共同创办 Viaweb', '创建编程语言 Arc']
print(response.extra_info)
# > "保罗·格雷厄姆是一位计算机科学家、企业家和作家。他最为人所知的是..."
模块#
可以在下面的笔记本中找到详细的使用方法: