免费POC,零成本试错

AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


从图的视角看 RAG:GraphRAG 的工作方式与思考

发布日期:2025-08-17 08:51:18 浏览次数: 1518
作者:筱可AI研习社

微信搜一搜,关注“筱可AI研习社”

推荐语

GraphRAG突破传统RAG局限,用知识图谱构建全局视野,轻松解决"整片大海"的复杂问题。

核心内容:
1. GraphRAG与传统向量RAG的核心差异
2. 知识图谱构建与查询两阶段工作原理
3. 实验验证与关键技术细节解析

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家

📄 从图的视角看 RAG:GraphRAG 的工作方式与思考

🐼 概要

这篇文章是写给对检索增强生成 (Retrieval-Augmented Generation, RAG) 技术感兴趣,并希望了解一些新方法的初学者。

我们可能都用过检索增强生成 (RAG),它在文档里查找具体答案时很方便。但如果我们的问题更大一些,比如“这几百份报告里,主要的争议点是什么?”或者“这个项目的所有访谈记录合起来,反映了哪些核心主题?”,传统的向量 RAG 可能就有些力不从心了。它擅长“大海捞针”,却不擅长描绘“整片大海的样子”。

这篇文章就是想和你一起探讨一种应对这类“全局性”问题的方法:GraphRAG。

我们将从 GraphRAG 的核心思路出发,看看它为什么要先把非结构化的文本构建成一张知识图谱。接着,我们会详细地走一遍它的两个核心阶段:精巧的索引构建过程,和高效的查询回答流程。通过这个过程,我们能理解它是如何获得“全局视野”的,以及它与我们熟悉的传统 RAG 到底有什么不同。

目录

  • 🐼 概要
  • 🦁 前言
  • 🐧 GraphRAG 与传统 RAG 的区别在哪?
  • ✨ GraphRAG 是如何工作的?
    • 🌟 阶段一:索引构建
    • 🦊 阶段二:查询与回答
  • 🐨 它可能会有什么问题?
  • 🧩 论文中的实验是怎么设计的?
    • 🛠️ 提出正确的问题
    • 🐾 评判好坏的标准
    • 🎯 实验一:大模型当裁判
    • 🦁 实验二:量化指标来验证
  • 🐻 实验告诉了我们什么?
  • ✨ 扩展知识:自我反思分块提升实体提取召回效率
    • 🌟 一、核心问题:大尺寸文本块的实体提取痛点
    • 💡 二、“自反思”技术的具体实现步骤
    • 🐾 三、技术设计的关键细节
    • 🎯 四、效果验证
  • 🧩 扩展知识:上下文窗口选择与分块设计
    • 🦢 一、分块设计的核心目标与权衡关系
    • 🛠️ 二、分块的基础参数设计
    • 🦊 三、分块的动态优化:与“自反思”协同
    • ✨ 四、分块设计的领域适配性
    • 🌟 五、分块效果的验证与评估
  • 💡 扩展知识:Leiden 社区发现算法
    • 🐾 为什么要用 Leiden 算法?
    • 🎯 核心的数学公式
    • 🧩 Leiden 算法的核心流程
    • 🛠️ 它提供了哪些理论保证?
  • 🐨 总结
  • 🦁 参考文献
  • 📚 往期精选


🦁 前言

我们通常使用的检索增强生成技术,在处理需要从海量文档中查找特定信息的查询时表现不错。这种方法,在论文里被称为向量 RAG (vector RAG),它的工作方式是先在文档库里找到和用户问题最相关的几个文本片段,然后把这些片段交给大语言模型 (LLM) 去生成答案。

但是,向量 RAG 有一个明显的短板。它处理不了那些需要通盘理解整个文档集才能回答的“全局性”问题。

比如,你想问“这个数据集里主要讨论了哪几个核心主题?”或者“过去十年,跨学科研究是如何影响科学发现的?”这类问题,向量 RAG 就很难回答好。因为它每次只能看到文档库的一小部分,缺乏一个全局的视角。

为了解决这个问题,研究人员提出了 GraphRAG。顾名思义,这种方法的核心是利用了图 (Graph) 结构。整个过程大致可以分为两个阶段:索引构建和查询应答。

下面我们来具体看看吧。

🐧 GraphRAG 与传统 RAG 的区别在哪?

