跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

基于 GraphRAG 构建知识图谱增强 LLM 检索:以《红楼梦》为例

介绍微软开源的 GraphRAG 项目,通过提取实体和关系构建知识图谱来增强大模型检索能力。内容涵盖环境搭建、配置修改、索引构建流程以及图谱查看方法。文章结合《红楼梦》案例演示了局部检索与全局检索的具体用法,并分享了处理 Token 限制和 Embedding 模型兼容性的实战经验,旨在帮助开发者利用结构化数据提升 LLM 问答质量。

技术博主发布于 2025/2/7更新于 2026/10/483 浏览
基于 GraphRAG 构建知识图谱增强 LLM 检索:以《红楼梦》为例

基于 GraphRAG 构建知识图谱增强 LLM 检索:以《红楼梦》为例

最近尝试把《红楼梦》接入大模型(LLM),用于打造知识检索增强的智能体,效果一直不太理想。传统 RAG 主要依赖向量相似度搜索,在处理复杂关系推理时往往力不从心。

今天发现一个 GitHub 高赞项目 - GraphRAG,微软开源。它首先通过 LLM 进行实体提取、关系提取,将知识库构建成知识图谱,然后再基于知识图谱,利用 LLM 回答用户问题。这种结构化数据的方式显著提升了推理能力。

GraphRAG 是一种结构化、分层的检索增强生成 (RAG) 方法,与使用纯文本片段的朴素语义搜索方法不同。GraphRAG 的处理流程包括从原始文本中提取知识图、构建社区层次结构、为这些社区生成摘要,然后在执行基于 RAG 的任务时利用这些结构。

大白话解释一下:GraphRAG 是一个数据转换套件,旨在利用 LLM 从非结构化文本中提取有价值的结构化数据,进而构建成知识图谱。

1. GraphRAG 是什么

项目地址:https://github.com/microsoft/graphrag

官方文档:https://microsoft.github.io/graphrag/

图谱有两个最重要的概念:节点和边。 比如在知乎:你和猴哥都是一个节点,你关注猴哥就构成一条边,你给猴哥点赞也构成一条边。你我和构成的边,都是图谱的一部分。

发布至今,已有 15.9K Star,并且项目还在持续迭代中。

2. 安装使用

环境准备

首先,在 Python 虚拟环境中一键安装:

pip install graphrag

然后,创建一个项目文件夹 graphrag,并在其中新建 input 文件夹,用于存放知识库数据:

mkdir graphrag
mkdir graphrag/input

把你的知识库文件(如 红楼梦.txt)装入 graphrag/input 后,一键初始化项目:

python -m graphrag.index --init --root graphrag/

这一步,如果遇到如下报错:

from past.utils import old_div
ModuleNotFoundError: No module named 'past'

提示缺少 past 模块,future 库提供了向后兼容的接口。安装 future,即可确保程序正常:

pip install future

项目目录结构

初始化成功后,项目目录结构如下:

graphrag/
├── .env
├── input
│   └── 红楼梦.txt
├── prompts
│   ├── claim_extraction.txt
│   ├── community_report.txt
│   ├── entity_extraction.txt
│   └── summarize_descriptions.txt
└── settings.yaml

这里主要有两个配置文件需要修改:

  • .env 中填入要采用的大模型的 api_key。
  • settings.yaml 中主要修改 llm 和 embedding 相关信息,比如大模型名称和 api 地址。

注意:这里的 LLM API 需要兼容 OpenAI 格式。如果需要在 Gephi 等软件中查看图谱的 graphml 文件,可以在配置中设置 graphml: true。

prompts 文件夹是整个项目中用到的提示词,非常重要,决定了最终图谱的质量。可以先保持官方的默认值,试试看,不行再来调整!

构建索引

配置完成后,一键开启构建索引:

python -m graphrag.index --root graphrag/

日志显示,开始切割文本,随后进入实体提取阶段。

注:《红楼梦》共计 73w 字,所以处理时间比较长,大家也可以先用一个简单的例子快速跑通流程。

