资讯动态

GraphRAG入门:从传统RAG到知识图谱问答的实战指南

发布时间:2026/10/21 9:18:28 来源:尧图企业网站定制
大概半年前我在帮一个内部项目搭知识库问答系统文档就三四十份用户的问题里却老有一些全局性的我们所有产品线里跟过这个项目的同事还有几个在负责别的项目这几个模块的负责人之间有没有合作交集。传统RAG一问一个不吱声。也就是那会儿我开始研究GraphRAG才意识到大模型知识库问答的天花板并不在模型本身而在检索的组织方式。这篇内容就是写给那些和我一样从传统RAG入门、正被检索效果不够好困住的小白程序员。我会从传统RAG为什么翻车讲起把GraphRAG的核心流水线拆开再给一条能跑通的最小实操路线最后聊聊全局搜索和局部搜索怎么选、成本怎么控。全程不堆术语能把GraphRAG的为什么和怎么做都讲清楚。1. 解决一个真实痛点传统RAG在知识库问答里卡在哪1.1 传统RAG的三板斧每个做过大模型应用的人应该都接触过这套标准动作文档切块、向量化、相似度检索。流程大致是先把知识库文档按固定大小切成若干段落用嵌入模型把每个段落转成向量存起来用户提问的时候把问题也转成向量在向量库里做相似度搜索取回最相似的TopK段最后把这些段落拼进提示词交给大模型生成回答。我用一个生活类比来解释这套机制想象你进了一个阅览室管理员把所有书拆成一张张卡片每张卡片上写一段摘要和页码。你问问题管理员就拿着问题卡片去比对找到最相似的一叠卡片把对应的几页书摆到你面前。这套方案在单点事实问答上确实非常能打。比如某产品的发布日期是什么某接口的返回字段有哪些基本一问一个准。原因很简单这类问题的事实就藏在某一个片段里相似度检索很容易把它揪出来。我在早期做的几个知识库Demo用的都是这种架构效果也还算体面。1.2 三个典型的翻车场景但知识库规模上来之后问题就暴露了。我总结了三个最典型的翻车场景基本覆盖了传统RAG的软肋。场景一跨文档串联。问A项目用到了数据库X数据库X的维护团队是哪些人答案可能散落在三份文档里没有任何一个chunk同时包含这条完整链条。TopK检索抓回来的片段各说各话模型要么开始胡编要么答非所问。场景二宏观全局问题。问当前知识库一共覆盖了哪些业务团队这是一个全局性问题答案是由所有chunk共同表达的。向量检索按相似度抓回来的前十个chunk很可能只是几个团队各自的介绍模型很难拼出一份完整的全景图。场景三关系与路径问题。问功能A和功能B之间有没有依赖各自的负责人是谁常规检索抓回的片段虽然都包含A和B但依赖关系是跨越多个chunk的结构信息不是文字相似度能衡量出来的。1.3 为什么相似度检索解决不了上述问题根因其实很清晰chunk被切碎后块与块之间的结构关系被向量化彻底抹掉了。向量只告诉你这两段话长得相似不告诉你这两个实体其实是同一个事物这两个块在逻辑上是上下游关系。我一直用一句话去理解传统RAG把知识库当成了一堆独立纸条来管理每张纸条的内容单独编码纸条之间没有任何索引关系。当问题需要把多张纸条拼起来看的时候它就只能靠模型自己脑补脑补不出准确答案就会出现遗漏或者幻觉。1.4 GraphRAG的解题思路GraphRAG的做法很直接在回答之前先花力气把整个知识库读成一张图。实体是节点实体之间的关系是边再把图划分成一个个社区为每个社区生成摘要。等用户提问的时候它不是拿着问题去原文里翻而是先在图上定位证据再把证据交给大模型生成答案。你可以把两种架构想象成查资料的不同方式传统RAG是筛选一堆长得像的段落GraphRAG是先建一张知识地图回答问题时在地图上定位、沿关系链路走一遍。这个差异正是它解决全局性问题的底气来源。2. 理解GraphRAG流水线文档是怎么变成图的2.1 从分块到实体关系抽取GraphRAG的索引阶段有一连串明确的步骤。第一步和传统RAG一样把文档切成块。GraphRAG默认的chunk size在600个token左右相邻块重叠100个token。这个重叠不是浪费它的作用是让跨块的实体引用尽量有上下文衔接避免同一个实体被切得七零八落。第二步每个chunk都会被送到大模型那里做实体识别和关系抽取。模型需要从文本里提取出现的实体比如人、项目、系统、指标同时识别出实体之间的关系比如某系统A依赖系统B某员工负责项目C。这一步的输出是结构化数据最终会成为图谱的节点和边。这里有个关键设计实体抽取不是靠规则硬抠而是让模型完整读一遍chunk由它判断哪些实体值得记录、关系和属性怎么组织。这种做法的代价是这一步是整个流水线里最吃模型能力也最消耗成本的部分。后面我会专门算这笔账。第三步把抽取结果做实体合并。同一个实体在不同chunk里表述可能不一样比如知识库系统KB系统知识库平台它们需要在图谱里被归并成同一个节点。GraphRAG使用嵌入向量的相似度来做对齐配置项里有一个阈值控制合并的严格程度。2.2 社区检测与分层摘要图谱搭建完成之后GraphRAG会运行社区检测算法常用的包括Leiden算法。社区检测说白了就是对图做聚类把彼此连接紧密的节点划分进同一个社区。最终一个知识库会形成多层嵌套的社区结构像学校、班级、小组那样一层套一层。社区划分完GraphRAG会对每个社区调用一次大模型生成社区报告。报告内容通常包括社区里的核心实体、这些实体之间的关系、社区内部的重要事实以及这个社区可能支撑哪些类型的问题。注意这一步是全局问题能力的关键。打个比方传统RAG给每个chunk做了一张检索卡GraphRAG则是把所有chunk按知识主题组团并给每个团写了一份总结报告。回答宏观问题时模型不需要去翻几百个chunk直接读社区报告就能掌握全貌。2.3 索引产物长什么样跑完索引后项目目录下会生成一组.parquet文件。我用一个表整理它们各自的作用文件内容对应概念entities实体节点含名称、类型、描述图的顶点relationships实体间关系含关系类型、权重图的边claims实体上附着的事实断言如某人负责某项目、某系统依赖另一系统带属性的边communities每个实体的社区编号以及该社区在分层树中的level图的聚类结果community_reports每个社区的分层摘要回答全局问题时优先使用社区报告text_units原始文本块局部搜索时会回溯到原文片段证据来源理解这些产物之后的调优就顺了。如果你打开community_reports看不太懂也很正常它本来就是给大模型看的中间材料不需要人来逐字精读。还有一点值得说传统RAG的索引产物是向量数据库里的向量本质上不可解释GraphRAG留下的图谱、社区、报告都是可检查、可修正的中间产物。一个问题回答错了你能定位到是抽取错了、合并错了还是社区划分粗了这是它工程上手感好的重要原因。3. 从零跑通最小Demo小白也能完成的实操路线3.1 环境准备与项目初始化GraphRAG在Python 3.10以上可以正常安装运行。我建议在虚拟环境里操作避免污染系统环境。python3 -m venv graphrag-env source graphrag-env/bin/activate pip install graphrag接着建一个演示目录并执行初始化mkdir graphrag-demo cd graphrag-demo graphrag init --root .这个命令会生成标准项目骨架关键内容如下input/放原始文档的目录支持txt、md、csv等格式settings.yaml核心配置文件.env存放模型服务密钥等敏感信息prompts/默认的实体抽取、社区摘要提示词模板可以自定义初始化完成后的第一件事不是急着改配置而是往input目录里丢几份小文档。我建议先拿五六份小文档试跑几百个字最合适。第一次跑通最重要内容多了反而分不清是配置问题还是数据问题。3.2 settings.yaml的关键配置字段作为新手不用把所有字段都读懂先认准几个核心字段input: file_type: text base_dir: input chunking: size: 600 overlap: 100 models: default: type: chat api_base: http://你的模型服务地址 model: 你的模型名称 temperature: 0.1 embed: type: embedding api_base: http://你的模型服务地址 model: 你的嵌入模型名称 output: base_dir: output在.env里放好模型服务的密钥和地址例如LLM_API_KEY你的密钥 LLM_API_BASEhttp://你的模型服务地址这里有个新手经常踩的坑settings.yaml里也有api_key相关的位置但实际生效的可能是.env里的值优先级容易搞混。排查问题的时候先确认.env两遍再说。关于模型选择我的建议是索引阶段尽量用指令跟随能力强、对中文支持好的模型因为抽取质量直接决定图谱质量最终回答问题阶段可以用轻量一点的模型只要阅读长上下文和总结能力过关就行。3.3 执行索引与首次查询配置没问题就可以跑索引了graphrag index这会在终端打印流水线进度建议把日志仔细看几遍能发现很多流程信息。首次运行会比较慢因为要建缓存、调模型做抽取。中途失败也没关系GraphRAG支持断点续跑修复问题后重新执行同名命令即可。索引完成后就能体验两种问答方式了graphrag query --method global 整个知识库里涉及哪些业务方向 graphrag query --method local 某个特定系统的负责人是谁到这一步你就拥有了一个既能回答全局问题、也能回答细节问题的本地知识库问答工具。我第一次跑通之后看到community_reports里生成的分层摘要才真正理解GraphRAG为什么能把全局问题答得这么稳。4. 全局搜索与局部搜索两种问答方式的实战差别4.1 全局搜索的Map-Reduce机制--method global走的是先搜索再综合的路径。首先从候选社区报告集中挑出与问题相关的社区摘要这一步用文本嵌入相似度然后对挑出来的摘要做中间总结也就是Map最后把所有中间总结合并成最终回答也就是Reduce。这个机制让全局搜索特别擅长回答整体是什么样的问题。比如这堆项目文档里哪些团队参与过跨产品协同答案原本不在某个具体chunk里而在很多chunk共同构成的全局图景中。全局搜索直接对社区报告做分析覆盖度比向量检索抓TopK高得多。不过它也有明显代价每次问答都会调用多次模型耗时更长、成本更高。所以全局搜索适合低频、高价值的问题不适合那种每秒钟都在刷的实时问答。4.2 局部搜索的图遍历上下文组装--method local是完全不同的打法。它先解析问题里的实体接着在图上以这些实体为起点沿边做有界遍历把相邻的实体、关系、claims、原始文本块全部收回来按相关性和权重排序组合成上下文窗口再交给模型生成答案。这种方式很适合某个具体实体的细节追问比如系统X依赖哪些上游组件依赖关系是什么。因为局部搜索能沿着关系链路把上下游节点带出来这是传统向量检索做不到的。4.3 同库对比实测我在一个内部知识库上做过对比大约30份文档。用global问我们目前所有项目中哪些项目的进度完全不受外部依赖影响它能点出几个被多项目依赖的核心组件还能解释为什么这些组件出问题会波及面大回答像一份分析报告。换用local问同一个问题效果就差很多因为局部上下文根本覆盖不到那么多项目的关系网。反过来问数据库迁移方案里回滚策略分几步local答得又准又具体用global答文字会偏泛缺少细节支撑。所以我的实际建议是把两个method拆成两种产品能力。对外提供高频精准问答优先用local对内做规划、分析、总结类问题用global。日常使用可以通过意图识别来自动路由单点事实型问题走local全景概括型问题走global。5. 小白最容易踩的坑成本、质量、参数5.1 成本到底有没有那么吓人GraphRAG的索引成本确实高于传统RAG原因很直白传统RAG的索引只做一次向量化GraphRAG的索引要对每个chunk做实体与关系抽取每出现一个社区还要再调模型生成社区报告。抽取成本和文档体量、实体密度成正比。我用一个简单估算来说明。假设知识库有100份文档切成2000个chunk每个chunk至少调一次抽取模型就要2000次调用再加上社区报告环节总调用量大概是chunk数的1.2到1.5倍。就算单次调用很便宜乘上这个基数也不小。所以第一条铁律不要拿一整个团队的资料库直接跑第一次一定用5到10个文档的小样本来验证。5.2 把成本打下来的几个可复制策略下面几条是我实际验证过有效的方法。第一控制chunk大小。chunk越大总chunk数越少抽取调用次数越少。但也不能盲目调大超过模型上下文后抽取质量会明显下降实体容易漏。绝大多数场景下600到800个token是合理区间。第二接入本地模型做抽取。如果你的机器能跑得起本地模型可以让本地模型承担实体抽取这类机械任务API模型只负责最终回答能省一大笔钱。第三充分信任缓存。GraphRAG对每个chunk的抽取结果有缓存同一份文档再跑索引不会重复计费。修改了文档内容它也只会重算受影响的部分。第四分批跑索引。按照子目录分批次构建每批跑通后再合并比一次性压上去更容易定位问题。第五定期清点input目录。有些目录会混入重复文档、临时文件、二进制文件它们会无意义地增加抽取次数这个坑经常被忽视。5.3 评估图谱和回答质量的轻量方法流程跑完怎么判断好坏我建议做一个轻量评估集20到30个问题覆盖三种类型单点事实、跨文档串联、全局宏观。对每个问题分别跑global和local记录回答和证据来源。光看回答流畅不算完还要看证据覆盖度。GraphRAG在回答时通常会给出引用来源你要抽看这些来源是否真的支撑了回答内容。做得更细一点可以针对社区报告抽查层级高的社区摘要是否全面层级低的社区摘要是否准确。参数方面不要一上来狂调。先跑通默认配置观察输出和成本再根据痛点改一个参数。比如实体去重的相似度阈值调高一点会保持更多独立实体调低会把相似实体合并得更彻底。这类参数直接改变图谱结构改起来要谨慎最好一次只动一个。5.4 一个容易被忽略的工程习惯最后补充一个工程上的好习惯给索引产物做版本管理。GraphRAG跑完一轮索引后输出的目录名通常带时间戳不要把旧产物直接删掉。图谱构建很贵保留不同时间点的图谱不但能回滚还能用来对比不同配置下的质量变化。我遇到过好几次这种情况新配置跑出来的图谱反而比旧版差多亏留了旧产物一分钟就切回去了。还有一点针对中文文档建议在构建索引之前先统一文本编码处理一下乱码和异常换行。很多抽取质量问题根源不在模型而在喂进去的文本就没洗干净。写到这里我想说自己最真实的感受GraphRAG不是一个开箱即用的银弹它的学习曲线集中在索引阶段成本也不是零。但一旦把图谱构建起来它对知识库问答的改善特别是在全局性问题上是传统RAG很难追上的。如果你手头正好有非结构化的知识库又总被全局性问题困扰我建议你用我前面说的方法先用5份文档跑通一遍感受一下社区摘要和全局搜索的效果再决定要不要全量铺开。大概率你会主动把原来的RAG方案升级成向量检索保底、GraphRAG兜底的组合。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