RAG 是 Retrieval-Augmented Generation,中文叫检索增强生成。
RAG 的核心流程为:
- 用户提问
- 从外部知识库中检索相关内容
- 把检索结果连同问题一起提供给大模型
- 大模型基于这些资料生成答案
传统 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 更关注“这些知识之间如何连接,以及如何在更高层次上组织它们”