基于知识图谱构建的检索增强生成 GraphRAG 部署指南
GraphRAG 结合知识图谱解决传统 RAG 无法回答全局问题。流程包括实体抽取、聚类生成社区摘要。部署需配置 API 与参数,执行索引后支持全局或局部问答。注意 Token 消耗较高,适合对上下文关系要求高的场景。

GraphRAG 结合知识图谱解决传统 RAG 无法回答全局问题。流程包括实体抽取、聚类生成社区摘要。部署需配置 API 与参数,执行索引后支持全局或局部问答。注意 Token 消耗较高,适合对上下文关系要求高的场景。

在传统的 LLM 应用开发中,检索增强生成(RAG)是提升模型回答准确性的利器。然而,标准 RAG 通常基于切片片段进行召回,这导致其只能回答局部文档问题,难以处理涉及知识库全局信息的复杂查询。
微软近期开源了 GraphRAG(Graph-based Retrieval Augmented Generation),它在通用 RAG 的基础上结合了知识图谱技术。GraphRAG 的核心流程如下:
这种机制显著提升了检索生成的效果,使其能够理解数据之间的深层关联。
GraphRAG 的环境依赖相对简单,主要需要 Python 环境和相应的包。
conda create -n graphrag python=3.10
conda activate graphrag
git clone https://github.com/microsoft/graphrag.git
cd graphrag
pip install graphrag
知识图谱适合处理结构化或半结构化的文本数据。例如,可以使用小说人物关系、企业组织架构等作为示例数据。将整理好的文本文件(如 TXT 格式)放入指定目录。
mkdir -p ./hlmtest/input
echo "红楼梦四大家族简介..." > ./hlmtest/input/data.txt
在 GraphRAG 根目录下执行初始化命令,生成默认的环境变量文件和设置文件。
python -m graphrag.index --init --root ./hlmtest
执行后会在 ./hlmtest 目录下生成 .env 和 settings.yaml 文件。
编辑 .env 文件,填入你的 OpenAI 或其他兼容模型的 API Key。
GRAPHRAG_API_KEY=your_openai_key
编辑 settings.yaml 文件,主要配置模型、切片规则及 Prompt 等参数。
LLM 模块配置:
llm:
api_key: ${GRAPHRAG_API_KEY}
type: azure_openai_chat # 或 openai_chat
model: model_name
model_supports_json: true # 推荐开启
# max_tokens: 4000
# request_timeout: 180.0
api_base: your_api_base
api_version: your_api_version
deployment_name: your_deployment_name
文档格式与切片规则:
chunks:
size: 300
overlap: 100
group_by_columns: [id] # 默认不允许跨文档切片
input:
type: file # 或 blob
file_type: text # 或 csv
base_dir: "input"
file_encoding: utf-8
file_pattern: ".*\\.txt$"
实体抽取与 Prompt 优化:
系统会自动生成几个关键 Prompt,包括实体抽取、描述摘要、声明提取和社区报告。建议根据实际数据调整 Prompt 以提高效果。
entity_extraction:
entity_types: [organization, person, geo, event]
max_gleanings: 0
summarize_descriptions:
max_length: 500
community_reports:
prompt: prompts/community_report.txt
max_length: 2000
max_input_length: 8000
注意:如果数据集是中文,务必将相关 Prompt 修改为中文,否则生成的效果会较差。
配置完成后,即可执行索引流程。请注意,整个流程涉及大量 LLM 调用,Token 消耗较高。例如,使用 GPT-4o 处理 18.5 万字符的文档可能消耗数美元费用。
python -m graphrag.index --root ./hlmtest
执行成功后,日志会显示工作流进度。生成的输出文件通常位于 ./hlmtest/output 目录下,包含以下关键内容:
create_final_relationships.csv:最终的关系图谱数据。create_final_community_reports.json:社区摘要报告。indexing-engine.log:详细的处理日志。索引完成后,即可使用 GraphRAG 进行问答。支持多种查询方法,如 global(全局)或 local(局部)模式。
查询示例 1:实体关系查询
python -m graphrag.query --root ./hlmtest --method global "贾元春和贾宝玉的关系?"
查询示例 2:列表归纳查询
python -m graphrag.query --root ./hlmtest --method global "红楼梦中金陵十二钗有哪些人物?"
GraphRAG 通过引入知识图谱,有效解决了传统 RAG 在处理全局性、关联性问题上能力不足的问题。虽然部署成本和计算资源要求较高,但在需要深度理解文档间关系的场景下,它是目前非常优秀的解决方案。后续可进一步分析源码,深入定制每个步骤的实现逻辑以适应更复杂的业务需求。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online