☰
GraphRAG 怎么用?构建知识图谱问答系统的完整实战指南
2026/10/16 16:47:54 网站建设 项目流程

GraphRAG 怎么用?构建知识图谱问答系统的完整实战指南

【免费下载链接】graphragA modular graph-based Retrieval-Augmented Generation (RAG) system项目地址: https://gitcode.com/GitHub_Trending/gr/graphrag

GraphRAG 是一个模块化的图结构检索增强生成(Graph-based RAG)系统:它先用大语言模型从非结构化文本中抽取实体、关系和断言,再检测社区、生成多层级社区报告,最终产出一套可供 Local / Global / DRIFT 等多种查询方式调用的知识图谱索引。和普通 RAG 只检索文本块不同,它擅长回答"整份语料里到底讲了什么"这类全局性问题。

它解决的到底是什么问题

传统 RAG 把文档切成小块、向量化、按相似度召回。这类方案回答"某个人物是谁""某个术语的定义"很在行,但面对"这份报告的主要主题有哪些""整个项目里反复出现的风险点是什么"就会捉襟见肘——答案分散在几十上百个文本块里,没有哪个块单独能回答它。

GraphRAG 的思路是把"答案"提前算出来:索引阶段就借助 LLM 把文本组织成实体-关系网络,并用社区检测把强关联的实体聚成不同层级的"社区",为每个社区预先写好摘要报告。查询时,全局类问题直接在社区报告上做归并,而不必临时拼凑零散文本块。

对使用者的直接收益是三类能力的叠加:结构化知识表示(实体、关系、断言都有独立的数据表)、多尺度检索(社区报告从粗到细分层)、以及对全局性问题的稳定回答。

索引管道在做什么

一条标准的 GraphRAG 索引流水线按大致顺序完成四件事:

  1. 文本切分成文本单元(text units)
  2. 对每个文本单元做实体与关系抽取,聚合成一张知识图谱
  3. 在图上做 Leiden 社区检测,生成多层级社区,并为每个社区产出报告
  4. 对关键文本做向量嵌入,写入配置的向量库

所有中间产物以 Parquet 表的形式落到output目录(如entities、relationships、communities、community_reports、text_units),向量嵌入则写入你配置的向量存储。流程完全由配置驱动,各阶段的 prompt 均可替换,实现细节可参考 packages/graphrag/graphrag/index/。

最快上手路径:从 init 到 query 四个命令

上手比想象中简单,核心就四个命令。以官方快速上手流程为例(要求 Python 3.10–3.12):

# 1. 初始化工作区,按提示选择 chat 与 embedding 模型 graphrag init # 2. 把待处理文本(txt/csv/json 等)放入 input/ 目录, # 并把 .env 里的 GRAPHRAG_API_KEY 换成你的 API Key # 3. 运行索引 graphrag index # 4. 对结果提问 graphrag query "这份资料的核心主题是什么?"

graphrag init会生成三个东西:.env(存放 API Key 等环境变量)、settings.yaml(流水线全部参数)和input/目录。日常调优基本都发生在settings.yaml里,完整字段说明见 docs/config/yaml.md。

一个重要的心理预期:索引是 LLM 密集型操作,费用和时间都不低。官方文档在 docs/get_started.md 里明确建议先用示例数据集和小模型跑通,理解流程后再上真实语料。

索引跑完后output/下会出现一系列 Parquet 文件,此时索引即构建完毕,可以反复查询而无需重新索引。

四种查询方式怎么选

查询引擎(docs/query/overview.md)提供四种方法,选哪种取决于问题的"作用域":

方式原理适用问题
Global Search在所有社区报告上做 map-reduce全局性、综述类问题,成本高
Local Search以实体为起点,结合图谱与原始文本块围绕特定实体的具体事实
DRIFT SearchLocal 的增强版,借助社区信息扩展起点介于两者之间,覆盖面更广
Basic Search朴素的向量召回用于横向对比效果