GraphRAG vs.传统 RAG:核心能力对比
GraphRAG vs.传统 RAG:核心能力对比

主要的区别体现在处理问题类型的能力、答案的全面性和多样性、答案的直接性以及高效性这几个方面。

GraphRAG 的设计初衷是为了解决传统 RAG 难以处理的“全局理解”和“意义构建” (sensemaking) 问题。传统的 RAG 擅长回答那些答案可以在文档中少数几个具体段落里找到的问题。但是,当问题需要理解和总结整个数据集才能回答时,比如“这个数据集的主要趋势是什么?”,传统 RAG 就显得力不从心了。

实验结果一:性能对比(全面性)
实验结果一:性能对比(全面性)

实验结果显示,在回答全局性问题时,GraphRAG 生成的答案在全面性 (Comprehensiveness) 和多样性 (Diversity) 上显著优于传统 RAG。

我从论文里面看到,所有 GraphRAG 的变体在全面性指标上的胜率都在 72% 到 83% 之间,在多样性指标上的胜率则在 62% 到 82% 之间。这意味着 GraphRAG 的回答能覆盖更多相关细节,并提供更丰富的视角。

实验结果二:效率对比(Token 消耗)
实验结果二:效率对比(Token 消耗)

不过,传统 RAG 在直接性 (Directness) 这个指标上表现更好。这说明它的答案更加简洁、直奔主题。这也很容易理解,因为它检索的是最相关的几个文本片段,所以答案会更聚焦。

对于需要进行多次全局查询的场景,GraphRAG 提供了一种非常高效的模式。通过使用最高层级的社区摘要 (C0),它在回答问题的效果上依然优于传统 RAG,但所消耗的计算资源 (token 数量) 却大大减少,比处理全部源文本要少 97% 以上。

播客文字记录和新闻文章上的测试结果这张图表展示了在两个不同数据集上,各种方法之间的直接对比胜率。我们可以看到,论文提出的 GraphRAG 方法在处理问题时,能够生成比 (SS) 更全面、更多样化的答案,同时相比于 (TS) 也有一定的优势。不过,这种优势是以牺牲答案的直接性为代价的。

下面的表格向我们展示了不同方法在处理数据时所涉及的上下文单元数量和 token 消耗。

C0 到 C3 代表了 GraphRAG 从最顶层 (最概括) 到最底层 (最详细) 的社区摘要。TS 指的是直接对文本块进行摘要的方法。从表中可以很直观地看到,层级越高 (如 C0),需要处理的单元数和 token 数就越少。特别是 C0,它的 token 消耗量相比于 TS (可以看作是处理全部内容的基准) 减少了 97% 以上,这在处理大规模数据时能极大地节省计算资源。


Podcast Transcripts




News Articles





C0 C1 C2 C3 TS C0 C1 C2 C3 TS
Units
34
367
969
1310
1669
55
555
1797
2142
3197
Tokens
26657
225756
565720
746100
1014611
39770
352641
980898
1140266
1707694
% Max
2.6
22.2
55.8
73.5
100
2.3
20.7
57.4
66.8
100

这个表格用来衡量答案的量化全面性,具体来说,就是计算每个答案平均包含了多少个可验证的“事实性声明” (Claims)。

SS 指的是传统的语义搜索 RAG。可以看到,无论是新闻文章还是播客文字记录,所有全局方法 (C0-C3, TS) 提取出的声明数量都明显多于传统的语义搜索 (SS)。这从一个侧面印证了全局方法在全面性上的优势,它们的答案包含了更多的信息量。在不同层级的 GraphRAG 变体之间,差异则不是特别大。

Condition
Average Number of Claims


News Articles Podcast Transcripts
C0
34.18
32.21
C1
32.50
32.20
C2
31.62
32.46
C3
33.14
32.28
TS
32.89
31.39
SS
25.23
26.50

这张表格衡量的是答案的量化多样性。研究人员将答案中的所有“事实性声明”进行语义聚类,簇 (cluster) 的数量越多,就代表答案涵盖的主题和视角越丰富。

表格中的“Distance Threshold”是聚类算法的一个参数,可以暂时不用太关注。核心要看的是“Average Number of Clusters”这一列。我们可以发现,在所有条件下,C0 (最高层级的 GraphRAG 摘要) 产生的聚类数量都是最多的。这说明,尽管 C0 的摘要最概括,但它能有效地整合来自不同子社区的信息,从而在最终答案中呈现出最高的多样性。同样,所有全局方法 (C0-C3, TS) 的多样性都高于传统方法 (SS)。

