LlamaIndex 查询与检索 (Querying)
一旦你建立了索引,下一步就是通过“查询引擎”来获取答案。LlamaIndex 提供了从基础到高阶的多种查询模式。
#1. 查询引擎 (Query Engine)
查询引擎是一个端到端的接口,它接收一个字符串问题,并返回一个 Response 对象。
pythonquery_engine = index.as_query_engine() response = query_engine.query("请总结本文档。") print(response.response) # 文本答案 print(response.source_nodes) # 答案来源的原始节点
#2. 检索器 (Retriever) - 核心组件
如果你不需要 LLM 生成最终答案,只需要找出相关的文本片段,你可以直接使用检索器。
pythonretriever = index.as_retriever(similarity_top_k=3) nodes = retriever.retrieve("什么是向量数据库?")
#3. 高级查询模式
#A. 对话引擎 (Chat Engine)
与查询引擎不同,对话引擎具有 Memory,可以进行多轮对话。
pythonchat_engine = index.as_chat_engine() response = chat_engine.chat("你好,我叫小明") response = chat_engine.chat("我刚才说我叫什么?")
#B. 路由查询 (Router Query Engine)
如果你有多个索引(比如一个文档索引和一个总结索引),路由引擎可以自动判断应该去哪个索引里找答案。
#C. 子问题查询 (Sub-Question Query Engine)
对于复杂问题(如:对比 A 公司和 B 公司的财务报表),该引擎会将其拆解为多个子问题,分别查询后再汇总。
#4. 检索优化技巧 (RAG 进阶)
LlamaIndex 最强大的地方在于它内置了许多先进的检索策略:
- Metadata Filtering: 仅检索特定日期或分类的文件。
- Re-ranking (重排序):先初步检索 20 个片段,再用一个更精准的模型(如 Cohere Rerank)选出最相关的 3 个。这能极大提升答案质量。
- Hybrid Search: 结合向量搜索(语义)和关键词搜索(精准匹配)。
#5. 结构化输出
你可以要求查询引擎直接返回 JSON 或 Pydantic 对象,方便下游程序处理。
pythonfrom pydantic import BaseModel class Info(BaseModel): name: str amount: float query_engine = index.as_query_engine(output_cls=Info)
总结:LlamaIndex 提供了目前业界最专业的 RAG 检索链路。如果你的应用对回答的准确性要求极高,你应该深挖它的检索优化功能。