首页 > 教程攻略 > ai资讯 >【RAG】GraphRAG开源:查询聚焦摘要的图RAG方法

【RAG】GraphRAG开源:查询聚焦摘要的图RAG方法

来源:互联网 时间:2026-08-15 14:56:47

前言

传统RAG在处理全局性问题时,其实有点力不从心。比如,当你问“这些数据里,排在前5的主题是什么?”——你会发现,传统的检索方法很难给出一个令人满意的答案。

【RAG】GraphRAG开源:查询聚焦摘要的图RAG方法

问题的根源在于,这类查询本质上是

查询聚焦的摘要(QFS)任务

,而非传统的显式检索。简单来说,它不是去“找一段话”,而是要从全局视角理解并总结信息。

GraphRAG的思路很巧妙:利用LLM来构建一个基于图的文本索引,也就是从源文档里自动生成一张知识图谱。有了这张图,那些复杂的、大规模的数据集,就能被转化成更容易理解和操作的知识结构,实体(像人物、地点、机构)之间的关系也一目了然。

一、方法

1.1 源文档分块

这个步骤是整个GraphRAG流程的基石,直接决定了后续知识图谱构建和摘要生成的质量。其中最关键的决定就是

源文档的分割粒度

——也就是,从文档里提取出文本后,该把它切成多长的一块来处理?这个决策会直接影响LLM提取图索引元素的效率和效果。

块大小的主要影响体现在两方面:

  • LLM上下文窗口:

    文本块越长,调用LLM的次数可以越少,但过长的上下文也可能导致信息提取的召回率下降。
  • 召回率与精度的平衡:

    在提取过程中,需要找到一个平衡点。较长的文本块可能提高召回率,但可能会牺牲精度。

一个实验数据很能说明问题:在HotPotQA数据集上,用不同大小的文本块(600、1200、2400 tokens)配合gpt-4-turbo进行单次提取,结果发现,使用600 tokens的小文本块,提取出的实体引用数量几乎是2400 tokens块的两倍。这个结果,值得深思。

1.2 信息抽取(实例提取)

这一环节是构建图索引的核心,目标是确保从文本中提取出有用的

结构化信息(KG)

。具体来说,就是从每个文本块里识别出图上的节点和边的实例,为后续的社区检测和摘要生成打好基础。

方法上主要分为三步:

  • KG构建:

    利用LLM和特定的提示(prompt)来识别文本块中的所有实体(名称、类型、描述),然后找出实体之间的关系(源实体、目标实体、关系描述)。
  • 附加协变量提取:

    除了实体和关系,还可以提取一些额外的协变量,比如默认的提示会提取与实体相关的声明(包括主题、对象、类型、描述等)。
  • 漏提取兜底:

    为了平衡效率和质量,这里使用了一种“多轮gleanings”方法。它会先让LLM自己评估是否所有实体都已提取,如果发现有遗漏,再用一个专门的提示来鼓励LLM补上这些漏网之鱼。

上图中每个圆圈代表一个实体(比如一个人、一个地点或一个组织),圆圈大小表示该实体关联的关系数量,颜色则把相似的实体归为一组。这个基于图结构的自下而上的聚类方法,正是我们能回答不同抽象层次问题的关键。

1.3 实例提取→实例摘要

用LLM

提取实体、关系和声明的描述

,本身就是一种抽象摘要。LLM需要创建出有意义、独立的摘要,这些摘要甚至可能暗示文本中没有明确写出来的隐含关系。通过摘要化,大量文本信息被浓缩成更简洁、易处理的格式,极大提高了后续步骤的效率。更重要的是,在处理长文本时,

实例摘要能有效避免关键信息在LLM的长上下文中被淹没或丢失。

1.4 实例摘要→图社区

这步是构建图模型的核心:把上一阶段得到的信息组织成一个

同质无向加权图

。实体是节点,关系是边,边的权重由检测到的关系实例的归一化计数决定,这能反映关系的强度或频率。

接着是社区检测:

  • 社区划分:

    用社区检测算法将图切分成多个社区,社区内部的节点之间连接更紧密。
  • Leiden算法:

    文章特别提到使用Leiden算法,因为它能高效地恢复大规模图的层次结构,提供不同粒度的社区划分。

1.5 图社区→社区摘要

这一步是为每个社区创建一份“报告式”摘要。这些摘要彼此独立,但合在一起就能勾勒出整个数据集的全局结构和语义。可以说,社区摘要本身就是一种非常有用的工具,特别适合在没有具体问题时,对整个语料库进行探索和理解。

1.6 社区摘要→社区答案→全局答案

最后的答案生成过程,采用了经典的三步走:

  • 准备社区摘要:

    先把所有社区摘要随机打乱,切成预定大小的块。这么做是为了避免信息集中在一个上下文窗口里,降低丢失风险。
  • 生成中间答案(Map社区答案):

    对于每个社区摘要块,并行调用LLM生成中间答案。同时,LLM还要为每个答案生成一个0到100的有用性得分。得分是0的答案,会被直接过滤掉。
  • 汇总成全局答案(Reduce到全局答案):

    根据有用性得分,把中间答案从高到低排序,然后逐步添加到新的上下文窗口中,直到达到令牌限制。最终,这个整合后的上下文窗口,被用来生成返回给用户的全局答案。

二、实验

为了验证GraphRAG的有效性,原文使用了两个大规模数据集:一个包含1669个文本块的播客转录数据集(约100万token),和一个包含3197个文本块的新闻文章数据集(约170万token)。这个量级,差不多相当于10本小说。

和naive RAG、全局文本摘要方法相比,GraphRAG在

全面性

多样性

上的优势非常突出。特别是当使用较小的8k token上下文窗口时,它表现得尤其出色。在全面性上,平均胜率达到58.1%;在多样性(平均胜率52.4%)和授权性(平均胜率51.3%)上,也和更大的上下文窗口表现相当。

还有一个在私有数据集上的实验,

链接如下

参考文献

  • 私有数据集实验:https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/

  • paper:From Local to Global: A Graph RAG Approach to Query-Focused Summarization,https://arxiv.org/pdf/2404.16130

  • 代码已开源:https://github.com/microsoft/graphrag