Dataset
Distance Threshold
Average Number of Clusters







C0 C1 C2 C3 TS SS
---
---
---
---
---
---
---
---
News Articles
0.5
23.42
21.85
21.90
22.13
21.80
17.92

0.6
21.65
20.38
20.30
20.52
20.13
16.78

0.7
20.19
19.06
19.03
19.13
18.62
15.80

0.8
18.86
17.78
17.82
17.79
17.30
14.80
---
---
---
---
---
---
---
---
Podcast Transcripts
0.5
23.16
22.62
22.52
21.93
21.14
18.55

0.6
21.65
21.33
21.21
20.62
19.70
17.39

0.7
20.41
20.04
19.79
19.22
18.08
16.28

0.8
19.26
18.77
18.46
17.89
16.66
15.07

✨ GraphRAG 是如何工作的?

graphrag流程图
graphrag流程图

整个流程可以分为两个主要阶段:索引构建和查询与回答。这两个阶段的设计都体现了“从局部到全局”的核心思想。

🌟 阶段一:索引构建

这个阶段是 GraphRAG 的基石,它的目标与传统 RAG 完全不同。传统 RAG 构建的是“向量索引”,用于做语义匹配;而 GraphRAG 构建的是一种“知识图谱 + 层级社区摘要”的复合索引。它的目的是将非结构化的文本,转化为结构化的、按主题聚合的知识,为后续的全局问答提供一个高效、高质量的输入源。

整个构建过程可以细分为五个关键步骤。

💡 第一步:文本分块 (Text Chunking)

这是所有工作的第一步,即将原始文档分割成适合大语言模型处理的文本单元。这里的关键在于平衡成本与召回率。

我从论文的附录里看到,团队经过测试后,选择了 600 token 作为默认的块大小,并设置了 100 token 的重叠。600 token 的尺寸在实体召回率上表现很好,不至于像更大的块那样容易遗漏信息;同时,调用成本也比更小的块要低。而 100 token 的重叠,则是为了避免一个完整的实体关系被分块边界无情地切开。

分块的方式也不是简单粗暴地按字数切割,而是会优先考虑语义完整性,比如按段落、句子,甚至是播客中的对话轮次来分割。

🐾 第二步:信息提取 (Extraction)

分好块之后,就轮到大语言模型登场了,它的任务是从每个文本块中提取出结构化的信息,主要有三类:实体、关系和主张(Claims)。

通过一个 prompt,模型会被引导去识别出文本中的实体(如组织、人物),实体之间的关系(如“A 公司收购了 B 公司”),以及关于这些实体可被验证的事实性主张(如“B 公司股价上涨”)。

这个过程是可定制的。比如在处理医疗文档时,可以在 prompt 中加入“疾病”、“药物”等专业领域的示例,引导模型提取出更精准的领域实体。对于特别大的文本块,还会用到我们前面提到的“自反思”技术,通过多轮检查来补全可能遗漏的实体。

🎯 第三步:构建知识图谱 (Graph Construction)

当所有文本块的结构化信息都被提取出来后,下一步就是将它们编织成一张巨大的知识图谱。

在这个图谱里,每个独特的实体是一个节点,实体间的关系则是一条。一个很有意思的设计是,边的权重取决于这个关系在原文中被提及的次数。一个关系被反复提及,那么它的权重就越高,代表这个关系可能更核心。而提取出的“主张”,则会作为属性附加到对应的节点或边上,为它们提供事实支撑。

🧩 第四步:社区划分 (Community Detection)

一个包含了成千上万节点和边的知识图谱,虽然信息量大,但还很杂乱。为了让它变得有序,系统会使用社区发现算法对图谱进行“主题聚合”。

论文中选用了 Leiden 算法,因为它在处理大规模图谱时既稳定又高效,而且支持层级划分。算法会基于“模块度”的原则,把图中连接紧密的节点划分到同一个社区。这个过程是递归的,从最顶层的根社区(C0)开始,不断地在社区内划分子社区(C1, C2),直到最细粒度的叶子社区(C3)为止,形成一个覆盖了整个数据集的层级化主题结构。

🛠️ 第五步:生成社区摘要 (Summary Generation)

