logo

LlamaIndex 查询与检索 (Querying)

索引建完以后,真正会决定用户体验的,就是查询链路怎么走。LlamaIndex 强的地方不是“能回答”,而是你能更细地控制“先检索什么、检索多少、要不要重排、怎么返回”。

1. 查询引擎 (Query Engine)

查询引擎是一个端到端的接口,它接收一个字符串问题,并返回一个 Response 对象。

query_engine = index.as_query_engine()
response = query_engine.query("请总结本文档。")

print(response.response) # 文本答案
print(response.source_nodes) # 答案来源的原始节点

2. 检索器 (Retriever) - 核心组件

如果你不需要 LLM 生成最终答案,只需要找出相关的文本片段,你可以直接使用检索器。

retriever = index.as_retriever(similarity_top_k=3)
nodes = retriever.retrieve("什么是向量数据库?")

3. 高级查询模式

A. 对话引擎 (Chat Engine)

与查询引擎不同,对话引擎具有 Memory,可以进行多轮对话。

chat_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 个片段,再用一个更精准的模型选出最相关的 3 个。这能极大提升答案质量。
  • Hybrid Search: 结合向量搜索(语义)和关键词搜索(精准匹配)。

不过别把这些高级技巧理解成“默认全开”。真实项目里更稳的顺序是:先看基础召回够不够,再加 rerank;先确认单索引够不够,再考虑 router;先看问题是否真的复杂,再决定要不要子问题拆分。

5. 结构化输出

你可以要求查询引擎直接返回 JSON 或 Pydantic 对象,方便下游程序处理。

from pydantic import BaseModel

class Info(BaseModel):
    name: str
    amount: float

query_engine = index.as_query_engine(output_cls=Info)

一个更实用的提醒

如果你发现回答“好像有点对,但不够稳”,先别急着调生成模型。很多时候问题更靠前:

  • top_k 太大,噪音进来了
  • metadata 没过滤,搜错范围了
  • rerank 没上,相关片段顺序不对

把这些查一遍,往往比继续改 prompt 更有效。

LlamaIndex Guide
AI Engineer

LlamaIndex Guide

Use LlamaIndex to connect data sources, indexing pipelines, and retrieval workflows for RAG apps.

LlamaIndex Guide查询引擎

LlamaIndex 查询与检索 (Querying)

索引建完以后,真正会决定用户体验的,就是查询链路怎么走。LlamaIndex 强的地方不是“能回答”,而是你能更细地控制“先检索什么、检索多少、要不要重排、怎么返回”。

#1. 查询引擎 (Query Engine)

查询引擎是一个端到端的接口,它接收一个字符串问题,并返回一个 Response 对象。

python
query_engine = index.as_query_engine() response = query_engine.query("请总结本文档。") print(response.response) # 文本答案 print(response.source_nodes) # 答案来源的原始节点

#2. 检索器 (Retriever) - 核心组件

如果你不需要 LLM 生成最终答案,只需要找出相关的文本片段,你可以直接使用检索器。

python
retriever = index.as_retriever(similarity_top_k=3) nodes = retriever.retrieve("什么是向量数据库?")

#3. 高级查询模式

#A. 对话引擎 (Chat Engine)

与查询引擎不同,对话引擎具有 Memory,可以进行多轮对话。

python
chat_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 个片段,再用一个更精准的模型选出最相关的 3 个。这能极大提升答案质量。
  • Hybrid Search: 结合向量搜索(语义)和关键词搜索(精准匹配)。

不过别把这些高级技巧理解成“默认全开”。真实项目里更稳的顺序是:先看基础召回够不够,再加 rerank;先确认单索引够不够,再考虑 router;先看问题是否真的复杂,再决定要不要子问题拆分。

#5. 结构化输出

你可以要求查询引擎直接返回 JSON 或 Pydantic 对象,方便下游程序处理。

python
from pydantic import BaseModel class Info(BaseModel): name: str amount: float query_engine = index.as_query_engine(output_cls=Info)

#一个更实用的提醒

如果你发现回答“好像有点对,但不够稳”,先别急着调生成模型。很多时候问题更靠前:

  • top_k 太大,噪音进来了
  • metadata 没过滤,搜错范围了
  • rerank 没上,相关片段顺序不对

把这些查一遍,往往比继续改 prompt 更有效。

System Design

Core system design concepts and practical case studies

Learn the trade-offs and patterns that matter in technical interviews.

Open System Design →

Related Roadmaps