利用GraphRAG + GLM-4 构建《红楼梦》全文的中文增强检索系统

❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🚀 快速阅读

  1. GraphRAG 是一种结合图神经网络和检索增强生成技术的先进模型,旨在通过图结构信息和外部知识检索提升文本生成的质量和相关性。

  2. graphrag-practice-chinese是一个 GraphRAG 的应用实例,项目特点在于提供了替换 OpenAI 模型的方法,并通过修改原有提示和切分文档的方法,提高了 GraphRAG 处理中文内容的能力。

  3. 通过 graphrag-practice-chinese结合 LLM 对完整的《红楼梦》原文构建索引和查询测试。

开始实践!

graphrag-practice-chinese是一个 GraphRAG 的应用实例,项目特点在于提供了替换 OpenAI 模型的方法,并通过修改原有提示和切分文档的方法,提高了 GraphRAG 处理中文内容的能力。

搭建环境(非常关键!)

git clone https://github.com/zhaoyingjun/graphrag-practice-chinese.git

cd ./graphrag-practice-chinese

# 安装项目运行所需的依赖
pip install -r ./requirements.txt

# 创建 input 目录,用于构建索引的文本文件默认存放于该目录下,可以按需修改 settings.yaml 文件中的 input 部分来指定路径
mkdir ./input

# 这一命令将在 graphrag-practice-chinese 目录中创建两个文件:.env 和 settings.yaml
python -m graphrag.index --init --root ./

修改配置文件

GraphRAG 主要的配置文件有两个:.envsettings.yaml

.env 包含运行 GraphRAG pipeline 所需的环境变量。该文件默认只定义了一个环境变量 GRAPHRAG_API_KEY=<API_KEY>

settings.yaml 包含 pipeline 相关的设置。

在项目根目录你可以找到作为参考的配置文件demo.envsettings.demo.yaml。 你可以参考配置进行修改,也可以通过重命名覆盖初始化的配置文件。

这里推荐使用大语言模型 glm-4-flash(首个免费调用的模型),因为在推理和总结阶段需要消耗大量的 Tokens。 我尝试对完整的《红楼梦》原文构建索引,最终消耗了大约 700W 个 Tokens,个人学习用的话尽力而为吧。

优化策略 — 使模型侧重中文

优化 1: 文本切分

官方分块把文档按照 token 数进行切分,对于中文来说容易在 chunk 之间出现乱码,这里参考 Langchain-ChatChat 开源项目,用中文字符数对文本进行切分。

  1. 方法 1:

使用splitter/tokens.py替换掉 python 依赖库中的 graphrag/index/verbs/text/chunk/strategies/tokens.py 即可。

  1. 方法 2:

使用 splitter/chinese_text_splitter 中的 ChineseTextSplitter 作为文档分割方法,你需要在 settings.yaml 文件中添加一个新的 splitter 部分。以下是修改后的相关部分:

# ... 其他设置保持不变 ...
chunks:
  size: 2500
  overlap: 300
  group_by_columns: [id]

splitter:
  type: custom
  module: splitter.chinese_text_splitter
  class: ChineseTextSplitter
  params:
    pdf: false
    sentence_size: 250
# ... 其他设置保持不变 ...

方法 2 的修改说明:

  1. 保留原有的 chunks 部分,因为它可能仍被用于其他目的。

  2. 添加新的 splitter 部分:

  • type: custom 表示我们使用自定义的分割器。

  • module: splitter.chinese_text_splitter 指定了包含 ChineseTextSplitter 类的 Python 模块路径。请确保这个路径正确反映了 chinese_text_splitter.py 文件在你项目中的位置。

  • class: ChineseTextSplitter 指定了要使用的类名。

  • params: 部分包含了传递给 ChineseTextSplitter 的参数。这里设置了 pdf: falsesentence_size: 250,你可以根据需要调整这些值。

请注意:

  1. 确保 chinese_text_splitter.py 文件位于正确的位置,使得 GraphRAG 能够找到并导入它。 2.修改完成后,保存 settings.yaml 文件,然后重新运行 GraphRAG 的索引构建命令,就会使用 ChineseTextSplitter 来分割你的文档。

优化 2: 使用中文提示词(chinese-prompt)

初始化后,在 prompts 目录中可以看到 GraphRAG 的四个 prompt 文件的内容都由英文书写,并要求 LLM 使用英文输出。

为了更好地处理中文内容,这里我使用 gpt-4o 模型,将prompts/中的四个 prompt 文件都翻译成中文,并要求 LLM 用中文输出结果。

如果你有更好的想法,想要自定义提示词,同样可以通过修改这四个 prompt 文件来实现,但注意不要修改提示词的文件名,以及不要修改和遗漏了在原提示词中有关输出的关键字段和格式,以免 GraphRAG 无法正常获取它们。

优化 3: 模型调用

GraphRAG 默认使用 openai 进行模型调用,该模型为国外模型,对中文支持并不友好。为更好地支持中文,这里选择 bigmodel 进行模型调用,该模型为国内大模型厂商智谱 AI 提供。

优化 4: 模型选择

GraphRAG 默认使用 gpt-4o 模型,该模型为国外模型,对中文支持并不友好。为更好地支持中文,这里选择 glm-4-plus 模型,该模型为国内大模型厂商智谱 AI 提供。

构建索引

  1. 通过运行如下命令, Graphrag 会在指定的文件路径下加载配置文件.envsetting.yaml,并按照你的配置开始构建索引。