最后一步,也是为查询阶段做好直接准备的一步,就是为每一个层级的每一个社区都生成一份报告式的摘要。

这个生成过程采用的是一种自下而上的策略。

系统会先为最底层的叶子社区(C3)生成摘要。它会优先挑选社区内最重要的信息(比如权重最高的边、连接最多的节点以及相关主张),填充到模型的上下文窗口中,然后生成一份详细的摘要。

在生成更高层级社区(如 C2)的摘要时,它会利用其下属所有 C3 子社区已经生成好的摘要。如果直接汇总所有底层信息会超出 token 限制,模型就会聪明地用这些更精炼的子社区摘要来替代原始的、更冗长的信息,从而实现对更大范围主题的概括。

通过这五个步骤,GraphRAG 就完成了一套复杂但高效的索引构建。最终的产出不再是冰冷的向量,而是一个有结构、有主题、有层级的知识库。示例社区检测。(a)级别 0,对应于具有最大模块度的层次划分;(b)级别1,揭示了这些根级别社区内的内部结构

🦊 阶段二:查询与回答

知识图谱与社区划分
知识图谱与社区划分

当用户提出一个全局性问题时,GraphRAG 并不直接去检索原始文档,而是利用前面生成的社区摘要来回答问题。这个过程基于一个“映射-归约” (Map-Reduce) 框架,包含了一系列精心设计的步骤。

🐻 准备工作:选择与打乱摘要

在正式开始之前,系统需要先做一些准备工作。首先是选择使用哪个层级的社区摘要。这个选择很灵活,取决于用户的需求。如果只是想快速地对主题有个大概了解,可以选择最顶层的 C0 摘要,因为数量少、成本低。如果需要深入了解细节,则可以选择更底层的 C3 摘要,这里包含的信息粒度最细。

选定摘要层级后,一个很重要的步骤是随机洗牌。这么做的目的是为了避免信息扎堆。比如,某个主题的所有摘要恰好都挨在一起,如果它们在分块时被分到了同一个块里,而这个块最终又因为排序靠后没能进入上下文窗口,那这个主题的信息就可能完全丢失了。洗牌后,再按照预设的 token 大小(比如 8k)将摘要分割成多个“摘要块”,这样每个块里都会包含来自不同主题的摘要,信息分布更均匀。

✨ 映射阶段:并行生成“部分答案”

准备工作就绪后,就进入了“映射” (Map) 阶段。这个阶段的核心思想是并行处理,让每个摘要块都独立地生成一个局部的、部分的答案。

系统会把用户的问题和每一个摘要块分别发送给大语言模型,并利用多线程或分布式计算让这些任务同时运行,这极大地提升了处理效率。

这里的 prompt 也经过了专门设计,它会要求模型扮演一个“综合分析报告的助手”,并且必须严格依据摘要块里的信息来回答,不能凭空编造。一个关键的要求是,回答中必须保留原始社区摘要里的数据引用,比如 [Data: Reports (1,3,5,+more)] 这样的格式,这为答案的可追溯性提供了保障。

在生成每个部分答案之后,模型还需要做一件事:给这个答案打一个 0 到 100 的帮助度评分 (Helpfulness Score)。这个分数评估了这份部分答案对解决用户问题的帮助程度。如果一个摘要块的内容和用户问题完全不相关,那么它生成的部分答案得分可能就是 0,这样的答案会被直接过滤掉,不会进入下一个环节。

🌟 归约阶段:整合最优信息

所有摘要块都生成了带评分的部分答案后,就来到了“归约” (Reduce) 阶段。这个阶段的目标是将这些零散的部分答案整合成一个高质量的全局答案。

首先,系统会把所有通过了过滤的部分答案,按照“帮助度评分”从高到低进行排序。这样做的目的是确保最有价值的信息能够被优先考虑。

然后,系统会按照这个排序,从分数最高的答案开始,依次将它们的文本内容填充到一个新的上下文窗口中。这个填充过程会持续进行,直到窗口被填满为止。

我从论文里看到一个有趣的细节:研究人员对比了 8k、16k、32k 等不同大小的上下文窗口,发现 8k 窗口的性能是最好的。这可能是因为更大的窗口容易出现“信息迷失在中间” (lost in the middle) 的问题,即模型无法有效利用过长上下文的中间部分。同时,如果某个部分答案加进来会导致窗口超限,系统会直接舍弃这个答案以及排在它后面的所有答案,以保证每个答案的完整性。

