实战使用 GraphRAG 索引整本《西游记》,解锁黑悟空通关路
来源:互联网
更新时间:2026-08-27 14:18
### 最近《黑神话:悟空》火得一塌糊涂,但坦白讲,好多妖精妖怪我居然记不清了?亢金星君是谁?白衣秀士又是哪路神仙?广智、金池长老……算了,岁月不饶人,记忆也跟着模糊了。这篇文章打算换个玩法——用GraphRAG把整本《西游记》给索引一遍,边重温边测试。内容包括手动定制实体类型、索引全本、可视化呈现,以及问答测试。最后,还会顺带验证一个有意思的问题:孙行者、行者孙、者行孙和孙悟空,GraphRAG能不能分清这四位是不是同一个人?
先上张图开开胃——这是提取出来的实体可视化图谱,大约10万个节点,密得像个小宇宙。
(图:http://img.318050.com/uploads/20260530/17801015176a1a318d22e98248218147.webp)
---
## 准备工作:下载文本、配置模型
先把《西游记》全文TXT搞到手。从GitHub可以找到资源 [1],全书100回,约62万字。GraphRAG索引过程中,对Token消耗挺大的——据说一次跑下来要烧掉10倍于原文的Tokens。好在最近智谱的BigModel开放平台免费开放了GLM-4-FLASH [2],虽然是个小模型,但跑原型验证绰绰有余。快、免费才是王道。注册后直接获取API密钥,就可以开工了。
(图:http://img.318050.com/uploads/20260530/17801015186a1a318e0b65b881456442.webp)
接下来配置settings.yaml,对接GLM-4-FLASH:
```yaml
llm:
api_key: ${GRAPHRAG_API_KEY}
type: openai_chat
model: glm-4-flash
model_supports_json: true
api_base: https://open.bigmodel.cn/api/paas/v4/
max_tokens: 4096
concurrent_requests: 5
tokens_per_minute: 1500000
requests_per_minute: 300
top_p: 0.99
temperature: 0
max_retries: 3
max_retry_wait: 10
sleep_on_rate_limit_recommendation: true
```
---
## 手调实体
先把西游记文本处理成结构化格式。写一段脚本,把TXT文件按章节切成CSV。这一步我直接请教了BigModel平台的对话模型——代码类的任务,大模型最拿手。登录控制台,进体验中心开聊。
(图:http://img.318050.com/uploads/20260530/17801015256a1a319567b38605223681.webp)
让它生成提取章节名和内容的脚本,代码如下。
(图:http://img.318050.com/uploads/20260530/17801015266a1a31962e764179584117.webp)
切分后自行调整列标题,如图。
(图:http://img.318050.com/uploads/20260530/17801015276a1a319718608544015249.webp)
全书62万字、100回,每章约6200字。但GraphRAG默认chunk大小是1200字,这样每章会被切成多个chunk,大部分chunk会丢失章节名信息——后果是,问“某某章节剧情”或“剧情在哪章节”时可能答错。所以需要在切分时给这些chunk补充上下文,例如章节名。接下来用GraphRAG自动微调,设置领域和语言。
```bash
python -m graphrag.prompt_tune --root . --domain "小说西游记" --language Chinese --chunk-size 1200 --output prompt-xiyou --config settings.yaml
```
继续请教BigModel平台:提取《西游记》哪些实体比较合适?
(图:http://img.318050.com/uploads/20260530/17801015276a1a3197dfde8820289664.webp)
它建议:人物、地点、法宝、事件、组织;我补充了“妖怪”和“章节”两个实体。
确定实体类型后,进到prompt-xiyou目录,修改entity_extraction.txt,把实体类型改成我们想要的。然后把这份Prompt拷贝进BigModel对话框,让它生成示例。重要提示:这一步最好选择GLM-4-PLUS模型——它是更强的老师;后面实际提取时用GLM-4-FLASH(学生模型),老师教得好,学生自然学得快。
拷贝内容如下(部分过长已省略):
```text
-Goal-
Given a text document... identify all entities... and all relationships...
-Steps-
1. Identify all entities. For each:
- entity_name: ...
- entity_type: one of [人物 地点 事件 法宝 妖怪 组织 章节]
...
-Examples-
######################
Example 1:
entity_types: [人物 地点 事件 法宝 妖怪 组织 章节]
text:
目录:第八回 我佛造经传极乐 观音奉旨上长安
试问禅关,参求无数,往往到头虚老。...
------------------------
output:
...
```
它生成的实体和关系提取示例格式很准确,直接替换entity_extraction.txt里的output部分即可。同样的方法,再生成Example 2。之前测试ChatGPT等线上模型时,发现它们第一次输出的格式大多有问题——会直接把{tuple_delimiter}替换为`<|>`之类的符号。所以还得让它调整。
(图:http://img.318050.com/uploads/20260530/17801015286a1a3198dd6dd409305904.webp)
---
## 索引
索引前还要设置Embedding。可以用LM Studio本地启动,也可以用BigModel上的Embedding接口 [3]。后者速度快,推荐。配置完成,运行索引命令:
```bash
poetry run poe index --root .
```
索引过程中遇到一个小众问题:内容安全审查错误。虽然只出现了几次,无伤大雅,选择忽略。
(图:http://img.318050.com/uploads/20260530/17801015306a1a319a03c2a127589126.webp)
几个小时后,索引结束。
(图:http://img.318050.com/uploads/20260530/17801015306a1a319ac7427153826748.webp)
GLM-4-FLASH虽然参数规模不大,但索引过程基本一次通过,没有遇到格式错误导致的整体失败。从提取的实体来看,准确度相当不错。
(图:http://img.318050.com/uploads/20260530/17801015316a1a319be0e57535216683.webp)
---
## 可视化
实体数量实在太多,关系盘根错节,可视化界面直接卡住——但依然能看出主要角色对应的节点都特别大。
(图:http://img.318050.com/uploads/20260530/17801015336a1a319d17896465939661.webp)
(图:http://img.318050.com/uploads/20260530/17801015346a1a319e3bd4b154961147.webp)
---
## 问答
开始问答前,把settings.yaml里的模型改为GLM-4-PLUS。为什么问答环节要大模型?因为GraphRAG的问答Prompt通常很长,有时能达到几万个Token。GLM-4-FLASH容易被长Prompt淹没关键信息。配置更大的模型,有利于剔除不相关上下文,给出正确答案。Cherry-Studio的配置方法,之前那篇《小白也能看懂,手把手教你启动graphrag-server》已经介绍过,不再赘述。
### 全局问题
**问题1:这部小说主要讲述了什么故事?**
(图:http://img.318050.com/uploads/20260530/17801015356a1a319f3064a952218818.webp)
**问题2:在主角孙悟空的身上体现了哪些精神?**
(图:http://img.318050.com/uploads/20260530/17801015366a1a31a0285de933287922.webp)
### 局部问题
**问题3:亢金星君是谁?**
(图:http://img.318050.com/uploads/20260530/17801015376a1a31a11f26e310055716.webp)
**问题4:白衣秀士是谁?**
(图:http://img.318050.com/uploads/20260530/17801015386a1a31a213f9a055236312.webp)
**问题5:灵吉菩萨的具体经历?**
(图:http://img.318050.com/uploads/20260530/17801015396a1a31a37a03a409853285.webp)
**问题6:孙悟空和哪吒一起喝酒了吗?**
我记得以前看西游记动画版,孙悟空和哪吒打完架,还偷偷躲起来喝过酒。
(图:http://img.318050.com/uploads/20260530/17801015406a1a31a436384609746469.webp)
**问题7:第七十二回 盘丝洞七情迷本 濯垢泉八戒忘形**
(图:此处无图)
**问题8:孙行者、者行孙、行者孙、孙悟空,他们是什么关系?**
(图:此处无图)
整体表现令人满意——不管是纵观全文的宏观问题,还是局部章节的细节问题,都回答得有理有据,而且精准。
---
## 总结
这篇文章尝试用GraphRAG配合免费的GLM-4-FLASH,把整本《西游记》索引了一遍,带我们一起梦回西游。从配置、手调实体、索引、可视化到问答测试,完整分享了一条技术路径。同时也验证了智谱BigModel平台免费模型在GraphRAG中的实际表现——效果不错,足以说一句:免费有时也挺香。希望这份指南对你有所启发。