让GraphRAG更懂中文!graphrag-practice-chinese

项目简介

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



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

优化 1: 替换文档切分策略

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

复制文件 splitter/tokens.py 替换掉 python 依赖库中的 graphrag/index/verbs/text/chunk/strategies/tokens.py 即可。


优化 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 加持的话,构建的过程还是比较久的,可以在控制台你看到每一个步骤的进度条。)



项目链接

https://github.com/Airmomo/graphrag-practice-chinese

扫码加入技术交流群,备注开发语言-城市-昵称

(文:GitHubStore)

欢迎分享

发表评论