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 这个故事的主人公是谁,他的主要关系是什么?”