python -m graphrag.index --root ./graphrag-practice-chinese

假设你当前的文件路径已经在graphrag-practice-chinese下的话,命令指定的构建路径应该为当前目录,则构建索引的命令应该是:

python -m graphrag.index --root ./

你需要确保指定的文件路径下存在配置文件.envsetting.yaml,且配置了正确的api_key

自定义样本数据

GraphRAG 会默认为 input 路径下的 txt 文件构建索引,如果需要指定文件的路径或类型,可以修改settings.yaml中的input部分。

注意!GraphRAG 仅支持 `txt 或 csv` 类型的文件,编码格式必须为 `utf-8`。

在本项目中,我将红楼梦原文文本作为样本,所以在配置文件setting.yaml中将文件路径base_dir修改为input/hongloumeng,如下:

# ... 其他设置保持不变 ...
input:
  type: file # or blob
  file_type: text # or csv
  base_dir: "input/hongloumeng"
  file_encoding: utf-8
  file_pattern: ".*\\.txt$"
# ... 其他设置保持不变 ...

如果你也想要把红楼梦原文文本作为样本,可以通过我的另一个项目 hongloumeng-txt 获取到符合 GraphRAG 格式要求的文件,获取完成后将文件放在input/hongloumeng目录下即可。

  1. 在构建过程中会自动创建两个目录:

output 目录,用于存放查询结果。 cache 目录,用于存放缓存数据。

  1. 索引构建完成后会提示:All workflows completed successfully ,说明即可构建完成,随时可以进行查询。(如果没有 GPU 加持的话,构建的过程还是比较久的,可以在控制台你看到每一个步骤的进度条。)

查询测试

全局查询

执行命令:

python -m graphrag.query --root ./graphrag-practice-chinese --method global "故事的主旨是什么?"

查询结果示例:

SUCCESS: Global Search Response:
《红楼梦》的主旨在于通过对贾、王、史、薛四大家族的兴衰描写,展现了封建社会的各种矛盾和冲突,揭示了封建社会的腐朽和衰落。故事中的人物关系错综复杂,反映了当时社会的风俗习惯和道德观念。小说通过对宝玉、黛玉、宝钗等主要人物的爱情悲剧,探讨了人性、命运、社会关系等主题,反映了作者对封建礼教和封建制度的批判。

此外,小说还探讨了人生、命运、爱情、婚姻等主题,反映了作者对人生和社会的深刻思考。通过对贾宝玉、林黛玉、薛宝钗等主要人物的塑造,展现了封建社会中人性的复杂性和悲剧性,反映了人性的光辉与阴暗面。故事中的人物命运和家族兴衰反映了当时社会的现实,同时也表达了作者对美好人性的追求和对理想社会的向往。

综上所述,《红楼梦》的主旨不仅揭示了封建社会的腐朽和衰落,还探讨了人性、命运、社会关系等主题,具有深刻的思想内涵和艺术价值。

本地查询

执行命令:

python -m graphrag.query --root ./graphrag-practice-chinese --method local "贾母对宝玉的态度怎么样?"


查询结果示例:

SUCCESS: Local Search Response:
贾母对宝玉的态度可以从多个方面进行总结:

1. 溺爱与关心:贾母对宝玉有着深厚的溺爱。在《红楼梦》中,贾母多次探望宝玉,甚至亲自到园中看望他,表现出对宝玉的关心和爱护。例如,在贾母探视宝玉的情况中,贾母和王夫人一同探望宝玉,并询问他的病情,显示出贾母对宝玉的关心(Data: Entities (4704, 2929, 3895, 5470, 5868))。

2. 宠爱与宽容:贾母对宝玉的宠爱还体现在对宝玉行为的宽容上。宝玉性格顽劣,有时甚至有些荒唐,但贾母却总是以宽容的态度对待他。例如,贾母对宝玉的干妈“老东西”的指责,显示出贾母对宝玉的宠爱(Data: Relationships (528, 2124))。

3. 期望与教育:尽管贾母对宝玉宠爱有加,但她也关心宝玉的教育。在贾母房中,贾母关注宝玉的教育,并关心他的成长(Data: Entities (2702, 5524, 5868))。

4. 情感交流:贾母与宝玉之间有着深厚的情感交流。在贾母与宝玉的互动中,贾母不仅关心宝玉的身体健康,还关心他的心理状态,体现出两人之间深厚的感情(Data: Sources (607, 314, 481))。

综上所述,贾母对宝玉的态度是溺爱、关心、宠爱、宽容,同时也有期望和教育。这种复杂的情感关系,体现了贾母对宝玉的深厚感情。


全局查询和本地查询的区别

特征本地查询 (Local Search)全局查询 (Global Search)
查询范围以特定实体为入口点基于预先计算的实体社区摘要
查询方法使用实体嵌入和图遍历向每个社区提问并汇总答案
适用场景针对特定实体的精确查询广泛的主题性问题
性能对简单直接任务更高效适合处理复杂的多步骤查询
复杂度相对较低较高,需要更多计算资源
响应速度通常更快可能较慢,取决于查询复杂度
洞察深度适中更深入,能更全面理解上下文和关系
Token 使用量较低较高,due to 多次 LLM 调用
实现依赖向量搜索和图遍历预计算的社区摘要和多次 LLM 调用
最佳使用场景需要快速直接答案的情况需要深入洞察和复杂推理的场景

在这里插入图片描述

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值