RAG和GraphRAG

9 阅读3分钟

RAG 是 Retrieval-Augmented Generation,中文叫检索增强生成

RAG 的核心流程为:

  1. 用户提问
  2. 从外部知识库中检索相关内容
  3. 把检索结果连同问题一起提供给大模型
  4. 大模型基于这些资料生成答案

传统 RAG

传统 RAG 的典型做法是:

  • 通常先把知识文档切分成很多 chunk
  • 通过 embedding 模型把每个 chunk 编码为向量,存入向量数据库(Vector DB)中
  • 检索时按照向量相似度召回最相关的若干文本片段

因为传统 RAG 往往主要依赖向量相似度来召回若干相关文本片段,再将这些片段作为上下文提供给大模型,所以它更擅长找到与问题语义接近的局部文本。

但传统 RAG 对跨段关联、多跳推理和全局总结的支持相对有限,因为它对 chunk 切分方式比较敏感:

  • chunk 切得太大,可能导致细节被稀释,使相关 chunk 与问题的相似度不足,最终没有被召回
  • chunk 切得太小,又容易丢失语义之间的联系,导致相关信息可能分散在多个 chunk 里,单个 chunk 本身的信息也不够完整

当然,通过更合理的切分策略、混合检索、重排、上下文扩展和查询改写等工程手段,传统 RAG 的效果通常还能进一步提升。

AI 知识图谱 GraphRAG

GraphRAG 本质上仍然遵循“先检索,再生成”的框架,但它会让大模型参与外部知识库的构建过程:

  • 不只保存文本 chunk,还会识别实体以及实体之间的关系,并抽取概念事件等结构化信息
  • 将这些实体、关系、概念和事件组织成图结构,也就是知识图谱(knowledge graph)
  • 例如经典实现中,还会基于图结构做社区划分(通过莱顿社区检测算法,将图中边比较密集的节点合并成一个整体),并生成不同层级的摘要,以支持局部问题回答和全局主题归纳

GraphRAG 还会维护知识图谱与原文之间的映射关系,例如:

  • 一段原文对应了哪些实体和关系
  • 某些实体和关系又能回溯到哪些原文

因此,GraphRAG 提供给大模型的上下文不一定只是原始段落,还可能包括:

  • 实体关系说明
  • 子图或社区摘要
  • 多文档融合后的结构化上下文

可以这么理解:GraphRAG 试图通过结构化建模和层级摘要,缓解传统 RAG 在跨段关联、多跳推理和全局总结上的不足。

优劣分析

传统 RAG 和 GraphRAG 各有优劣。

传统 RAG 的优势在于实现简单、维护成本低、文档增删改相对容易,因此更适合更新频繁、对实时性要求较高的场景,例如:

  • 事实型问答
  • 文档片段定位
  • 单跳检索
  • 对实现复杂度和响应速度要求较高的场景

GraphRAG 的优势在于它会对文档中的实体、关系等结构进行显式建模,查询质量往往比传统 RAG 更高。但因为构建知识库依赖大模型,所以代价也更高,例如:

  • 构建成本更高
  • 调试更复杂
  • 可能出现实体抽取错误、关系链接错误和摘要失真
  • 如果图谱构建流程高度依赖全局结构,那么在文档更新后,最坏情况下可能需要较大范围甚至全量重建

最后

一句话总结差异:

  • 传统 RAG 更关注“检索到哪些相关文本
  • GraphRAG 更关注“这些知识之间如何连接,以及如何在更高层次上组织它们