GraphRAG 核心流程

GraphRAG核心流程

GraphRAG 核心逻辑

不同于传统 RAG 直接匹配 Query 与文本块,GraphRAG 的核心是先将非结构化文本转化为含实体关系的知识图谱,再结合图谱与语义向量实现精准检索,全程分为 “索引构建” 和 “检索匹配” 两大阶段,其中索引构建是核心基础。

一、索引构建:从文本到结构化知识图谱

索引构建的目标是把原始文本转化为 “实体 - 关系 - 社区 - 向量” 的多层级结构化数据,支撑后续高效检索,共 7 个关键步骤:

1. 文本分块

  • 目标:拆分出保留上下文的语义单元,避免信息碎片化,保证单块文本语义完整。
  • 输入:原始全文本(如《西游记》全书文本、处理后的 text 文本 / Markdown 文档等)。
  • 方法:滑动窗口分块、基于标题 / 章节的语义分块。
  • 输出:文本单元(text_units)。
  • 示例:《西游记》第 1 回 “石猴出世”、第 14 回 “五行山救悟空” 等文本块。

2. 实体提取

  • 目标:识别文本中具有核心语义的关键节点,为图谱构建奠定基础。

  • 输入:拆分后的文本单元(text_units)。

  • 方法:通过 LLM 提示词引导,提取预设类别(人物、地点、法宝、事件等)实体,并完成实体消歧(统一同义实体表述)。

    输出:实体表(entities.parquet)。

  • 示例:实体 “孙悟空(身份:石猴 / 齐天大圣)”“唐僧(身份:金蝉子转世)”“花果山”“金箍棒”。

3. 关系提取

  • 目标:基于提取到的实体,识别实体间的语义关联。
  • 输入:文本单元 + 已提取的实体表。
  • 方法:通过 LLM 提示词引导,提取预设类型(师徒、拥有、途经、对抗等)的实体间关系,明确关系方向与类型。
  • 输出:关系表(relationships.parquet)。
  • 示例:唐僧 → 师徒 → 孙悟空;孙悟空 → 拥有 → 金箍棒;唐僧 → 途经 → 花果山。

4. 图构建

  • 目标:以为实体为节点与关系为变,生成结构化的基础知识图谱。
  • 输入:实体表 + 关系表。
  • 方法:将实体映射为图谱节点、关系映射为节点间的边;计算节点度数(关联边数量)、边权重(关系重要性),量化图谱结构。
  • 输出:基础图谱(graph_nodes/graph_edges)。
  • 示例:节点 “孙悟空(度数:高)”;边 “师徒(权重:高)”、“途经(权重:中)”。

5. 社区聚类

  • 目标:对基础图谱进行层次化模块划分,聚合语义关联紧密的实体集群,降低检索复杂度。
  • 输入:基础图谱(graph_nodes/graph_edges)。
  • 方法:采用 Leiden 算法分层聚类,以提升图谱模块度(衡量社区内聚性)为目标划分社区。
  • 输出:社区表(communities.parquet)。
  • 示例:社区 1(取经团队):唐僧、悟空、八戒、沙僧;社区 2(天庭势力):玉帝、如来、观音。

6. 社区摘要

  • 目标:为每个社区生成全局主题摘要,提炼集群核心语义,支撑高层级检索。
  • 输入:社区表 + 实体表 + 关系表。
  • 方法:采用 Map-Reduce 模式,通过 LLM 自下而上聚合社区内实体 / 关系语义,生成结构化社区摘要。
  • 输出:社区报告(community_reports)。
  • 示例:摘要 “取经团队核心成员为唐僧师徒四人,主要任务是西天取经,途经九九八十一难”。

7. 向量嵌入

  • 目标:将文本 / 实体 / 社区语义转化为向量,支撑语义相似度检索。
  • 输入:文本单元 + 实体表 + 社区摘要。
  • 方法:通过 Sentence-BERT 等模型编码为向量,存入向量数据库(如 LanceDB)构建索引。
  • 输出:向量索引。
  • 示例:实体 “孙悟空向量“、社区 “取经团队向量”

二、查询推理(Querying):从问题到结构化答案

根据问题类型选择局部或全局检索,融合图信息与原文生成答案。

局部搜索(实体细节查询)

适用场景:聚焦单一实体或具体关系(如 “孙悟空的主要关系有哪些?”)。

流程

  1. 问题解析:提取实体 “孙悟空” 并生成查询向量。

  2. 实体检索:向量库召回 “孙悟空” 及高相关实体(唐僧、八戒、金箍棒)。

  3. 图遍历:从 “孙悟空” 出发,扇出 1–2 跳获取邻居与关系(师徒、拥有、对抗)。

  4. 上下文构建:整合实体描述、关系、原文片段(如 “大闹天宫”“三打白骨精”)。

  5. 答案生成:LLM 基于上下文生成结构化回答。

召回示例:

孙悟空的核心关系包括:

  • 师徒关系:师父唐僧,师弟猪八戒、沙和尚;
  • 拥有关系:法宝金箍棒、筋斗云;
  • 对抗关系:白骨精、牛魔王等妖怪;
  • 从属关系:曾拜菩提祖师为师,后归观音菩萨点化保护唐僧取经。

全局搜索(主题 / 跨社区查询)

适用场景:全局主题或跨社区关联(如 “取经团队的核心任务与主要磨难?”)。

流程

  1. 问题解析:生成查询向量,匹配社区摘要向量。

  2. 社区检索:召回 “取经团队”“天庭势力”“妖怪” 等相关社区。

  3. 局部推理(Map):各社区并行生成局部答案(如 “取经团队任务是西天取经”“主要磨难有白骨精、火焰山”)。

  4. 全局融合(Reduce):LLM 汇总局部答案,去重并结构化。

  5. 答案生成:输出连贯全局回答并附原文出处。

召回示例:

取经团队核心任务是护送唐僧从东土大唐前往西天如来处求取真经,以普度众生。主要磨难包括:

  1. 自然障碍:火焰山(需借芭蕉扇灭火)、流沙河(收服沙和尚);

  2. 妖怪阻挠:白骨精(三次变化被悟空识破)、金角银角大王(持太上老君法宝);

  3. 内部矛盾:悟空因三打白骨精被唐僧逐回花果山,后因黄袍怪事件复归。

    关键助力来自观音菩萨(提供紧箍咒、多次解难)、如来佛祖(镇压悟空、赐真经)。

On this page