GraphRAG 10 分钟跑通知识图谱 RAG:从一堆文本到可提问的图谱
GraphRAG 是微软开源的模块化图检索增强生成(RAG)系统:用 LLM 从非结构化文本里提取实体与关系,自动建出分层知识图谱和社区报告,再基于图谱回答问题。它替你省掉手写实体标注和建图脚本的功夫。按这篇 GraphRAG 知识图谱入门走完最小流程,10 分钟内你的终端就能对一堆文本提问并拿到带引用的回答。
跑通最小流程 🚀
- 前置依赖:Python 3.10-3.12、一个 LLM 的 API key(写入
.env)、可访问模型服务端的网络
git clone https://gitcode.com/GitHub_Trending/gr/graphrag
cd graphrag
pip install graphrag
克隆仓库;从 PyPI 装 graphrag CLI
graphrag init
graphrag index
init 生成 .env、settings.yaml 和 input 目录;把 GRAPHRAG_API_KEY 填进 .env,往 input/ 丢一个 .txt 文件;index 跑完整抽取、建图、社区检测流水线
跑完你能看到两样东西:output/ 目录下的 documents、entities、relationships、communities、community_reports 等 7 张 parquet 表;终端里直接打印出对语料的回答,附引用编号,可拿 pandas 打开 parquet 表做后续分析。
终端中逐工作流滚动的索引进度条
它是怎么工作的
整条流水线分三步。第一步,长文按 token 数切成文本块(text unit),LLM 逐块阅读,抽出「实体-关系-实体」三元组和实体描述;同名实体跨块合并后,所有三元组聚成一张知识图谱。这一步替代了传统做法里人工标注实体的环节。
第二步,用 Leiden 社区检测算法(一种图聚类算法)把图谱自顶向下聚成分层社区,得到一棵社区树。第三步,LLM 为每个社区读它内部的实体和关系,写一段摘要报告。
这样设计的原因:「整个语料讲什么」这类全局问题,直接 map-reduce 扫社区报告就能回答,不必把原文全塞进上下文;「某个实体是什么」这类局部问题,定位到图谱里的子图再拼原文片段即可。DRIFT 检索则先用社区报告收窄方向,再下钻到局部事实,上下文覆盖比纯 Local 更广。向量嵌入和声明(claim)抽取是可选步骤,默认流程会一并产出嵌入表。
不同颜色代表不同社区的实体关系网络
一个真实场景演示
场景取自官方 Getting Started:索引《A Christmas Carol》全文,然后对它提问。
准备:把小说 .txt 放进 input/,.env 填好 GRAPHRAG_API_KEY,settings.yaml 保持默认。
操作:
graphrag index
graphrag query "What are the top themes in this story?"
前者跑完整流水线,一般几分钟;后者对同一份索引提问
看到什么:终端先打印一条扫全部社区报告得到的主题级回答(Global search,默认方法),换一条 graphrag query "..." --method local 则结合图谱和原文片段回答人物类问题,答案带引用编号,可回溯到具体文本块。想横向对比 Local、Global、DRIFT、Basic 四种检索,可进 unified-search-app/ 跑 uv sync && uv run poe start,浏览器访问 http://localhost:8501:
左侧勾选搜索方式,右侧并排对比答案
常用配置速查
settings.yaml的models段:选聊天与嵌入模型,底层 LiteLLM 支持 100+ 提供商,见 docs/config/models.mdsettings.yaml的chunking段:size/overlap控制切块 token 粒度,改它直接影响抽取精度与成本,见 docs/config/yaml.mdsettings.yaml的input段:指定 .txt/.csv/.json/.parquet 等文件类型与字段映射settings.yaml的output段:切输出表格式与落地位置,表结构见 docs/index/outputs.mdprompts/目录 +graphrag prompt-tune命令:用自有语料自动调优提示词- 内置 LLM 缓存:相同输入直接返回缓存结果,重复运行不重复计费
你可能会问
我建这个索引要花多少钱?
费用取决于语料量和模型单价。官方建议先用教程数据集加便宜快速的模型试水,再上大批量任务;LLM 缓存会让重复运行同一批输入不再重复计费。
我不用 GPT 模型可以吗?
可以。底层走 LiteLLM,settings.yaml 的 models 段里能配 Azure OpenAI、Anthropic、Ollama 等 100+ 提供商。
新增了文档,我必须全量重建索引吗?
不用。用 graphrag update 命令做增量更新,只处理新增文档。切块大小记得在 chunking 段提前调好,抽取精度和成本都跟着它变。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考