💡 最终生成:输出全局答案

最后一步,就是基于这个填充了高质量信息的上下文窗口,生成最终的全局答案。

此时,模型会再次被一个特定的 prompt 指导,要求它综合窗口内的所有信息,给出一个结构清晰、有理有据的回答。这个最终答案同样需要保留所有的数据引用,确保每一个观点都能追溯到来源,这使得虚构信息的风险大大降低。

更有趣的是,这个流程还支持迭代。如果用户对第一次的答案不满意,觉得细节不够,可以基于答案中的数据引用,定位到更深层级的社区摘要,然后重复上述的“映射-归约”流程,从而实现从全局概览到局部细节的分析。

🐨 它可能会有什么问题?

实体与关系抽取的质量是整个方法的基础。如果模型表现不稳定,出现幻觉或者漏掉了关键信息,那么构建出来的知识图谱从一开始就是不准确或不完整的,这将直接影响后续所有步骤的质量。

实体匹配也存在局限性。论文中提到,他们使用的是精确字符串匹配来识别同一个实体。这是一个比较简单的方法,可能会出问题。例如,Microsoft Research 和 MSR 在现实中可能指向同一个机构,但这种方法会把它们当成两个独立的实体。

在生成社区摘要,特别是从子社区摘要生成更高层级摘要的过程中,不可避免地会丢失一些细节。为了概括,模型可能会忽略一些细微但可能对某些特定问题很重要的信息。

社区划分的有效性也依赖于知识图谱的结构。如果图谱因为抽取质量不高而连接稀疏,那么划分出的社区可能主题不明确,后续生成的摘要质量也会不高。

最后,GraphRAG 的设计重点是全局性问题。因为它依赖于摘要信息,对于那些需要精确定位原始文本中某个具体引述或数据的查询,它的表现可能不如直接在原文中进行语义搜索的传统 RAG 方法。

🧩 论文中的实验是怎么设计的?

研究人员设计的实验旨在回答一个核心问题:在处理需要全局理解整个文档集的“意义构建”类问题时,GraphRAG 是否优于传统方法?为此,他们首先需要解决两个前置问题:用什么数据提问?以及用什么标准评判?

🛠️ 提出正确的问题

由于标准的问答数据集侧重于事实检索,不适合本次实验,研究人员设计了一种自适应的提问方法。

他们让大语言模型首先基于对数据集的简短描述,生成几种可能会使用这个数据集的用户画像 (Personas) 以及这些用户可能执行的任务 (Tasks)。然后,针对每个“用户-任务”组合,再让模型生成 5 个需要通盘理解整个数据集才能回答的高层次问题。

通过这种方式,他们为每个数据集都生成了 125 个定制化的、符合实验目的的测试问题。

🐾 评判好坏的标准

他们设计了三个专门用于评估“意义构建”答案质量的标准:全面性 (Comprehensiveness)、多样性 (Diversity)、赋能 (Empowerment)。

同时,他们还引入了一个直接性 (Directness) 作为对照标准,用于评估答案的简洁和切题程度。

🎯 实验一:大模型当裁判

这个实验是评估的核心,旨在直接比较不同 RAG方法生成答案的质量。

实验数据集包括一个约 100 万词元的播客文字稿数据集和一个约 170 万词元的新闻文章数据集。

实验共设置了六种不同的方法来进行两两比较。

GraphRAG 社区摘要层级其中包括四种使用不同摘要层级的 GraphRAG 变体,从最顶层最概括的 GraphRAG C0,到包含更多细节的 GraphRAG C1 和 GraphRAG C2,再到最底层最详细的 GraphRAG C3

另外两种是作为基线对比的方法。一种是**文本摘要 (TS),它不构建知识图谱,直接用 map-reduce 流程来总结所有文本块。另一种是语义搜索 (SS)**,它代表了传统的向量 RAG,通过向量相似性检索相关的文本块来生成答案。

对于 125 个测试问题中的每一个,系统都会让任意两种方法生成各自的答案。然后,将问题和两个答案同时提交给一个独立的模型裁判,让它根据上述四个标准逐一判断哪个答案更好。

🦁 实验二:量化指标来验证

