跳转到内容

GraphRAG:知识图谱增强检索

GraphRAG:知识图谱增强检索

学习目标

读完本章后,你将能够:

  • 理解 GraphRAG 相比传统向量检索的差异与互补性
  • 掌握知识图谱构建的三阶段流程(NER → 关系抽取 → 实体消歧)
  • 设计图谱检索与向量检索的融合策略
  • 分析 GraphRAG 的适用场景与局限

前置知识


1. 为什么 RAG 需要知识图谱

传统向量检索的局限:

  1. 语义匹配但不精确:向量检索找到”语义相似”的文本,但无法精确回答”谁做了什么”、“A 与 B 的关系是什么”这类结构化问题
  2. 缺乏全局关联:每个 chunk 独立检索,无法跨越文档发现实体间的关联
  3. 不支持多跳推理:向量检索只能做一次相似度匹配,无法回答”A 的合作伙伴的竞争对手是谁”这类多跳问题

GraphRAG 将知识图谱的结构化知识与向量检索的语义能力结合:

2. 图谱构建三阶段

2.1 实体识别(NER)

从文本中识别出命名实体:

实体类型示例
PERSON张三、John Smith
ORGANIZATION阿里巴巴、Google
LOCATION北京、California
PRODUCTiPhone、GPT-4
EVENT2024 奥运会
DATE2024 年、Q3

实现方式

  • LLM 辅助:用 LLM 从 chunk 中提取实体列表,灵活但成本高
  • 传统 NER 模型:spaCy、BERT-NER 等,速度快但需要标注数据

2.2 关系抽取

在识别实体的同时,提取实体之间的关系:

文本:"张三于 2023 年加入阿里巴巴,担任技术总监。"
提取结果:
(张三, JOIN_ORGANIZATION, 阿里巴巴, 2023)
(张三, TITLE, 技术总监)

关系类型可以是预定义的(如 Schema.org),也可以由 LLM 从上下文中动态推断。

2.3 实体消歧(实体对齐)

同一实体在不同文本中可能有不同表述:

"张三" = "张先生" = "三哥" = "Zhang San"
"阿里巴巴" = "Alibaba" = "阿里" = "淘宝母公司"

实体消歧通过 LLM 辅助判断两个实体描述是否指向同一对象:

Prompt 示例:
请判断以下两个实体描述是否指向同一个真实实体:
实体 A: "张三,技术总监"
实体 B: "张先生,阿里技术总监"
返回: {"same_entity": true, "confidence": 0.9}

轻量模式 vs 通用模式

模式特点适用场景
轻量(Light)基于文本相似度 + 规则匹配,不使用 LLM大规模数据集、成本敏感
通用(General)使用 LLM 辅助判断,准确率更高高质量要求、中小规模

3. 图谱检索

图谱检索与向量检索并行执行:

3.1 图谱查询策略

查询类型示例图谱操作
实体查询”张三是谁?“按实体名称查找节点,返回属性
关系查询”张三在哪工作?“从实体节点出发遍历关系边
多跳查询”张三的公司的竞争对手有哪些?“多步遍历关系图
子图查询”阿里巴巴的组织架构”返回与实体相关的所有节点和关系

3.2 结果融合

图谱检索和向量检索的结果融合策略:

  1. 图谱结果优先:如果图谱查询返回了精确匹配的结构化信息,将其放在结果列表最前面
  2. 向量结果补充:向量检索提供更丰富的上下文文本
  3. 统一格式化:将所有结果(图谱的结构化三元组 + 向量检索的文本 chunk)统一为 LLM 可读的格式

4. 阶段标记器(Phase Markers)

在图谱构建过程中,使用阶段标记器追踪进度:

阶段标记说明
1PHASE_NER实体识别完成
2PHASE_RELATION关系抽取完成
3PHASE_RESOLUTION实体消歧完成
4PHASE_GRAPH图谱构建完成

这使得图谱构建过程可观测、可中断、可恢复。

5. 问题与规避

陷阱对策
实体识别准确率低结合 LLM + 传统 NER 模型,互相校验
图谱规模爆炸过滤低置信度关系,限制单实体最大关系数
实体消歧误判设置较高置信度阈值(如 0.85),低于阈值的标记为待审核
图谱检索为空回退到纯向量检索,图谱作为增强而非替代
图谱更新延迟增量构建:新文档只处理新增实体,不影响已有图谱

6. 设计取舍

GraphRAG vs 纯向量 RAG

维度GraphRAG纯向量 RAG
精确查询高(结构化查询)中(语义近似匹配)
多跳推理支持不支持
构建成本高(NER + 关系 + 消歧)低(仅 Embedding)
维护成本高(图谱需要持续更新)
适用场景实体关系密集的查询通用语义检索

推荐:当查询经常涉及实体关系(“谁”、“什么关系”、“关联”)时,引入 GraphRAG 作为向量检索的增强层。不需要完全替代向量检索,两者互补效果最好。

轻量 vs 通用图谱构建

已在第 2.3 节对比。简而言之:轻量模式适合快速启动,通用模式适合高质量要求。


参考来源

补充:轻量级实体链接在记忆系统中的应用

完整的 GraphRAG 流程(NER → 关系抽取 → 实体消歧 → 图谱构建 → 图查询)适用于文档级知识图谱构建。在 AI 记忆系统中,实体链接通常采用更轻量的方案:

轻量级实体链接 vs 完整 GraphRAG

维度完整 GraphRAG轻量级实体链接(Mem0 方案)
实体提取LLM + NER 模型spaCy NER 模型
关系类型多种关系边(works_for、located_in 等)仅实体-记忆关联(linked_memory_ids
存储专用图数据库(Neo4j)向量存储(实体也 Embedding 后存入)
检索Cypher 查询 + 多跳遍历向量相似度搜索(top_k=1,阈值 ≥ 0.95)
用途复杂多跳推理检索阶段的实体提升(entity boost)

轻量级实体链接的核心设计

  1. 实体-记忆多对多关联:每条记忆通过 linked_memory_ids 关联到多个实体;每个实体也关联到多个记忆 ID
  2. 向量化实体搜索:实体也通过 Embedding 转为向量,在 Entity Store 中进行相似度搜索,而非精确字符串匹配
  3. Spread-Attenuation 衰减:一个实体关联的记忆越多,单条记忆获得的提升权重越小,防止”大众实体”过度影响检索
  4. 全局去重:同一批次提取的多个记忆中,相同实体只提取一次,共享 Embedding

适用场景

轻量级实体链接适合对话级记忆系统——实体密度低、关系简单、查询以语义检索为主。完整 GraphRAG 适合文档级知识库——实体密集、关系复杂、需要多跳推理。