GraphRAG,从其命名即可看出,它绝非“检索一段文本,直接扔给大模型”的简易方案。本质上,这是一种结构化、分层级的检索增强生成方法。可以这样理解:当其他人还在搜索引擎中用关键词盲目搜寻时,你已经将整个文档库转化为一张具备逻辑层次、脉络清晰的“知识地图”。
简单来说,GraphRAG的工作流程是从原始文本中提取知识图谱,为该图谱构建社区层级结构,并为这些社区生成摘要。当真正需要提问时,直接利用这些结构化信息作为支撑,实现精准回答。

关于安装与快速上手等操作层面,此处不再展开。感兴趣的朋友可直接参考官方快速入门指南。下面,我们直接深入核心,解析其背后的原理。
整体架构主要分为两大板块:
- Index 构建——即知识图谱的构建过程。
- Query 查询——即查询引擎如何利用这张图谱。
Index 构建
这部分任务是整个流程中最繁重的,也是最体现GraphRAG精髓的部分。它分为四个阶段依次完成。
阶段 1:组装 TextUnits
首先,需要将原始文档拆分成一系列小型、可处理的单元。这个单元被称为 TextUnit,专业术语背后其实很简单:按大约 1200 个 token 切分出的文本碎片。这些碎片是后续所有操作的原材料。
阶段 2:图形提取
这一步是真正的“炼金术”。我们要从这些文本碎片中将实体、关系及声明逐一“拎”出来。
具体实现依然依赖大语言模型。它会逐一分析每一个 TextUnit,提取出结构化的信息:
- 实体和关系提取:产出每个 TextUnit 的子图。子图中包含实体的名称、类型和描述,以及连接它们的来源、目标和关系描述。
- 实体和关系摘要:提取完成后,再让大模型将这些零散的关系和实体浓缩成一段简洁的概括描述。
- 实体解析:此步骤默认不开启。主要用于处理相似或容易混淆的实体,将它们合并为所谓“协变量”。
- 声明提取:从源文本中提取带有事实判断的“声明”,相当于为文章中的“观点”与“事实”单独打上标签。
阶段 3:图形增强
此刻,我们已经拥有了一张基础的“实体-关系”图。但还远远不够——我们需要对其进行增强,使其理解内部的社区结构及隐含关联。该阶段分为两步:
- 社区检测:采用分层莱顿算法(Leiden algorithm)。简单来说,就是在图中以递归方式一层层寻找紧密连接的“社区”,直到每个社区的大小达到设定阈值。由此我们获得一个多层次的社区结构,具备在不同粒度下观察和汇总整张图的能力。
- 图形嵌入:使用 Node2Vec 算法将图“压缩”为一个向量表示。这相当于为图中的每个概念赋予一个数学坐标,在查询阶段可直接在这个向量空间中搜索相关概念。
经过以上步骤,最终产出包含所有实体和关系的基础数据表。一个功能完备的图谱,加上其社区层级结构,以及背后的向量嵌入,至此便搭建完毕。
阶段 4:社区总结
有了社区,我们需要为每个社区撰写一份“居委会报告”。这样我们就能在不同层级上对整个图谱形成宏观理解。例如,顶级社区的摘要相当于整个文档库的“总纲”,而低级别社区报告则描述局部区域的“坊间传闻”。
具体流程是:让大语言模型为每个社区生成一份摘要。随后,再对这份摘要进行二次概括,生成一份用于快速浏览的“速记版”。最后,为社区报告的全文、摘要和标题分别生成向量嵌入,以便后续快速检索。
查询引擎
图谱构建完成后,如何实际使用?GraphRAG 提供了三种主要查询模式,每种适用于不同场景。
Local Search 本地搜索
基于实体的推理。
这种模式非常直接:将知识图谱中的结构化数据与原始文档中的非结构化文本相结合。当你询问某个特定实体的问题时,例如“洋甘菊的治疗特性是什么?”,它能快速定位相关实体信息,并用这些信息增强大模型的上下文。简言之,它擅长回答“点”上的问题,非常适合需要深入了解某个具体对象的场景。
Global Search 全域搜索
全数据集推理。
这才是 GraphRAG 真正展现威力的地方。传统 RAG 方法面对需要跨文档、聚合信息的“全景式”问题时往往力不从心,例如“数据中排名前 5 位的主题是什么?”——因为它仅依赖关键词搜索,难以把握整个数据集的宏观结构。而 GraphRAG 不同,其预先构建的知识图谱已经刻画了整个数据集的“骨架”与“主题”。因此,当用户提出这类全局性问题时,全球搜索方法会直接提取那些预先汇总好的、有意义的语义聚类结果,供大模型融会贯通后给出答案。这恰好弥补了传统 RAG 在“全局理解”上的短板。
Question Generation 问题生成
基于实体的问题生成。
这一步同样巧妙:它也是将知识图谱的结构化数据与原始文档的非结构化数据相结合,但目的不再是为了回答问题,而是生成问题。它能自动为特定实体生成一系列相关候选问题。在构建知识问答系统或测试数据集时,这个功能显得尤为强大。