这个实验的目的是为了用一种更客观的数值指标,来确认和验证实验一中模型裁判主观判断的有效性。

研究人员从每个答案中抽取出可验证的事实性声明 (factual claims)。他们使用了一个名为 Claimify 的工具来完成这个抽取过程。一个事实性声明是指明确陈述了某个可验证事实的简单陈述。

例如,对于下面这个来自答案的句子:“加州和纽约都实施了激励措施来鼓励可再生能源的采用,这凸显了可持续性在政策决策中的广泛重要性。”

这个句子会被分解成两个独立的、可以被核查的事实性声明:加利福尼亚州实施了鼓励可再生能源采用的激励措施;纽约州实施了鼓励可再生能源采用的激励措施。

通过这种方式,研究人员能够量化每个答案中包含的事实信息量。他们定义了两个量化指标:量化全面性,即每个答案中包含的独立声明的平均数量;以及量化多样性,通过对声明进行聚类,计算形成的簇的数量来衡量。

🐻 实验告诉了我们什么?

实验结果很清晰地表明,在处理需要通盘理解整个数据集才能回答的“全局性”问题上,GraphRAG 的表现显著优于传统的向量 RAG 方法,尤其是在答案的全面性和多样性方面。

一个有趣的发现是,即便是和同样处理全局问题、但不构建知识图谱的“文本摘要” (TS) 方法相比,GraphRAG 依然有微小但持续的性能优势。这说明,将文档内容构建成知识图谱这一步,确实对生成更高质量的答案有帮助。

GraphRAG 还展现了它高效的一面。当使用最高层级、最概括的社区摘要 (C0) 来回答问题时,它在全面性和多样性上依然能胜过传统 RAG,但所消耗的计算资源,也就是 token 数量,却减少了超过 97%。

同时,研究人员通过提取答案中的“事实性声明”数量和多样性,从量化角度也验证了上述结论。全局方法生成的答案确实包含了更多、更丰富的事实信息。

当然,实验也客观地指出了 GraphRAG 的相对弱点。由于传统向量 RAG 的检索范围更聚焦,它生成的答案在直接性上表现是最好的。

✨ 扩展知识:自我反思分块提升实体提取召回效率

在 GraphRAG 的文本分块与实体提取环节中,“自反思” (self-reflection) 技术是为解决“大尺寸文本块导致实体提取召回率下降”而设计的核心优化手段,具体实现流程与逻辑如下:

🌟 一、核心问题:大尺寸文本块的实体提取痛点

文本分块大小存在天然权衡:长文本块(如 2400 token)可减少 LLM 调用次数、降低成本,但 LLM 容易遗漏早期或低频出现的实体。实验数据显示,当块大小从 600 token 增至 2400 token 时,GPT-4 提取的实体引用数量近乎减半。这是因为 LLM 在处理长文本时存在“注意力分散”或“信息衰减”问题,无法全面捕捉所有关键实体。

为解决这一矛盾,GraphRAG 引入“自反思”技术:在不缩小块大小(仍保留低成本优势)的前提下,通过多轮 LLM 交互补全遗漏的实体,确保提取质量。

💡 二、“自反思”技术的具体实现步骤

“自反思”是一个多阶段迭代式的 LLM 交互流程,核心是让 LLM 先生成初始结果,再对结果进行“自我评估-补全优化”,具体分为 3 个关键步骤:

  1. 初始实体提取:首先,将大尺寸文本块输入 LLM,生成初始实体列表。此时的结果可能存在遗漏。
  2. 自我评估:将“初始实体列表+原始文本块”重新输入 LLM,通过一个强制二元决策的 prompt 让 LLM 评估是否有实体遗漏,LLM 只能回答“是”或“否”。
  3. 补全优化:若 LLM 评估结果为“是”,则触发补全流程。通过一个强化提示,引导 LLM 细致地补全遗漏的实体。这个“补全-评估”的循环会重复进行,直到 LLM 评估结果为“否”,或达到预设的最大迭代次数。

通过这一流程,大尺寸文本块的实体提取质量可接近小尺寸块。实验显示,2400 token 的文本块经过 3 轮自反思后,实体引用检测数量与 600 token 块(无自反思)相当,同时保留了“减少 LLM 调用成本”的优势。

🐾 三、技术设计的关键细节

自反思的设计依赖于精巧的 prompt 工程,包括用于二元判断的评估 prompt 和强调补全的补全 prompt

