LightRAG 使用经验总结:知识召回的调优与踩坑
知识召回不到?排查路径
在使用 LightRAG 构建知识库时,如果发现召回的答案不准或信息缺失,按以下顺序排查:
1. 提高召回数量
LightRAG 执行查询时会从两个核心数据源并行检索,通过两个参数控制召回量:
top_k(即kg_top):控制从**知识图谱(KG)**中召回的实体和关系数量,默认 60chunk_top_k(即chunk_top):控制从向量数据库中召回的原始文本块数量,默认 20
| 参数 | top_k (kg_top) | chunk_top_k (chunk_top) |
|---|---|---|
| 数据源 | 知识图谱(KG):结构化实体和关系 | 向量数据库(Chunks VDB):非结构化文本块 |
| 控制内容 | 图谱检索返回的实体和关系的最大数量 | 向量相似度搜索返回的原始文本块的最大数量 |
| 核心作用 | 提供结构化、高层次的关联信息 | 提供非结构化、原始文档的细节信息 |
| 默认值 | 60 | 20 |
| 调优建议 | 值越大,关联信息越广,但可能引入噪音。适用于多跳推理场景 | 值越大,原始文本越多,但可能引入冗余片段 |
| 资源影响 | 影响较大,增加 LLM 交互 Token | 影响相对较小 |
调优方向:
- 回答缺乏细节 → 增加
chunk_top_k - 回答信息缺失、关系断裂 → 增加
top_k - 回答冗长跑题或 Token 消耗过大 → 降低
top_k - 推荐起点:
top_k : chunk_top_k ≈ 3:1(如 60:20 或 45:15)
2. 使用 mix 查询模式
mix 模式结合知识图谱的关系推理能力和原始文本的丰富细节:
python
from lightrag import LightRAG, QueryParam
rag.query(
"你的问题",
param=QueryParam(
mode="mix",
top_k=40,
chunk_top_k=15,
enable_rerank=True
)
)
3. 检查数据清洗:Chunk 缺失
如果发现部分 chunk 在清洗后缺失,需要重新清洗数据。检查清洗流水线中是否有 chunk 被意外丢弃或截断。
4. 检查知识图谱:实体孤立
如果知识图谱中出现大量孤立实体(没有建立图谱关系),说明数据清洗模型的质量不够。需要:
- 更换清洗数据的模型(更强的关系抽取能力)
- 提升数据清洗的质量,确保实体间的关系被正确识别和建立

LightRAG 查询内部流程
text
┌─────────────────────────────────────────────────────────────┐
│ 查询入口 │
│ rag.query("你的问题", param=QueryParam(mode="mix", ...)) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 1. 关键词预处理 │
│ · 若无显式关键词,调用LLM进行分析,生成高层(主题级)和 │
│ 低层(细节级)双层次关键词 │
│ · 关键词将作为图谱检索的入口 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 2. 并行双路检索 │
│ +------------------------+------------------------+ │
│ │ 路径A: 图谱检索 │ 路径B: 向量检索 │
│ │ · 关键词匹配实体与关系 │ · 问题向量化 │
│ │ · 获取候选实体节点 │ · 向量相似度搜索 │
│ │ · 提取邻接节点 │ · 按相似度排序 │
│ │ · 获取元数据/描述文本 │ │
│ │ 输出:关系描述、实体属性│ 输出:原始文本块 │
│ +------------------------+------------------------+ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 3. 结果融合 │
│ · 将图谱结果与文本块结果合并 │
│ · 控制数量:通过 top_k (KG) 和 chunk_top_k (文本) 限制 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 4. 重排序与截断 │
│ · 调用重排序模型(Reranker),对候选片段重新打分排序, │
│ 将最相关的排到最前 │
│ · 根据Token限制执行截断,确保不超出LLM上下文窗口 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 5. 构建最终Prompt │
│ · 将筛选后的上下文填入预设的结构化Prompt模板 │
│ · Prompt会强制LLM基于给定信息回答,严禁编造 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 6. LLM生成答案 │
│ · 将最终Prompt发送给大语言模型 │
│ · 接收LLM返回的自然语言答案 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 7. 结果输出 │
│ · 返回响应主体:{"answer": "...", "references": [...]} │
│ · references 字段包含所有引用的原文片段,方便溯源 │
└─────────────────────────────────────────────────────────────┘
核心环节
- 关键词预处理 — LLM 分析生成双层次关键词(高/低层)
- 并行双路检索 — 图谱检索 + 向量检索同时进行
- 结果融合 —
top_k控制图谱结果数,chunk_top_k控制文本块数 - 重排序与截断 — Reranker 重新打分,确保最相关内容排在前列
- 构建 Prompt — 结构化模板,强制基于给定信息回答
- LLM 生成 — 将最终 Prompt 发给大模型
- 结果输出 — 返回答案 + 引用来源