3. 踩坑预警

实际跑的时候,还是踩了一些坑,有必要跟大家分享一下。

踩坑 1:任务中断续传

如果中途因为上游 LLM 速率限制,报错了,可以在环境变量中设置 timestamp,接着之前的任务继续跑,避免重复计算。

踩坑 2:Embedding 模型限速与兼容性

免费版 embedding 限速严重。尝试了多个 embedding 模型,哪怕并发改到 1,依然无法完成任务。

为此尝试了以下两种 embedding 方案:

  • 本地 Ollama 模型:运行了 snowflake-arctic-embed 模型,但 Ollama 的嵌入模型居然不兼容 OpenAI 格式,果断放弃。
  • 智谱 AI 的 embedding-2:因为接入了 OneAPI,可以通过 OpenAI 格式调用,我把 batch_size 调整为 1,才终于搞定 embedding。

4. 图谱展示

耗时数小时,终于把一本《红楼梦》的知识图谱构建完毕,总计完成以下几个任务:

⠧ GraphRAG Indexer 
├── Loading Input (text) - 1 files loaded (0 filtered) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00 0:00:00
├── create_final_entities
├── create_final_nodes
├── create_final_communities
├── join_text_units_to_entity_ids
├── create_final_relationships
├── join_text_units_to_relationship_ids
├── create_final_community_reports
├── create_final_text_units
├── create_base_documents
└── create_final_documents
🚀 All workflows completed successfully.

查看生成的节点和边

生成结果保存在 artifacts/ 文件夹下,均为 .parquet 文件。

为了在 VSCode 中查看 .parquet,需要先安装一个插件 parquet-viewer,安装成功后,会自动将 .parquet 展示为 JSON,非常方便!

给大家展示一下生成的节点,最终描述都是英文,类型也有不少错误,看来提示词还是得重新搞成中文!

生成的边显示了实体之间的关联关系。这效果,比简单的段落切分,强太多了!

5. 考考它吧

专为《红楼梦》打造的知识图谱,终于搞定了!我们来考考它,GraphRAG 提供了两种检索方式。

  • 局部检索(Local Search):基于实体进行推理,结合来自图的结构化数据和来自文档的非结构化数据,在查询时,用相关实体信息增强 LLM 上下文。适合回答需要了解特定实体的问题(例:'洋甘菊的治疗特性是什么?')。
  • 全局检索(Global Search):基于数据集进行推理,将私有数据集组织成有意义的语义集群。LLM 在响应用户查询时使用这些集群来总结这些主题。适合宏观理解整个数据集的内容。

此外,基于这个图谱,还可以让 LLM 帮你生成关于该数据集的各种问题,辅助探索性分析。

5.1 几个例子

全局检索 - 红楼梦的主题是什么?
python -m graphrag.query --root graphrag --method global "红楼梦的主题是什么?"

回答展示:

SUCCESS: Global Search Response: 
《红楼梦》的主题涵盖了多个方面,主要包括:

1. **家族衰败**:小说以贾、王、史、薛四大家族的兴衰为背景,展现了封建社会的腐朽和衰落。
2. **人性探讨**:小说深入探讨了人性的复杂性和矛盾,如贾宝玉的叛逆、林黛玉的多愁善感等。
3. **社会批判**:小说对封建礼教、官场腐败、社会不公等进行了深刻的批判。
4. **爱情与婚姻**:小说中的爱情与婚姻关系错综复杂,反映了当时社会的婚姻制度和家庭观念。
5. **哲学思考**:小说还探讨了人生、命运、爱情、婚姻、家族关系等主题。

综上所述,《红楼梦》是一部深刻反映封建社会末期社会矛盾和人物命运的史诗性作品。
局部查询 - 刘姥姥进大观园时带了谁?
python -m graphrag.query --root graphrag --method local "刘姥姥进大观园时带了谁"

回答展示:

