37-Graph-RAG与知识图谱
为什么需要 Graph RAG?
传统 RAG 基于非结构化文本的嵌入检索,存在一些不足:
- 语义偏差:"保温大棚"和"保温杯"在 embedding 空间中语义相似度很高,但实际上完全不相关,会引入错误上下文导致幻觉;
- 长程关联丢失:向量检索只能找到和查询直接相关的片段,无法利用实体之间的间接关联;
- 信息密度低:知识分散在多个段落中,难以整合出完整的结构化知识。
知识图谱能够把实体和关系结构化,Graph RAG 利用知识图谱来增强检索,可以缓解这些问题。
Graph RAG 原理
Graph RAG(Graph Retrieval-Augmented Generation)是一种基于知识图谱的检索增强技术,通过构建图模型对知识进行表达,将实体和关系之间的联系用图的形式进行展示,然后利用大语言模型基于检索到的子图完成生成。
核心思想:
- 将知识图谱等价于一个超大规模词汇表,实体和关系对应图中的节点和边;
- 检索时将实体和关系作为单元进行联合建模;
- 从知识图谱中检索出和查询相关的子图作为上下文,送入大模型生成回答。
Graph RAG 基本流程
1def simple_graph_rag(query_str, nebulagraph_store, llm):
2 # 1. 从问题中提取关键实体
3 entities = _get_key_entities(query_str, llm)
4 entities = _expand_synonyms(entities)
5
6 # 2. 根据实体检索相关子图
7 graph_rag_context = _retrieve_subgraph_context(entities, depth=2)
8
9 # 3. 利用子图上下文 + LLM 合成答案
10 return _synthesize_answer(query_str, graph_rag_context, llm)
步骤详解
- 实体抽取:使用 LLM 从用户查询中提取关键实体;
- 子图检索:以提取的实体为种子,在知识图谱中进行多跳搜索,获得相关子图;
- 答案合成:将子图转换为文本上下文,和用户查询一起输入 LLM 生成答案;
- 融合:知识图谱召回可以和传统向量召回融合,综合两者优势。
知识图谱构建
知识图谱构建需要完成以下关键步骤:
1. 实体抽取
从原始文本中识别出命名实体(人名、地名、组织、概念等),可以使用:
- 预训练 NER 模型;
- 大语言模型 prompting 抽取;
- 结合规则方法。
2. 关系抽取
识别实体对之间的语义关系,例如:(Apple, 创始人, Steve Jobs)。常见方法:
- 流水线方法:先抽实体,再抽关系;
- 联合抽取:端到端模型同时抽取实体和关系;
- 大模型 prompting:适合开放领域关系抽取。
3. 知识融合
- 实体对齐:解决同名实体歧义问题,将同一个实体的不同指称合并;
- 实体链接:将文本中的指称链接到知识图谱中正确的实体;
- 去重:合并相同实体和关系。
4. 存储与查询
知识图谱常用存储:
- Neo4j:原生图数据库,支持 Cypher 查询;
- NebulaGraph:分布式高性能图数据库;
- 基于 Apache Jena / Virtuoso 的 RDF 存储。
Graph RAG vs 传统 RAG
| 维度 | 传统 RAG | Graph RAG |
|---|
| 知识表示 | 文本块 embedding | 实体-关系图 |
| 优势 | 构建简单,不需要知识工程,能处理非结构化文本 | 能捕捉实体间关联,减少歧义,回答多跳问题更好 |
| 劣势 | 难以处理多跳推理,容易引入语义歧义 | 构建知识图谱有成本,实体/关系抽取有误差 |
| 适用场景 | 通用文档问答,个人知识库 | 需要推理、关联分析的领域知识问答 |
Graph RAG 排序优化
当知识图谱规模较大时,子图检索可能返回很多不相关的路径,需要排序优化:
粗排阶段
使用人工特征对候选路径排序,保留 Top-N:
- 字符重合数、词重合数;
- 编辑距离;
- 跳数、路径长度;
- Jaccard 相似度;
- 实体和查询的覆盖度;
- 路径中包含答案的个数。
精排阶段
使用预训练语言模型计算查询和路径的语义匹配度,选择得分最高的 Top 2-3 路径作为最终上下文。
知识图谱增强 RAG 的典型架构
典型 RAG + KG 架构使用双路检索:
优点:
- 向量检索负责找到相关文本片段;
- 知识图谱负责提供结构化实体关系;
- 两者互补,效果优于单一方法。
面试常见问题
1. 什么是 Graph RAG?它解决了传统 RAG 的什么问题?
回答要点:
- 基于知识图谱的检索增强生成;
- 解决传统 RAG:语义歧义、长程关联丢失、信息密度低;
- 通过实体关系图提供结构化知识,提高回答准确性。
2. Graph RAG 的基本流程是什么?
回答要点:
- 从查询中抽取关键实体;
- 在知识图谱中检索相关子图(多跳);
- 将子图转换为上下文;
- 和向量检索结果融合,输入大模型生成回答。
3. 知识图谱如何构建?
回答要点:
- 实体抽取 → 关系抽取 → 知识融合 → 存储;
- 可以用 NER 模型或大模型抽取;
- 需要处理实体对齐和消歧。
4. Graph RAG 一定比普通 RAG 好吗?为什么?
回答要点:
- 不一定;
- Graph RAG 需要先构建知识图谱,有额外的构建成本;
- 对于简单文档问答,普通 RAG 足够,成本更低;
- Graph RAG 在需要多跳推理、实体关联的场景更有优势。