同时,通过设定最大迭代次数来平衡提取质量与时间成本。这项技术也能很好地与领域定制化提取兼容,只需在 prompt 中加入领域专属的实体类型示例即可。

🎯 四、效果验证

600、1200、2400chunks条件下的有无反思实体引用检测对比
600、1200、2400chunks条件下的有无反思实体引用检测对比

在 HotPotQA 数据集上的测试直观体现了自反思的价值:

  • 无自反思时:2400 token 块的实体引用检测数量仅为 600 token 块的 50% 左右。
  • 3 轮自反思后:2400 token 块的实体引用数量接近 600 token 块,且显著高于无自反思的 1200 token 块。
  • 成本对比:2400 token 块(3 轮自反思)的 LLM 调用次数仅为 600 token 块的 1/4,实现了质量与成本的双赢。

🧩 扩展知识:上下文窗口选择与分块设计

在 GraphRAG 的技术框架中,文本分块 (Text Chunking) 是连接原始文档与后续实体提取、知识图谱构建的关键前置步骤,其设计核心围绕“成本与召回率的平衡”展开。

🦢 一、分块设计的核心目标与权衡关系

文本分块的根本矛盾在于“块大小”的选择。

长块可以减少 LLM 的调用次数,从而降低 API 成本和时间消耗,但模型处理长文本时容易出现“注意力分散”,导致对文本块早期或低频实体的召回率下降。

短块的实体和关系召回率高,但会导致调用次数激增,并且可能切断实体间的跨块关联。

GraphRAG 的分块设计目标,就是在“召回关键信息”与“控制成本”之间找到最优解。

🛠️ 二、分块的基础参数设计

GraphRAG 在实验与落地中采用“600 token 基础块 + 100 token 重叠”作为默认配置。

600 token 被认为是一个“召回率-成本”的平衡点,在保证较高召回率的同时,单块也能覆盖相对完整的语义单元。

而 100 token 的重叠设计,主要是为了解决实体或关系被分块边界切割的问题,确保跨块的语义关联不丢失。

分块的方式也并非简单的按 token 数切割,而是会结合文本结构特征,比如优先按段落、句子边界来分割,保证语义的完整性。

🦊 三、分块的动态优化:与“自反思”协同

为了进一步平衡成本与召回率,GraphRAG 将分块设计与“自反思”技术深度协同。

在处理超大规模文本时,可以选择更大的块尺寸(如 1200 或 2400 token)以降低调用成本,然后通过多轮“自反思”来弥补大尺寸块在实体召回率上的损失。实验证明,这种方式能够以更低的成本达到与小尺寸块相当的实体提取质量。

✨ 四、分块设计的领域适配性

GraphRAG 的分块参数并非固定不变,而是可以根据文本类型和领域特性进行动态调整。

例如,对于对话式的播客记录,可能需要稍大的块来覆盖一轮完整的对话;而对于结构清晰的新闻文章,则可以使用稍小的块。对于专业术语多的学术论文或交叉引用频繁的法律文档,可能需要更大的重叠度来保证关键关联不被切断。

🌟 五、分块效果的验证与评估

团队通过实体提取召回率和下游图谱质量两个指标来验证分块设计的有效性。

结果显示,600 token 的分块设置在实体召回率和图谱的“实体-关系完整性”上,都表现优异,为后续的社区检测与摘要生成奠定了高质量的数据基础。

💡 扩展知识:Leiden 社区发现算法

在 GraphRAG 的流程中,一个关键步骤是将知识图谱划分为社区,以便进行层级化总结。为此,它选用了 Leiden 算法。选择 Leiden 算法的根本原因,在于它解决了其前身,非常流行的 Louvain 算法的一个严重理论缺陷。

🐾 为什么要用 Leiden 算法?

Louvain 算法的核心问题在于,它可能会产生“任意糟糕连接的社区”。在最坏的情况下,一个社区内部甚至可能是不连通的。这个问题源于 Louvain 的节点移动机制,它可能导致社区被不当地分裂。

实验表明,这个问题非常普遍。Leiden 算法的设计初衷就是从根本上解决这个问题。

🎯 核心的数学公式

Leiden 算法本身并不定义新的社区质量标准,而是优化现有的“质量函数”,目标是让函数的得分尽可能高。论文中讨论了两个核心的质量函数。

