查询引擎
QueryEngine 是「对索引问一句、拿一段回答」的高层接口。最简单的一行是 index.as_query_engine()。查询实际包含三步:Retrieval(取 Node)→ Postprocessing(过滤 / 重排)→ Response synthesis(把块和问题交给 LLM)。只关心取回、自己拼 Prompt 时,用 检索 的 Retriever,不必每次都走完整引擎。
示例合成仍建议显式 Settings.llm = OpenAI(model="gpt-4o-mini")。历史默认生成模型是 gpt-3.5-turbo,以官方文档为准。
as_query_engine
常用开关:
默认 top-k 偏小(文档里常见默认 2)。召回不够就先加大 similarity_top_k,再考虑重排。异步用 await query_engine.aquery(...),方便塞进 FunctionAgent 工具。
合成模式 response_mode
取回之后,synthesizer 决定怎么把多块文本喂给 LLM:
低层组装:RetrieverQueryEngine
需要自定义 top-k、相似度阈值时,不要只靠 as_query_engine 的 kwargs,显式拼装:
similarity_cutoff 过严会变成「经常答不上来」——这是特性:宁可空,也不要用毫不相关的块胡编。调参时用 no_text 或打印分数。
Chat Engine:面向数据的多轮
QueryEngine 默认不带对话历史。多轮、需要指代消解时:
chat_mode 常见取值(以当前文档为准):例如把历史压缩成独立检索问句、或把检索结果塞进 system prompt。流式:
带工具、要模型决定何时检索时,优先 快速上手 的 FunctionAgent + Context,而不是强迫 Chat Engine 模拟 Agent。
查询引擎当 Agent 工具
也可像官方 starter 那样自己写 async def search_documents(query: str) 去调 aquery。多个 Index(API 文档 vs 教程)就注册多个 QueryEngineTool,让模型选库。