GraphRAG
GraphRAG 从文档构建知识图谱,然后检索实体、关系和社区摘要,以回答多跳问题和全局性问题。
GraphRAG(图检索增强生成)是一种检索增强生成 (RAG),它从知识图谱中检索信息,以取代或补充通过向量搜索找到的文本块。大型语言模型 (LLM)首先从文档集合中提取人物、公司、零件和地点等实体,以及这些实体之间的关系。在用户提问时,系统会检索相连的实体、关系路径或整个图簇的摘要,并将其作为上下文提供给 LLM。这个名称最常与 Microsoft Research 于 2024 年发布的面向查询的摘要 GraphRAG 方法相关联,该方法同时提供了开源实现;这个名称也用于指代任何基于图进行检索的 RAG 系统。
向量 RAG 为何需要图#
标准 RAG 会将文档块编码为嵌入向量,存储在向量数据库中,并检索与问题最相似的少数几个文本块。这种方法适用于只需一段内容就能回答的问题,但难以处理另外两类问题:
- 多跳问题:答案依赖于分散在多个文档中的事实,这些事实仅通过共享实体关联起来。例如,哪些工厂依赖某个供应商,而该供应商位于被风暴关闭的港口附近。没有任何单个文本块与整个问题相似。
- 全局问题:询问整个语料库的问题,例如“这 5,000 份事故报告的主要主题是什么?”,需要从每份文档中获取信息,而向量检索只会返回排名靠前的少数几个文本块。
图会明确存储事实之间的关联,因此检索可以沿着这些关联进行;图社区的摘要则能覆盖整个语料库。
GraphRAG 的工作原理#
Microsoft 的 GraphRAG 分四步构建索引。它先将文档拆分为文本单元,再让 LLM 从每个单元中提取实体、关系和主张;这是一种由 LLM 驱动的命名实体识别和关系抽取方式。它会将多个单元中重复出现的实体描述合并为同一个节点。然后,它运行分层 Leiden 社区检测,将联系紧密的实体分组成嵌套社区,并让 LLM 为每个层级的每个社区撰写一份摘要报告。
之后,查询会沿两条路径之一进行:
- 局部搜索:从问题中提到的实体出发,收集其邻居、关系、社区报告,以及提及这些实体的原始文本单元。
- 全局搜索:以 map-reduce 方式处理社区报告:每份报告都会根据相关性分数生成一个部分答案,然后将最相关的部分答案合并为最终回答。
论文报告称,在约一百万词元的数据集上,与传统 RAG 基线相比,全局搜索能针对整个语料库的问题生成全面得多、更多样的答案。
局部搜索的核心是图遍历。下面这个 Python 示例使用 NetworkX存储 LLM 可能从不同文档中提取的三元组,并从问题中的实体出发沿关系向外遍历:
import networkx as nx
# Entity-relationship triples that an LLM extracted from separate documents
triples = [
("Typhoon", "closed", "Kaohsiung port"),
("Kaohsiung port", "ships parts for", "Supplier A"),
("Supplier A", "makes", "bearing B-17"),
("bearing B-17", "is used at", "Ohio plant"),
("Texas plant", "uses", "motor M-4"),
]
graph = nx.DiGraph()
for head, relation, tail in triples:
graph.add_edge(head, tail, relation=relation)
# Question: "Which plants could the typhoon disrupt?"
# Local search: follow relationships outward from the entity named in the question
edges = nx.bfs_edges(graph, "Typhoon")
context = [f"{head} {graph[head][tail]['relation']} {tail}" for head, tail in edges]
print("\n".join(context))它会输出从“Typhoon closed Kaohsiung port”(台风关闭高雄港)到“bearing B-17 is used at Ohio plant”(俄亥俄工厂使用 B-17 轴承)的四跳路径;没有任何单份源文档陈述了这种关联,同时它会排除无关的德州工厂。LLM 会收到这些内容作为提供依据的上下文,并据此回答俄亥俄工厂面临风险。
GraphRAG 与相关方法的比较#
- 知识图谱:由实体和有类型的关系构成的数据结构。GraphRAG 会专门构建或复用知识图谱,以便为 LLM 检索上下文。
- 混合搜索:结合关键词检索和文本块向量检索。许多生产环境中的 GraphRAG 系统会将图遍历与混合搜索结合使用。
- 智能体式 RAG:智能体会在多个步骤中决定检索什么以及何时检索。图查询可以是它使用的工具之一。
- 图神经网络(GNNs):通过训练从图结构中学习,用于链接预测等任务。GraphRAG 会在检索时使用图,而不需要训练。
实际应用#
- 药物发现:连接基因、蛋白质、化合物和疾病的图谱,让研究人员可以跨数千篇论文提问,例如哪些已获批药物能靶向疾病通路中的蛋白质。
- 金融调查:分析人员可以通过空壳公司和共同董事追踪所有权链,并让 LLM 总结可疑交易背后的关系网络。
- 供应链风险:关联供应商、零部件、站点和运输路线,可以回答哪些产品依赖单一工厂等问题。
- 企业知识:大型报告、工单和会议记录集合可以按主题搜索,社区摘要则能回答有关整个集合的问题。
图谱还可以保存摄像头看到的内容,这是基于视频的多模态 RAG的基础。实体消歧,即判断两处提及是否指向同一事物,是目标跟踪在视频中执行的步骤:Ultralytics YOLO26跟踪会为每个人或车辆分配一个跨帧保持不变的 ID,因此视频图谱可以为每个跟踪对象存储一个节点,并用边记录它与其他对象相邻出现的地点和时间,而不是为每一帧都建一个节点。
成本与权衡#
索引是主要开销,因为 LLM 会读取每个文本单元以提取实体,然后撰写每份社区报告,因此大型语料库的索引成本远高于向量嵌入。提取错误(例如把两个同名但不同的人合并)会传播到涉及这些实体的每个答案中;文档变更后,也必须重新提取信息并重新总结图谱中受影响的部分。微软的LazyGraphRAG通过名词短语提取和图统计构建概念图,并将所有 LLM 调用推迟到查询时,从而解决成本问题;其索引成本与向量 RAG 相同,仅为完整 GraphRAG 的 0.1%。










