GraphRAG:
知识图谱增强的智能检索新范式

结合知识图谱与向量搜索,实现多跳推理与可解释AI的高级检索方法

AI检索增强 知识图谱 多跳推理
抽象知识图谱网络结构示意图

GraphRAG(Graph Retrieval Augmented Generation)是一种先进的AI检索方法,它通过结合知识图谱和向量搜索来增强大型语言模型的上下文理解、可解释性以及执行多跳推理的能力。与传统的RAG主要依赖向量相似性搜索不同,GraphRAG将数据存储为节点和边的结构化知识图谱,并利用图遍历来获取相关概念,从而能够更有效地处理复杂查询和全局性问题。

1. GraphRAG核心原理

1.1 GraphRAG的定义与重要性

GraphRAG通过结合知识图谱(Knowledge Graph)向量搜索(Vector Search)来增强大型语言模型的上下文理解、可解释性以及执行多跳推理(multi-hop reasoning)的能力[1] [11]。与传统的RAG系统主要依赖向量相似性搜索不同,GraphRAG将数据存储为节点(实体)和边(关系)的结构化知识图谱,并利用图遍历来获取相关概念。

GraphRAG的重要性体现在:

  • 为企业AI提供通向可信赖和负责任的AI的道路
  • 通过结构化推理实现更高的可解释性、规范性对齐
  • 建立组织记忆以及治理就绪的逻辑
  • 在金融、医疗保健和政府等对数据准确性要求极高的领域发挥关键作用

1.2 GraphRAG与传统RAG的区别

GraphRAG与传统RAG在数据表示、检索方法、上下文理解能力、可解释性以及多跳推理能力等方面存在显著差异[16] [242]

特性 传统RAG GraphRAG
数据结构 非结构化文本块 包含节点和关系的结构化图谱
检索方法 向量搜索(嵌入) 混合(图遍历 + 向量搜索)
上下文理解 有限,基于文本块语义相似性 强大,捕捉实体间复杂关系
可解释性 难以追踪推理路径 易于追踪推理过程和验证来源
多跳推理 能力有限 支持复杂查询,深度推理
答案质量 事实型、单跳问题可靠 复杂查询中准确性更高,上下文更丰富

1.3 GraphRAG的优势

GraphRAG相较于传统RAG,在三个层面展现出显著优势:运行时/生产效益、开发时间效益以及治理效益 [14] [240]

运行时效益

  • • 平均将LLM响应准确性提高3倍
  • • 每个问题解决时间减少28.6%
  • • 生成响应所需token减少26%-97%
  • • 更好地处理复杂多跳查询

开发效益

  • • 知识图谱提供可视化数据表示
  • • 更清晰地理解数据结构和关系
  • • 简化调试和优化过程
  • • 更容易被人类理解和推理

治理效益

  • • 更好的可解释性和可追溯性
  • • 答案可追溯到实体、路径和策略
  • • 基于图的访问控制
  • • 确保规范性对齐

2. GraphRAG的架构与工作流程

2.1 GraphRAG的核心组件

GraphRAG的架构是对传统RAG的扩展和增强,通过引入知识图谱及其相关处理组件,实现了更强大的信息检索和推理能力。