SUCCESS: Local Search Response: 
刘姥姥进入大观园时,并没有携带其他人。根据提供的数据,我们可以看到与刘姥姥相关的记录中,并没有提及她带了其他人一同进入大观园。
全局查询 - 刘姥姥进大观园时带了谁?
python -m graphrag.query --root graphrag --method global "刘姥姥进大观园时带了谁"

回答展示:

SUCCESS: Global Search Response: 
刘姥姥进大观园时,带了她的孙子板儿。这一信息在多份分析师报告中得到了确认,包括报告编号 104、656 和 546。根据这些报告,可以确定板儿是刘姥姥的孙子,且在刘姥姥进入大观园时,孙子板儿与她一同前往。

6. 性能优化与最佳实践

Token 消耗管理

GraphRAG 的 Token 消费量非常大,尤其是在实体提取和社区报告生成阶段。已实现 Token 自由的小伙伴可无视,但对于普通开发者,建议先在小规模数据上测试成本。

提示词调优

prompts 文件夹中的提示词决定了最终图谱的质量。如果发现生成的节点描述不准确或语言不符合预期(如本例中生成的英文描述),可以尝试修改 entity_extraction.txt 等文件,强制要求输出中文或特定的格式。

可视化分析

生成的 .graphml 文件可以使用 Gephi 等工具进行深度可视化分析,帮助发现数据中的隐藏模式。这对于理解大规模知识库的结构非常有帮助。

7. 总结

不得不说 GraphRAG 是个宝藏项目。本文通过一个简单的案例,带你快速上手 GraphRAG。相比传统 RAG,GraphRAG 通过引入知识图谱结构,显著增强了模型对复杂关系和全局信息的理解能力。

希望给饱受传统 RAG 困扰的小伙伴一点启发,在实际业务场景中,可以根据需求灵活选择局部检索或全局检索策略,以达到最佳的问答效果。

目录

  1. 基于 GraphRAG 构建知识图谱增强 LLM 检索:以《红楼梦》为例
  2. 1. GraphRAG 是什么
  3. 2. 安装使用
  4. 环境准备
  5. 项目目录结构
  6. 构建索引
  7. 3. 踩坑预警
  8. 4. 图谱展示
  9. 查看生成的节点和边
  10. 5. 考考它吧
  11. 5.1 几个例子
  12. 全局检索 - 红楼梦的主题是什么?
  13. 局部查询 - 刘姥姥进大观园时带了谁?
  14. 全局查询 - 刘姥姥进大观园时带了谁?
  15. 6. 性能优化与最佳实践
  16. Token 消耗管理
  17. 提示词调优
  18. 可视化分析
  19. 7. 总结

更多推荐文章

查看全部
  • Open WebUI Docker 容器化部署最佳实践
  • 洛谷 P10262 亲朋数:C++ 动态规划解法详解
  • Ubuntu 22.04 配置静态 IP、网关与 DNS
  • WebGPU 性能调优技术解析与实践
  • sscom软件
  • Python 从零基础入门到精通学习指南
  • Windows 上安装 Docker Desktop 与配置 WSL2
  • 积木报表快速入门与数据可视化实战
  • llama.cpp 多环境部署指南:从 CPU 到 CUDA/Metal 的高效推理实践
  • llama.cpp 大模型本地部署与推理指南
  • 基于 DeepSeek V3.2 与 Go 语言构建智能日志分析系统
  • Stable Diffusion 3.5 硬件准备与环境配置:低显存优化实战
  • Python AI 语音交互实战:从零构建高可用语音助手
  • 基于 GOT-OCR2.0 与 Qwen2.5-Math 构建 AI 数学辅导系统
  • Spring AI Agent Skills 接入实战与原理剖析
  • 渗透测试全流程思路与方法总结
  • SQL Server 2025 数据库安装与配置指南
  • OpenWRT 配置 SFTP 远程文件传输与安全访问
  • Devv AI:面向程序员的新一代搜索引擎与 GitHub 模式解析
  • 前端 AI 工具实践指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online