微软新一代 RAG:GraphRAG 实战指南
本月初,微软发布了基于知识图谱的检索增强生成(RAG)开源方案 GraphRAG。该项目上线后迅速获得广泛关注,旨在解决传统基于向量检索的 RAG 在大规模文档环境下的理解与总结问题。
本文介绍微软开源的 GraphRAG 方案,通过构建知识图谱增强大模型检索能力。内容涵盖环境搭建、配置文件修改、索引构建及查询方法(局部与全局),并针对国内大模型适配提供具体配置示例与注意事项。重点解析了 LLM 与 Embedding 模型配置、Token 消耗管理及常见错误排查,适合希望落地 GraphRAG 技术的开发者参考。

本月初,微软发布了基于知识图谱的检索增强生成(RAG)开源方案 GraphRAG。该项目上线后迅速获得广泛关注,旨在解决传统基于向量检索的 RAG 在大规模文档环境下的理解与总结问题。
GraphRAG 通过构建知识图谱来增强大语言模型(LLM)的应答速度与品质。其核心实现步骤如下:
相比传统向量检索,GraphRAG 能更好地处理跨文档的复杂推理和全局性问答。
本项目基于 Python 构建,推荐使用 Python 3.11 版本以确保兼容性。
为了方便修改调试,建议直接从 GitHub 拉取原始代码:
git clone https://github.com/microsoft/graphrag.git
cd graphrag
项目使用 Poetry 进行依赖管理。请确保已安装 Poetry:
pip install poetry
poetry install
执行以下命令初始化项目结构:
poetry run poe index --init --root .
初始化完成后,根目录将生成以下关键目录:
input:存放需要索引的文件(默认支持 txt,可在 settings.yaml 修改)。output:存储生成的图数据、总结及日志信息。prompts:存储默认的提示词文件(如 entity_extraction.txt 等)。cache:用于缓存提取结果,减少 LLM 调用开销。.env:包含环境变量,主要设置 GRAPHRAG_API_KEY。settings.yaml:核心配置文件。GraphRAG 基于 OpenAI SDK 协议构建。国内用户可使用兼容该协议的模型(如通义千问、月之暗面等)替代 OpenAI。
在 settings.yaml 中配置 LLM 参数。以通义千问为例,需注意以下限制:
top_p:必须设置在 0-1 之间(如 0.99)。max_tokens:建议设置为 2000,超过可能报错。model:建议使用 qwen-turbo,避免使用 qwen-long 以防输入过长导致错误。llm:
api_key: YOUR_API_KEY
type: openai_chat
model: gpt-4-turbo-preview # 或对应兼容模型名称
model_supports_json: true
max_tokens: 2000
api_base: https://dashscope.aliyuncs.com/compatible-mode/v1
tokens_per_minute: 30000
requests_per_minute: 30
max_retries: 3
top_p: 0.5
需部署本地 Embedding 服务或使用兼容 API。示例中使用 Qwen 7B 模型部署的本地服务:
embeddings:
llm:
api_key: ${GRAPHRAG_API_KEY}
type: openai_embedding
model: text-embedding-ada-002
api_base: http://localhost:8080
根据硬件资源调整并行线程数,可提升索引速度:
parallelization:
stagger: 0.3
num_threads: 50
完成配置后,启动索引构建过程。此过程较为耗时,取决于文档大小和硬件性能。
poetry run poe index --root .
构建流程说明:
*注意:索引过程中产生的日志位于 output 目录,若出现错误可在此排查。
GraphRAG 提供两种查询模式:
结合知识图谱中的相关数据与原始文档文本块生成答案。适用于特定实体的细节查询。
poetry run poe query --root . --method local "塘沽前线发生了什么"
局限性:依赖实体抽取质量,若 LLM 抽取能力不足,可能导致检索效果不佳。
通过 Map-Reduce 方式搜索所有 AI 生成的社区报告。适用于了解整个数据集的全局性问题。
poetry run poe query --root . --method global "xxx"
要求:资源密集型操作,需要 LLM 支持较大的 Context Window(建议 32K+),对 Token 消耗较大。
构建知识图谱会消耗大量 Token。例如,索引 2.9 万字的文档可能消耗约 13 万 Token。建议在生产环境中监控 Token 使用情况。
框架目前仅支持 OpenAI SDK 协议。若需接入其他模型,可通过封装网关实现协议兼容。
num_threads 以提升并行处理能力。tokens_per_minute 防止触发限流。cache 目录减少重复计算。qwen-long 报错,请切换至 qwen-turbo。api_base 地址是否可达。settings.yaml 缩进格式正确。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