命令行上切换很直接:

graphrag query "某某角色与他人的主要关系是什么?" --method local

经验法则:问题里出现了具体实体就用 local/drift,问的是"整体情况"就用 global。

用 Gephi 检查图谱质量

索引跑完之后,不建议直接相信报告,值得花十分钟看一眼图本身。在settings.yaml里开启 graphml 快照(snapshots: graphml: true),跑完索引后output/里会有graph.graphml,可直接导入 Gephi 查看节点与边的分布,社区划分是否合理、有没有明显噪点,基本一眼能看出来。

完整的 Gephi 配置步骤(包括 Leiden 插件、布局参数)写在 docs/visualization_guide.md。

用统一搜索应用对比不同查询结果

如果想在同一个界面上并排比较各查询方式的表现,仓库自带了一个 Streamlit 演示应用,位于 unified-search-app/。它没有发布到 PyPI,需要获取源码后在该目录下运行:

git clone https://gitcode.com/GitHub_Trending/gr/graphrag cd graphrag/unified-search-app uv sync uv run poe start

数据集通过一个listing.json清单文件注册(每个条目指定索引路径、社区层级等),数据源支持本地目录或 Azure Blob。打开页面后,左侧面板选择数据集和要启用的查询方式,右侧可以"让系统根据语料自动建议问题",也可以自己提问,各方法的回答与引用来源会并排展示,另有一个社区浏览器标签页可以逐份翻阅社区报告。

动手前值得了解的几件事

提示词调优往往比换模型更划算。默认 prompt 是通用设计,官方强烈建议对自己的语料跑一次 Auto Tuning,它会采样你的数据、借助 LLM 生成领域适配的 prompt,对索引质量提升明显。说明见 docs/prompt_tuning/。

语料新增可以增量处理。不必每次全量重建:索引工作流里有一套 update 逻辑(见 packages/graphrag/graphrag/index/update/),只对新文档做抽取并与已有图谱、社区合并。

注意项目状态。仓库 README 声明 GraphRAG 目前处于维护模式:只做 bug 修复和安全更新,不再接受新功能。选型时应把它当作一套稳定的方法论与参考实现,而非持续演进的框架。

版本升级要留意配置迁移。小版本之间用graphrag init --root <path> --force刷新配置;大版本之间有专门的迁移 notebook(docs_notebooks示例中可见index_migration_to_v1/v2/v3),可避免对已有数据集重新索引。

常见问题

问:索引成本大概什么量级?没有统一数字,取决于语料规模、切分粒度和所用模型。官方建议先用内置的 Operation Dulce 小样本数据集(docs/data/operation_dulce/)跑通全流程,体感之后再决定真实语料的预算。

问:支持哪些模型?Chat 和 Embedding 模型都在settings.yaml的models:下配置,支持 OpenAI 与 Azure OpenAI 等提供商;Azure 侧还支持 managed identity 免 Key 认证。

问:输出在哪里,怎么复用?全部落在output/目录:Parquet 表 + 向量库中的嵌入。Parquet 文件可被 pandas、Gephi(graphml)、下游应用直接消费,查询引擎也构建在这些产物之上。

问:小数据集有必要上 GraphRAG 吗?如果问题几乎都能落到具体实体上,纯向量 RAG 可能就够了。GraphRAG 的价值集中在全局性问题多、语料体量较大的场景;小语料 + 局部性问题,索引成本可能不划算。


GraphRAG 的定位更像一套"把语料编译成可查询知识资产"的完整工具链:索引、社区报告、多查询策略、可视化调试、Web 对比应用一应俱全。把它当作一条可观测、可增量、可替换 prompt 的流水线来用,比把它当黑盒更值得。

【免费下载链接】graphragA modular graph-based Retrieval-Augmented Generation (RAG) system项目地址: https://gitcode.com/GitHub_Trending/gr/graphrag

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询