本文属于 RAG 工程框架中的「2 索引与召回」环节,聚焦「Graph RAG」方法。可先阅读 RAG-00.方法概述 再进入本篇。
原理
将语料抽取为实体与关系图,查询时先定位子图,再回填原文片段供生成。
1 | flowchart TD |
核心收益
- 对“谁影响谁、因果链、上下游关系”类问题更强。
- 能把结构化关系与非结构化文本联合利用。
局限
- 建图与更新成本高。
- 抽取质量直接决定上限。
- 图检索策略复杂。
性能/资源
- 离线:高(IE 抽取、图存储、去重对齐)。
- 在线:中到高(子图搜。+ 文本回溯)。
应用场景
- 法规条款关联、专利关系、供应链风险分析。
- 需要多跳逻辑解释的知识问答。
统一合成数据示例
输入数据片段
1 | { |
中间结果(子图检索)
1 | { |
最终生成示例(含引用)
1 | { |
原始发表与工程实现
- 代表性原始发表:GraphRAG (Microsoft Research, 2024)。
- 核心解决问题:解决多跳关系检索与全局摘要。
- 成熟实现工具:Neo4j, graphrag, networkx。
详细原理拆解
- 实体关系图子图检索,argmax relevance(q,subgraph),优势在多跳推理。
- 典型实现可拆为:输入预处理 -> 方法核心计算 -> 候选/证据构建 -> 生成与引用。
- 工程调优重点:质量(准确率/引用率)与成本(时延/token)的联合优化。
1 | flowchart LR |
工程落地扩展示例
伪代码
1 | def graph_rag_answer(query, entity_linker, graph_store, text_index, llm): |
参数示例
1 | max_hops: 2 |
常见失败案例
- 失败模式 1:实体链接错(「报销政策」链到旧版节点),子图全偏。
- 失败模式 2:图抽取噪声边(错误「适用」关系),多跳放大错误。
- 失败模式 3:子图过大,回填文本超长,仍需截断或与向量检索混合。
Demo 数据带入计算示例
1 | 问句需同时用到两条「规定」边:同一实体「报销政策v2」出发,2-hop 内覆盖 |