graph TB A["用户查询"] --> B["LLM查询理解"] B --> C["图查询生成"] B --> D["向量查询生成"] C --> E["图数据库"] D --> F["向量数据库"] E --> G["图检索结果"] F --> H["向量检索结果"] G --> I["结果整合"] H --> I I --> J["上下文构建"] J --> K["LLM生成"] K --> L["最终响应"] E -.-> M["知识图谱
节点: 实体
边: 关系"] F -.-> N["向量索引
文档块
实体描述"] style A fill:#e1f5fe style L fill:#f3e5f5 style M fill:#fff3e0 style N fill:#e8f5e8

知识图谱

存储和管理结构化的实体及其关系信息,形成节点和边的网络结构

图检索器

在知识图谱中导航和查找相关信息,执行图遍历和多跳查询

图推理器

解释检索到的路径和关系,评估节点间连接的相关性

向量存储

存储文本块或实体描述的向量嵌入,支持相似性搜索

大型语言模型

参与图谱构建、查询理解、图查询生成和最终答案生成

编排框架

管理和协调各组件之间的交互和工作流程

2.2 GraphRAG的索引阶段

GraphRAG的索引阶段是其工作流程中的关键预处理步骤,核心目标是从原始数据中构建或丰富知识图谱。微软提出的GraphRAG索引过程包含两个主要阶段[12] [238]

第一阶段:生成知识图谱

1. 文档切分

大型文本语料库被分割成更小、更易管理的块,以适应LLM的上下文窗口。需权衡块大小与信息粒度。

2. 提取实体和关系

LLM从每个文本块中提取实体及其关系,生成描述,分配唯一ID,并解析模糊指代。

第二阶段:构建社区层次结构并生成摘要

1. 社区检测

应用社区检测算法(如Leiden算法)对实体和关系进行分类组织,形成层次化社区结构。

2. 预生成社区摘要

LLM为每个社区预生成摘要,捕获社区内核心信息和关系,提供浓缩的知识单元。

2.3 GraphRAG的查询阶段

GraphRAG的查询阶段利用索引阶段构建的知识图谱和相关结构来回答用户问题,比传统RAG更复杂,涉及图遍历、多源信息整合和精细化的提示工程[10] [11]

flowchart TD A["用户查询"] --> B["LLM查询分析"] B --> C{"查询类型判断"} C -->|简单查询| D["向量搜索"] C -->|复杂关系查询| E["图遍历"] C -->|混合查询| F["两者结合"] D --> G["检索相关文本块"] E --> H["执行Cypher查询"] F --> I["分解为子查询"] G --> J["上下文构建"] H --> J I --> J J --> K["动态提示工程"] K --> L["LLM生成答案"] L --> M["添加溯源信息"] M --> N["返回最终响应"] style A fill:#e1f5fe style N fill:#f3e5f5 style J fill:#fff3e0 style K fill:#e8f5e8
1

用户查询接收与理解

系统接收自然语言查询,LLM分析查询意图,识别关键实体和潜在查询类型

2

信息检索

执行图检索(图遍历)和/或向量检索(相似性搜索),支持混合检索策略

3

上下文构建与增强

整合检索结果,获取相关社区摘要,序列化图结构信息,构建动态提示

4

响应生成与溯源

LLM基于增强上下文生成自然语言答案,并添加可解释性信息和来源追踪

2.4 GraphRAG的算法特点

GraphRAG的算法特点主要体现在其如何利用图结构进行知识表示、检索和推理,超越传统基于文本块或简单向量检索的RAG系统。

基于图的知识表示

  • • 实体与关系提取:利用LLM从文本中识别节点和边
  • • 社区检测:应用Leiden等算法识别紧密连接的实体群落
  • • 层次化摘要:为社区预生成LLM摘要,实现模块化知识组织

图遍历与多跳推理

  • • 结构化查询:将自然语言转换为图查询语言(如Cypher)
  • • 多跳推理:通过中间实体和关系连接信息
  • • 路径分析:追踪实体间的复杂关系路径

混合检索策略

  • • 结合图检索与向量检索优势
  • • 动态路由:根据查询类型选择最优检索方法
  • • 查询分解:将复杂查询拆分为子查询分别处理

LLM深度集成

  • • 查询理解与重写:分析意图并优化查询
  • • 图查询生成:将自然语言转换为结构化查询
  • • 上下文增强生成:利用结构化信息引导推理

3. GraphRAG的实战应用

3.1 GraphRAG的应用场景与领域

GraphRAG凭借其强大的关系推理和上下文理解能力,在多个对信息准确性和深度分析有较高要求的领域展现出广泛的应用前景。

金融与投资研究

分析财报、新闻、市场数据,构建金融知识图谱,识别投资机会,评估风险,检测欺诈活动

医疗健康与生物技术

整合患者病历、医学文献、基因组数据,辅助诊断、个性化治疗、药物研发

法律与合规

分析法律文件、判例法规,辅助案例研究、合同审查、合规检查

客户支持与智能问答

构建智能知识库,提供精准客服,理解深层意图,预测用户问题

供应链管理

分析供应商网络、物流路径、库存数据,优化运营效率和风险管理

科学研究

从海量文献中梳理知识脉络,发现研究方向,促进科研合作

3.2 GraphRAG的实际应用案例

GraphRAG的实际应用案例正在不断涌现,展示了其在解决复杂问题和提升信息获取效率方面的巨大潜力。

卡车司机在驾驶室中工作

政策制定:应对卡车司机短缺

以日本为例,通过整合YouTube视频字幕和评论数据构建知识图谱,利用GraphRAG分析数据并生成针对卡车司机短缺问题的政策建议[151]

政策研究 社交媒体分析
金融审计师使用电脑分析财务报告

微软金融审计研究助理

微软的GraphRAG项目展示了一个金融审计研究助理应用,帮助审计师快速理解和分析大量与金融审计相关的维基百科文章,通过构建知识图谱和社区摘要来回答复杂问题[146]

金融审计 研究助理
LinkedIn客服人员使用电脑工作

LinkedIn客户服务优化

LinkedIn应用GraphRAG提升客户服务质量,通过更准确地理解用户意图、检索相关知识并生成有用回复,将每个问题的平均解决时间减少了28.6% [14] [240]

客户服务 效率提升
医生使用电脑为狼疮患者制定治疗方案

Neo4j精准医疗应用

Neo4j展示了GraphRAG在精准医疗领域的应用,特别是在狼疮治疗中辅助决策。通过整合患者数据、医学文献和治疗指南构建知识图谱,帮助医生制定个性化治疗方案[156]

精准医疗 狼疮治疗

4. GraphRAG的项目搭建

4.1 技术栈选择与工具

构建GraphRAG系统需要一系列强大的工具和技术,根据Atal Upadhyay的教程[99] [185],典型的技术栈包括:

知识图谱系统

存储和管理实体及其关系

Neo4j - 成熟的图数据库
TigerGraph - 高性能图分析
NetworkX - Python图操作库

向量数据库

存储向量嵌入,支持相似性搜索

Milvus - 高性能向量数据库
Pinecone - 云原生向量服务
ChromaDB - 轻量级嵌入存储

LLM与编排框架

推理引擎和工作流管理

OpenAI GPT系列 - 核心LLM
LangChain - 编排框架
LlamaIndex - 数据连接器

编程语言与库

开发环境和数据处理工具

Python - 主要开发语言
Pandas - 数据处理
NetworkX - 图操作

开发与部署工具

环境管理和部署基础设施

Docker - 容器化
Poetry - 依赖管理
GitHub Actions - CI/CD

嵌入模型

文本到向量转换

text-embedding-ada-002
Sentence Transformers
text-embedding-3-small

4.2 项目搭建步骤与流程

搭建GraphRAG项目通常遵循一系列结构化的步骤,以确保系统正确配置和高效运行。基于Atal Upadhyay的教程[185],完整的搭建流程包括:

1

环境搭建

创建隔离且可复现的Python开发环境

mkdir graph_rag_tutorial
cd graph_rag_tutorial
python -m venv venv
source venv/bin/activate # Linux/macOS
venv\Scripts\activate # Windows
2

项目结构与依赖安装

定义项目结构,安装必要的Python包

graph_rag_tutorial/
├── input/ # 存放源文档
├── venv/ # Python虚拟环境
└── .env # 环境变量配置
pip install graph-rag
pip install python-dotenv langchain chromadb openai
3

数据准备

将原始数据转换为可处理格式,进行清理和预处理

  • • 将PDF等文档转换为纯文本
  • • 移除摘要、目录、参考文献等不相关内容
  • • 确保输入数据质量和格式一致性
4

配置GraphRAG

初始化配置文件,设置LLM和嵌入模型参数

graph-rag init --root ./
# 编辑settings.yaml配置模型参数
5

构建知识图谱

执行索引过程,从文本数据中提取结构化知识

graph-rag index --root ./
  • • 文档分块(默认1200 tokens,重叠100 tokens)
  • • 实体和关系抽取
  • • 社区检测
  • • 嵌入生成
  • • 社区报告生成
6

实现搜索方法

通过Python脚本实现多种搜索策略

# 本地搜索、全局搜索、漂移搜索
run_graph_rag_search(query, "local")
7

性能比较与优化

与传统RAG系统进行对比,评估GraphRAG效果

  • • 构建基于向量检索的传统RAG系统
  • • 设计对比实验
  • • 分析复杂查询处理能力差异
  • • 根据结果优化配置参数

4.3 知识图谱的构建方法

知识图谱的构建是整个GraphRAG系统的核心环节,它直接决定了后续信息检索的质量和效率。构建过程主要通过自动化步骤完成,充分利用了大型语言模型的能力[185] [238]

flowchart LR A["原始文档"] --> B["文档分块"] B --> C["LLM实体抽取"] C --> D["实体关系图"] D --> E["社区检测"] E --> F["社区摘要生成"] E --> G["嵌入生成"] F --> H["知识图谱存储"] G --> H B -.-> I["分块策略
1200 tokens
100 tokens重叠"] C -.-> J["实体类型
人物/组织/地点
关系识别"] E -.-> K["Leiden算法
紧密连接实体
主题聚类"] style A fill:#ffebee style H fill:#e8f5e8 style I fill:#fff3e0 style J fill:#e3f2fd style K fill:#f3e5f5

文档分块

将输入文本分割成较小、可管理的块

  • • 默认分块大小:1200个tokens
  • • 块间重叠:100个tokens
  • • 保持上下文连续性

实体和关系抽取

LLM分析文本块,识别实体和关系

  • • 提取实体名称、类型、描述
  • • 识别实体对和关系
  • • 分配唯一ID确保可追溯性

社区检测

算法识别紧密相关的实体组

  • • 应用Leiden等社区检测算法
  • • 形成主题或概念聚集
  • • 创建层次化社区结构

嵌入生成

为文本块或实体生成向量表示

  • • 使用text-embedding-3-small等模型
  • • 捕获语义信息
  • • 支持相似性计算和检索

社区报告生成

LLM为每个社区生成摘要性文本

  • • 概括社区核心主题
  • • 捕获关键信息和关系
  • • 提供浓缩的知识单元

知识图谱存储

将构建的知识图谱持久化存储

  • • 存储在图数据库中
  • • 向量索引存储在向量数据库
  • • 支持高效查询和检索

4.4 开源项目与开发者指南

在GraphRAG领域,开源项目和开发者指南为社区提供了宝贵的资源,使得更多的开发者和研究者能够接触、学习和应用这一先进的RAG技术。

微软开源项目图标

微软开源项目 microsoft/graphrag

微软的开源项目为开发者提供了构建GraphRAG系统的库和工具[164] [181]。该项目仍在积极开发和维护中,发布了多个版本,并持续进行功能增强和问题修复。

特点:允许注入自定义管道,重构了StorageFactory,修复嵌入限制器默认值
使用方式:基于GitHub仓库,使用poetry管理Python依赖,推荐Unix环境开发
GraphRAG开发教程

社区教程与指南

丰富的社区资源为开发者提供了详细的实践指南和案例分析[185]

Atal Upadhyay教程

详细的GraphRAG搭建指南,涵盖环境设置、配置、知识图谱构建和性能比较

Neo4j博客文章

介绍Neo4j与LangChain集成实现GraphRAG,解析知识图谱构建和摘要生成过程

DataStax示例

提供GraphRAG实现示例,对比纯Python和使用LangChain的不同实现方式

CSDN技术博客

介绍从源码构建GraphRAG的步骤,包括环境配置和依赖管理

开发者社区协作

开发者资源与支持

丰富的开发者资源支持学习和应用GraphRAG技术[165] [110]

GitHub仓库:源代码、文档、issue跟踪
讨论区:技术讨论、问题解答、功能建议
文档:安装指南、API参考、示例代码
贡献指南:社区贡献规范、开发流程