RAG(四):LightRAG 查询流程

0 阅读2分钟

LightRAG 查询流程

整个查询分两个大步骤:Retrieve(检索)Generation(生成)

官方流程图,当前分析基于1.4.11版本代码。

lightrag_query_workflow.jpeg

阶段一: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_cachehash(prompt) 命中则跳过 LLM
实体向量检索Milvus entities_vdbquery(low_level_keywords)
关系向量检索Milvus relationships_vdbquery(high_level_keywords)
Related Relations / EntitiesNeo4jget_nodes_batchget_edges_batch
Related text_unitsPG lightrag_doc_chunksget_by_ids(chunk_ids) 取原文
最终回答缓存PG lightrag_llm_cache相同 query 直接返回
lightrag_doc_status查询时完全不参与仅在写入 pipeline 中更新状态