GraphRAG 的工作原理
发布: (2026年1月3日 GMT+8 12:51)
3 分钟阅读
原文: Dev.to
Source: Dev.to
索引阶段(离线,成本高但只执行一次)
- 文本分块 – 将输入文本拆分为可管理的块。
- 实体抽取 – 使用 LLM 从每个块中识别实体(人物、地点、组织、概念)及其关系。
- 构建知识图谱 – 创建一个图,其中节点是实体,边是带有描述的关系。
- 社区检测 – 应用图算法(例如 Leiden 算法)来识别紧密相关实体的簇(社区)。
- 层次化摘要 – 为每个社区生成多层级摘要(自下而上的层次结构:详细的低层社区 → 更高层的聚合摘要)。
结果是一个结构化索引:图 加上 预生成的社区摘要。这捕捉了整个数据集中的隐式连接,而仅靠向量嵌入无法实现。
查询阶段
- 本地查询(具体细节) – 检索与提及实体相邻的相关子图或文本块。
- 全局查询(宏观理解) –
- 选择与查询相似度较高的社区摘要。
- 使用 LLM 从每个摘要生成部分答案。
- 将这些部分答案聚合并摘要为最终连贯的响应。
这种在社区层面上的“映射‑归约”方式实现了整体推理。
为什么它比标准 RAG 更好
- 全面性 – 捕获更广的主题和关联,提供更完整的答案。
- 多样性 – 减少重复,呈现多元视角。
- 赋能 – 为复杂数据集(例如相互冲突的新闻来源)提供有依据、基于证据的洞见。
原论文中的实验(数据集约 1 百万 token)显示,GraphRAG 在全面性和多样性等指标上,对全局问题的表现比基线 RAG 高出 70–80 %。
实践细节
- 开源实现: microsoft/graphrag on GitHub
- 成本 – 索引阶段需要大量 LLM 调用(用于抽取和摘要),但查询阶段效率高。
- 后续改进 – 如 LazyGraphRAG(更省成本)、DRIFT 搜索、动态社区选择以及针对新领域的自动调优等变体。
总结
GraphRAG 通过利用图结构进行“全局感知”,在让 LLM 对大型、私有、叙事丰富的数据集进行推理方面实现了重大突破。当标准 RAG 产生不完整或表面化答案时,GraphRAG 尤其有价值。