LightRAG 查询流程
整个查询分两个大步骤:Retrieve(检索) 和 Generation(生成)。
官方流程图,当前分析基于1.4.11版本代码。
阶段一:Retrieve(检索)
第 1 步:关键词提取
Query
└── Keywords Extraction Prompt + System Prompt
└── [use LLM] keywords_extraction
├── low_level_keywords(低层关键词,具体实体词)
└── high_level_keywords(高层关键词,抽象主题词)
用户的 Query 先被送入 LLM,提取出两类关键词:
- low_level_keywords:具体的实体名称,用于 local 检索路径
- high_level_keywords:抽象的主题概念,用于 global 检索路径
第 2 步:双路并行 Embedding + 向量检索
low_level_keywords ──[use EB Model]── Embedding ──> TopK Entities Results
high_level_keywords ──[use EB Model]── Embedding ──> TopK Relations Results
两路关键词分别经过 Embedding 模型向量化,在 Milvus 里做向量检索:
entities_vdb→ 返回 TopK Entities Results(最相关的实体选项)relationships_vdb→ 返回 TopK Relations Results(最相关的关系选项)
第 3 步:图增强,生成双路 Query Context
左路(Local Query Context):
TopK Entities Results
├── Related text_units ← 从 lightrag_doc_chunks 按 chunk_id 取原文
├── Related Relations ← 从 Neo4j 按实体直关联的边
└── Local Query Context
右路(Global Query Context):
TopK Relations Results
├── Related Entities ← 从 Neo4j 获取关系关联的节点
├── Related text_units ← 从 lightrag_doc_chunks 按 chunk_id 取原文
└── Global Query Context
两路查询结果合并成 combined context,它包含:实体属性、关系描述、关联的原始文本片段。
阶段二:Generation(生成)
combined context + System Template Prompt
└── System Prompt
└── [use LLM]
└── Response
把 combined context 和系统提示词拼在一起,送给 LLM 生成最终答案。
对应的存储组件
| 查询步骤 | 用到的存储 | 具体操作 |
|---|---|---|
| 关键词提取缓存 | PG lightrag_llm_cache | hash(prompt) 命中则跳过 LLM |
| 实体向量检索 | Milvus entities_vdb | query(low_level_keywords) |
| 关系向量检索 | Milvus relationships_vdb | query(high_level_keywords) |
| Related Relations / Entities | Neo4j | get_nodes_batch、get_edges_batch |
| Related text_units | PG lightrag_doc_chunks | get_by_ids(chunk_ids) 取原文 |
| 最终回答缓存 | PG lightrag_llm_cache | 相同 query 直接返回 |
lightrag_doc_status | 查询时完全不参与 | 仅在写入 pipeline 中更新状态 |