GraphRAG 简明教程
我在 Reddit 上不断看到关于 GraphRAG 的帖子,但直到大约一个月前我才最终决定尝试一下。在花了一些时间尝试之后,我可以说它令人印象深刻,但如果你使用 OpenAI API,它的成本也相当高。在他们在文档中提供的示例书上运行测试花费了我大约 7 美元,因此虽然它提供的性能和组织能力很强,但它并不完全经济实惠。
如果你是 RAG 系统的新手,我建议你查看一些介绍性文章:1,2。
无论如何,这是对传统 rag 系统如何工作的概述:
对于那些已经熟悉 RAG 的人来说,你可能遇到过和我一样的麻烦:
- 上下文在文本块之间丢失
- 随着文档集合的增长,性能下降
- 整合外部知识就像蒙着眼睛试图解决魔方
1、GraphRAG 的工作原理
GraphRAG 是传统 RAG 的增强版本,主要分为两个阶段:
索引阶段:
- 从被分块为较小子文档的源文档开始(类似于传统 RAG)
- 执行两个并行提取:实体提取-识别人、地点、公司等实体;关系提取-在不同块之间查找实体之间的联系
- 创建知识图谱,其中节点表示实体,边表示它们的关系
- 通过识别密切相关的实体来建立社区
- 在不同社区级别(三个)生成分层摘要级别)
- 使用 Reduce-Map 方法通过逐步组合块来创建摘要,直到获得整体概述
查询阶段:
- 接收用户查询
- 根据所需详细信息选择适当的社区级别
- 在社区级别执行检索(而不是像传统 RAG 那样在块级别)
- 检查社区摘要以生成部分响应
- 将来自多个相关社区的部分响应组合成最终的综合答案
GraphRAG 的关键创新在于它将信息结构化为基于图形的格式,并使用社区检测来创建更具上下文感知的响应。但是,传统的 RAG 系统仍然有其一席之地,特别是考虑到运行 GraphRAG 的计算成本时。
2、设置 GraphRAG
⚠️ 快速提示:此实验在 GPT-4 的 API 上运行,这并不便宜。我使用 GPT-4 模型的测试运行成本约为 7 美元。
如果你希望使用 ollama 在本地 LLM 上进行测试,请查看此视频。
现在让我们了解设置过程:
2.1 环境设置
首先,创建一个虚拟环境:
conda create -n GraphRAG
conda activate GraphRAG
安装 GraphRAG 包:
pip install graphrag
2.2 目录结构
GraphRAG 需要特定的目录结构才能实现最佳操作:
- 创建工作目录
- 在其中,创建一个 ragtest/input 文件夹结构
- 将源文档放在文件夹 input 中的输入文件夹中
在本文中,我们将使用提供的书籍,使用以下命令将其下载到输入文件夹中:
% curl https://www.gutenberg.org/cache/epub/24022/pg24022.txt > ./ragtest/input/book.txt
2.3 配置
使用以下命令初始化你的工作区:
python -m graphrag.index --init --root ./target
这将创建必要的配置文件,包括 settings.yml
中你需要:
- 设置你的 OpenAI API 密钥
- 配置模型设置(默认包括用于处理的 GPT-4 和 OpenAI 嵌入)
- 根据需要调整块大小(默认值:300 个标记)和重叠(默认值:100 个标记)
2.4 构建知识图谱
运行索引过程:
python -m graphrag.index --init --root ./target
2.5 查询你的图
GraphRAG 提供两种主要查询方法:
全局查询:
python -m graphrag.query --root ./target --method global "what are the top themes in this story"
非常适合回答有关主题和整体内容理解的广泛问题。
本地查询:
python -m graphrag.query --root ./target --method local "what are the top themes in this story"
非常适合回答有关文档内实体或关系的特定问题。
3、运行成本
让我们谈谈数字。在我对样本书的测试中,GraphRAG 进行了:
- ~570 次 GPT-4 API 调用
- 约 25 个嵌入请求
- 处理了超过 100 万个令牌
- 总成本:每本书约 7 美元。
原文链接:GraphRAG: Microsoft’s Open-Source Solution for Enhanced Document Understanding
汇智网翻译整理,转载请标明出处