Modularity (模块度)模块度是社区发现领域最经典和最常用的一个衡量标准。它的核心思想是,一个好的社区划分,其内部的连接紧密程度应该显著高于一个随机情况下网络的连接紧密程度。

来源: From Louvain to Leiden: guaranteeing well-connected communities, Formula (1)

在这个公式里, 是社区  内部的实际边数, 是社区内所有节点的度之和(可以理解为社区的总连接数), 是整个网络总边数,而  是一个分辨率参数,可以调整社区大小的偏好。一个好的社区,它的  应该远大于随机期望值 

Constant Potts Model (CPM)CPM 是模块度的一个替代方案,思想更直接。它认为一个好的社区,其内部的连接密度本身就应该达到某个阈值,而不是与一个随机模型去比较。

来源: From Louvain to Leiden: guaranteeing well-connected communities, Formula (A4)

在这里, 仍然是社区内部实际边数, 是社区内的节点数, 是该社区可能存在的最大边数。参数  在这里直接扮演了密度阈值的角色。

🧩 Leiden 算法的核心流程

leiden算法流程Leiden 算法通过一个三阶段的迭代过程来优化上述质量函数:

  1. 局部节点移动:与 Louvain 类似,算法会尝试将节点移动到能够最大化提升质量分数的邻居社区中。但 Leiden 的效率更高,因为它只考虑那些邻居节点发生了变化的节点。
  2. 精炼划分:这是 Leiden 算法最核心的创新。在形成初步的社区划分后,Leiden 会对每个社区的内部进行精炼,确保社区内部是紧密连接的,将那些连接糟糕的部分分离开。
  3. 网络聚合:算法会基于精炼后的划分创建一个新的、更粗粒度的网络。然后,算法会回到第一步,在这个聚合后的新网络上重复上述过程,直到社区划分的质量分数无法再获得任何提升为止。

🛠️ 它提供了哪些理论保证?

Leiden 算法不仅仅是在经验上表现更好,它还提供了一系列 Louvain 算法无法提供的严格数学保证。

它能保证每次迭代后产出的所有社区都是连通的。当算法完全收敛时,它能达到一个更强的状态,即社区是子集最优 (subset optimal) 的,这意味着社区内部结构非常稳固。

🙋♂️ 入群交流公众号菜单点击「社群」,扫码直接入群回复关键词「入群」,添加作者微信人工邀请,注意备注:入群

🐨 总结

读到这里,我们一起把 GraphRAG 的工作方式和核心思路梳理了一遍。

希望现在你对这种方法有了一个更具体的认识。我们从传统向量 RAG 的局限性出发,也就是它在处理需要“全局理解”问题上的短板。

接着,我们看到了 GraphRAG 是如何通过一个“预处理”的思路来应对这个挑战的。它选择在用户提问前,就花费力气将海量文档构建成一张结构化的知识图谱,并利用社区发现算法将其整理成不同层级的主题摘要。

我们还具体了解了它在索引构建和查询回答这两个阶段的工作细节,比如它是如何提取实体、如何进行层级化的社区划分,以及在回答问题时那个高效的“映射-归约”流程。同时,我们也讨论了这种方法可能存在的一些实际问题,比如对实体抽取质量的依赖,以及在概括过程中可能出现的信息丢失。

通过这些内容,我们能理解 GraphRAG 在答案的全面性和多样性上的优势,也知道了它在答案直接性上相比传统方法的取舍。

🦁 参考文献

  1. Traag, V. A., Waltman, L., & van Eck, N. J. (2019). From Louvain to Leiden: guaranteeing well-connected communities. Scientific reports, 9(1), 5233.
  2. Edge, D., Trinh, H., Cheng, N., Bradley, J., Chao, A., Mody, A., ... & Larson, J. (2024). From Local to Global: A GraphRAG Approach to Query-Focused Summarization.

📚 往期精选

欢迎在留言区分享你的想法,每条留言我都会认真阅读!你的反馈是我创作的最大动力 ❤️💗 立即行动1. 点赞、收藏、关注,分享给朋友。2. 为账号加星标,获取更多内容。3. 以本文为灵感,整理一份属于自己的笔记。🚗 行动召唤"与其等着 AI 改变世界,不如自己参与变革!在这里,让 AI 成为你弯道超车的秘密武器。"


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询