网上经常能看到关于GraphRAG的讨论,但直到一个月前,我才真正动手试了试。花了一段时间折腾下来,效果确实惊艳——文档的组织能力和回答质量都远超预期。不过,代价也着实让人肉疼:用OpenAI API跑完官方示例中的那本书,光测试就烧掉了大概7美元。性能没得说,但钱&包有点扛不住。
如果你是RAG系统的新手,先快速回顾一下传统RAG的工作原理。如果你已经熟悉,那应该也对它的痛点深有体会:
- 文本块之间的上下文很容易丢失
- 文档一多,检索性能断崖式下降
- 要集成外部知识?简直像蒙着眼睛解魔方——每一步都摸不着头脑
GraphRAG的工作原理

GraphRAG是传统RAG的增强版本,核心思想分两个阶段:索引和查询。
索引阶段
- 从源文档开始,先拆分成若干子文档(和传统RAG类似)
- 然后并行做两件事:
- 实体提取:把人物、地点、公司等关键实体找出来
- 关系提取:发现跨不同文本块之间实体之间的关系
- 接着构建一个知识图谱——节点是实体,边是它们之间的关系
- 再通过识别紧密相关的实体,形成一个个社区
- 在不同社区层级上生成分层摘要(一共三级)
- 最后用归约-映射的方法,逐步合并文本块,输出整体摘要
查询阶段
- 收到用户的查询后,先判断需要哪个层级的细节
- 然后直接在社区层级上做检索(而不是传统RAG的文本块层级)
- 查看社区摘要来生成局部响应
- 最后把多个相关社区的局部响应组合成完整的答案
GraphRAG最大的创新在于把信息组织成图结构,再利用社区检测来生成上下文更丰富的回答。不过话说回来,传统RAG系统依然有它的用武之地,尤其当你算一算GraphRAG的运行成本时——那个数字真的会让人犹豫。
设置GraphRAG
⚠️ 提醒:这个实验跑在GPT-4 API上,成本比较高。我的测试单次花了大概7美元(基于GPT-4模型)。
下面一步步走完设置流程。
环境设置
首先,创建一个虚拟环境:
conda create -n GraphRAG
conda activate GraphRAG
安装GraphRAG包:
pip install graphrag
目录结构
GraphRAG对目录结构有特定要求,为了顺利运行,请按以下方式准备:
- 创建一个工作目录
- 在其中创建
_ragtest/input文件夹结构 - 把源文档放进
input文件夹
这里以官方提供的书籍示例为例。用下面命令下载到 input 文件夹:
curl https://www.gutenberg.org/cache/epub/24022/pg24022.txt > ./ragtest/input/book.txt
配置
初始化工作区:
python -m graphrag.index --init --root ./target
这一步会生成必要的配置文件,主要是 settings.yml。你需要在里面:
- 设置OpenAI API密钥
- 配置模型(默认用GPT-4做处理,OpenAI做嵌入)
- 按需调整文本块大小(默认300个token)和重叠部分(默认100个token)
构建知识图谱
运行索引过程:
python -m graphrag.index --init --root ./target
查询你的图谱
GraphRAG提供两种主要查询方式:
全局查询 —— 适合问主题、整体内容理解这类宽泛问题:
python -m graphrag.query --root ./target --method global "what are the top themes in this story"
局部查询 —— 适合问文档里具体实体或关系的问题:
python -m graphrag.query --root ./target --method local "what are the top themes in this story"
成本因素:值得吗?
来算笔账。拿示例书籍测试时,GraphRAG总共调用了:
- 约570次GPT-4 API请求
- 大约25次嵌入请求
- 处理了超过100万个token
总成本:每本书大约7美元。效果确实好,但能不能承受,就得看你的预算和场景了。