双路并行检索的互补设计
LightRAG 采用**图谱检索(路径A)与向量检索(路径B)**并行融合的设计,核心优势在于两种检索范式天然互补,通过"关系骨架 + 血肉细节"协同工作。
| 维度 | 路径A:图谱检索 | 路径B:向量检索 | 合并互补后的效果 |
|---|---|---|---|
| 捕捉信息类型 | 实体、关系、属性(结构化) | 原始文本段落、句子片段(非结构化) | 既有高层关系(如"A导致B"),又有具体证据(如"某文档第3段详细说明了如何导致") |
| 优势 | 多跳推理、隐式关联、全局视野 | 语义相似匹配、细节保留、低层事实 | 回答复杂问题时,既能沿图谱跳转找到间接关联,又能从原文中抽取支撑细节 |
| 弱点 | 依赖抽取质量,可能遗漏细粒度文本信息 | 缺乏关系推理能力,容易忽略跨段落、跨文档的逻辑链 | 互相弥补:图谱为向量检索提供关系导航,向量检索为图谱提供原文锚定 |
| 对缺失信息的容忍度 | 若实体/关系漏抽,则检索失败 | 若语义相似度低或切块不合理,可能漏掉关键片段 | 一个通道漏掉的信息,另一个通道可能补上 |
合并流程(以 mix 模式为例)
- 图谱检索 — 从知识图谱中召回实体、关系描述及元数据,输出结构化关系说明文本(如"实体X与实体Y之间存在'依赖'关系,权重0.8")
- 向量检索 — 用问题向量匹配文本块向量库,输出非结构化原始文本块
- 合并与去重 — 按相关性分数混合排序,通过
top_k和chunk_top_k截取候选,可选 Reranker 精排 - 最终上下文 — Prompt 中同时包含"从图谱推理出的关联知识"和"从原文直接引用的证据片段"
整体优势
| 优势 | 解释 | 解决什么问题 |
|---|---|---|
| 高召回率 | 两条独立的检索路径,只要有一条成功召回关键信息即可 | 路径B遗漏了某个片段,但路径A通过关系遍历找到了它 |
| 强推理能力 | 图谱支持多跳推理(如"A→B→C"),向量检索难以跨越多个文档片段的逻辑链 | 回答"找出所有间接影响X的因素"这类需要关系传播的问题 |
| 低幻觉风险 | 上下文既有关系锚点又有原文引用,LLM被强制基于两者回答 | 减少生成无关或虚假内容,提高答案可溯源程度 |
| 健壮性 | 即使图谱构建不完美(实体漏抽),向量检索仍能提供原始文本;反之亦然 | 适应真实世界中数据质量参差不齐的情况 |
| 灵活性 | 通过 top_k / chunk_top_k 比例调整两个通道的权重 | 在"需要广泛关联"与"需要精确原文"之间取得平衡 |
直观例子
问题:"某公司2024年财报中提到的'风险A'与它前一年收购的子公司B有何关联?"
- 仅用路径A(图谱检索):如果实体抽取正确,图谱中有"公司-收购→子公司B""子公司B-导致→风险A"的关系,能推理出关联。但如果抽取时遗漏了"风险A"节点,则回答失败
- 仅用路径B(向量检索):能找到包含"2024财报""风险A""子公司B"的文本块,但无法自动连接"收购"这个因果关系,回答可能只是片段拼凑
- 合并后:图谱提供"收购"关系链,向量提供财报原文中对风险A的描述和子公司B的具体情况。LLM生成"子公司B的某项业务导致了风险A的出现"这样既有关联推理、又有原文支撑的答案
LightRAG 的并行双路设计,本质上是在结构化的知识推理与非结构化的细节检索之间架起桥梁。合并后的互补效果使其在处理复杂、跨文档、需要深层理解的问题时,显著优于单一检索架构的 RAG 系统。

最终上下文的构建机制
LightRAG 的最终答案既源于原始文本证据,又经过了知识图谱的逻辑验证。在 hybrid 或 mix 模式下发起查询时,内部处理流程如下:
核心三步流程
并行检索
- 图谱检索(路径A):从知识图谱中召回相关的实体和关系
- 向量检索(路径B):从向量数据库中搜索语义最相似的文本块
结果合并(Fusion)
- 两条路径的结果汇集,系统对不同来源的结构化和非结构化信息进行合并与融合
构建最终上下文
- 关键步骤:将图谱检索得到的实体/关系(代表关联知识)和向量检索得到的相关文本块(代表原文证据)共同整合,构建出一个包含 "实体、关系、文本块" 的混合上下文
合并的多样性与可观测性
- 不同模式、不同策略:在不同模式下,LightRAG 会采取不同的融合策略。在某些实现中,会采用"轮询"方式交替从两个来源选取结果,确保信息多样性
- 通过
references验证:最新 API 在返回最终答案的同时会返回references,可以清晰看到最终答案融合了哪些图谱关系和文本段落
LightRAG 通过"先并行检索、后融合构建"的内部机制,将图谱的关联知识与原始文档的文本证据无缝整合到同一个提示上下文中,提供给大语言模型进行回答。