1 RAG VS GraphRAG
GraphRAG教程:https://www.graphrag.club/
传统RAG的流程:
query -> embedding -> vector db -> related documents -> query+ related documents -> llm – > answer.
传统RAG遇到的问题:
- 1 如果需要共同属性分布在某个文档的很多段落,则需要返回全部段落;
- 2 如果需要理解跨文档的数据时性能不佳;
GraphRAG不直接使用vector db,而是通过构建知识图谱来存储文档信息。
GraphRAG步骤:
- 1 通过llm解析document构建知识图谱;
- 2 基于知识图谱做community detection得到层次化信息
GraphRAG遇到的问题:
- 1 知识图谱的构建,噪声太多;
- 2 community detection的聚类计算上消耗太大;
- 3 新数据的处理问题,涉及知识图谱的重建和community detection的重计算问题;
2 GraphRAG
2.1 初探
GraphRAG分为索引构建和查询。
索引构建:
- 将输入语料库分割为一系列的文本单元(TextUnits),这些单元作为处理以下步骤的可分析单元,并在我们的输出中提供细粒度的引用。
- 使用 LLM 从文本单元中提取所有实体、关系和关键声明。
- 使用 Leiden 技术(opens in a new tab) 对知识图谱进行层次聚类。要查看视觉效果,请参见上面的图 1。每个圆圈都是一个实体(例如人、地点或组织),大小表示实体的度,颜色表示其社区层级。
- 自下而上地生成每个社区层级及其组成部分的摘要。这有助于对数据集的整体理解。
查询:
在查询时,使用这些结构为 LLM 上下文窗口提供材料来回答问题。主要查询模式有:
2.2 quickstart
- 1 安装GraphRAG: pip install graphrag
- 2 准备示例数据和环境变量 : python -m graphrag.index –init –root ./ragtest
- 3 运行索引流程 : python -m graphrag.index –root ./ragtest
- 4 运行查询流程 :
- 4.1 全局模式:python -m graphrag.query \–root ./ragtest \–method global \“这个故事的主题是什么?”
- 4.2 局部模式:python -m graphrag.query \–root ./ragtest \–method local \“Scrooge 这个故事的主人公是谁,他的主要关系是什么?”
2.2.1 安装GraphRAG
pip install graphrag
安装成功。
2.2.2 准备示例数据和环境变量
python -m graphrag.index –init –root ./GraphRAG
初始化环境成功,得到output和prompts文件夹。
.env设置GRAPHRAG_API_KEY
2.2.3 运行索引流程
python -m graphrag.index –root ./GraphRAG
2.2.4 全局模式查询
python -m graphrag.query –root ./GraphRAG –method global “这个故事的主题是什么?”
2.2.5 局部模式查询
python -m graphrag.query –root ./GraphRAG –method local “Scrooge 这个故事的主人公是谁,他的主要关系是什么?”