RAG-02索引召回-Graph-RAG

本文属于 RAG 工程框架中的「2 索引与召回」环节,聚焦「Graph RAG」方法。可先阅读 RAG-00.方法概述 再进入本篇。

原理

将语料抽取为实体与关系图,查询时先定位子图,再回填原文片段供生成。

1
2
3
4
5
6
7
flowchart TD
D[文档] --> IE[实体/关系抽取]
IE --> KG[知识图谱]
Q[问题] --> QE[实体链接]
QE --> SG[子图检。多跳扩展]
SG --> EV[证据片段回溯]
EV --> LLM[答案生成+引用]

核心收益

  • 对“谁影响谁、因果链、上下游关系”类问题更强。
  • 能把结构化关系与非结构化文本联合利用。

局限

  • 建图与更新成本高。
  • 抽取质量直接决定上限。
  • 图检索策略复杂。

性能/资源

  • 离线:高(IE 抽取、图存储、去重对齐)。
  • 在线:中到高(子图搜。+ 文本回溯)。

应用场景

  • 法规条款关联、专利关系、供应链风险分析。
  • 需要多跳逻辑解释的知识问答。

统一合成数据示例

输入数据片段

1
2
3
4
5
6
7
8
{
"triples": [
["报销政策v2", "规定", "机票上限2000元"],
["报销政策v2", "规定", "30天内提交"],
["出差员工", "适用", "报销政策v2"]
],
"query": "员工机票报销限制是什么?"
}

中间结果(子图检索)

1
2
3
4
5
6
7
{
"seed_entity": "报销政策v2",
"subgraph_edges": [
["报销政策v2", "规定", "机票上限2000元"],
["报销政策v2", "规定", "30天内提交"]
]
}

最终生成示例(含引用)

1
2
3
4
{
"answer": "机票报销上限为 2000 元,并要求 30 天内提交。",
"citations": [{"doc_id": "D01", "evidence_span": "机票上限 2000 元;30 天内提交"}]
}

原始发表与工程实现

  • 代表性原始发表:GraphRAG (Microsoft Research, 2024)。
  • 核心解决问题:解决多跳关系检索与全局摘要。
  • 成熟实现工具:Neo4j, graphrag, networkx。

详细原理拆解

  • 实体关系图子图检索,argmax relevance(q,subgraph),优势在多跳推理。
  • 典型实现可拆为:输入预处理 -> 方法核心计算 -> 候选/证据构建 -> 生成与引用。
  • 工程调优重点:质量(准确率/引用率)与成本(时延/token)的联合优化。
1
2
3
4
5
flowchart LR
In[输入 Query 与知识] --> Core[方法核心计算]
Core --> Rank[匹配/路由/排序]
Rank --> Build[证据组装]
Build --> Out[答案与引用]

工程落地扩展示例

伪代码

1
2
3
4
5
def graph_rag_answer(query, entity_linker, graph_store, text_index, llm):
seed = entity_linker.link(query) # 对齐到图中实体
subgraph = graph_store.k_hop(seed, hops=2) # 多跳扩展
passages = text_index.fetch_chunks_for_nodes(subgraph.nodes())
return llm.generate(query, evidence=passages)

参数示例

1
2
3
4
max_hops: 2
max_edges_per_hop: 30
subgraph_score: relevance_x_trust
text_backoff: true

常见失败案例

  • 失败模式 1:实体链接错(「报销政策」链到旧版节点),子图全偏
  • 失败模式 2:图抽取噪声边(错误「适用」关系),多跳放大错误。
  • 失败模式 3:子图过大,回填文本超长,仍需截断或与向量检索混合。

Demo 数据带入计算示例

1
2
3
问句需同时用到两条「规定」边:同一实体「报销政策v2」出发,2-hop 内覆盖
「上限2000」与「30天」两个对象;若仅用向量检索单段,可能只命中其一。
子图相关性:subgraph_A(含两规定边)=0.82 > subgraph_B(仅一条)=0.55 → 选 A 再取原文证据。
-------------本文结束感谢您的阅读-------------