RAG 架构演进
约 1271 字大约 4 分钟
2026-06-29
RAG 的概念最早由 Meta 团队在 2020 年的论文 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 中正式提出,用于给当时刚出现的大型预训练语言模型补充外部的 非参数化 信息与记忆,改善生成效果
什么是非参数化信息
非参数化的信息与记忆 指不包含在模型权重里的知识内容,也就是训练语料库之外的信息
2024 年初,同济大学智能自主系统上海研究所等团队在综述 Retrieval-Augmented Generation for Large Language Models 中,把 RAG 范式与架构的演进分成了三个阶段:
| 阶段 | 特点 |
|---|---|
| Native RAG | 最朴素的 索引 → 检索 → 生成 三段式 |
| Advanced RAG | 在检索前后各加一层处理,提升召回精度与生成质量 |
| Modular RAG | 打破链式顺序,拆成可自由编排的模块 |
Native RAG
也就是 基础知识 里讲的经典架构,包含三个主要模块与阶段:索引、检索、生成

Advanced RAG
在 Native RAG 的检索环节两端各加一层:检索前处理 和 检索后处理
检索前处理
Pre-Retrieval,通常完成 查询转换、查询扩充、检索路由 等工作,为后面的检索和检索后处理做准备,提高召回知识的精确度和最终生成质量
查询转换(Query Rewriting) 把用户的原始问题重写成更清晰、更标准、更检索友好的表达:
| 原始问题 | 转换后查询 |
|---|---|
| 这个 App 支不支持退款? | App 退款政策是什么? |
| 我买的耳机怎么一直没声音? | 耳机无声音的常见原因与解决方法 |
查询扩充(Query Expansion) 在不改变用户意图的前提下,添加相关词语或同义表达,让检索能匹配到更多语义相关的文档。例如用户输入 项目合同,扩充后变成:
["项目合同", "合作协议", "法律文件", "合同模板"]这类操作能显著提高召回率,避免 "字不对字" 导致的遗漏
检索路由(Retrieval Routing) 针对不同类型的问题,选择不同的知识库或检索方式,实现多路检索。前提是准备了多个语料库:
| 用户问题 | 路由策略 |
|---|---|
| 这款产品电池容量是多少? | 路由到【产品参数知识库】 |
| 怎么退货? | 路由到【客服 FAQ 知识库】 |
| 能再详细说明一下工作原理吗? | 路由到【技术文档知识库】,或使用多跳检索 |
召回率 vs 精确率
这两个指标常被拿来衡量检索质量,方向正好相反:
- 召回率(Recall) = 检索到的相关内容数 / 所有实际相关内容数。反映系统的 覆盖能力。例:实际相关有 10 个,只检索到 6 个,召回率 = 60%
- 精确率(Precision) = 检索到的相关内容数 / 检索到的所有内容数。反映系统的 准确性。例:共返回 8 个,其中 6 个相关,精确率 = 75%
检索后处理
Post-Retrieval,对检索出的相关知识块做补充处理。即使用了很优秀的向量搜索,检索回来的 Top-K chunks 仍可能有这些问题:
- 内容相关性差:向量相似度高但语义上与问题不匹配
- 信息冗余:多个 chunks 说的是同一件事,浪费词元空间
- 有害内容:包含过时、不合法、敏感内容
- 结构混乱:拼接后的上下文缺少逻辑、排序不合用户意图
所以要进一步处理,确保喂给大模型的上下文是「最相关 + 最高质量 + 最结构化」的。常见手段:
| 手段 | 作用 |
|---|---|
| 重排序(Reranking) | 把最相关的块排到最前 |
| 过滤(Filtering) | 剔除无关内容 |
| 合并去重(Merging) | 消除冗余 |
| 精简摘要(Summarization) | 压缩上下文 |
| 格式优化(Structuring) | 理顺结构 |
经过后处理,最需要、最合规的知识块会处于上下文最前端,有助于提高输出质量
Modular RAG
Native RAG 和 Advanced RAG 都是 链式、顺序式 的范式。Modular RAG 超越了这两者,是一种更灵活、更自由、更具扩展性的范式,基本思想是 分模块——把 RAG 各阶段细分成模块类、模块与算法三层:
| 层级 | 含义 | 举例 |
|---|---|---|
| 模块类 | 一个核心流程 | 预检索、检索中、检索后处理 |
| 模块 | 核心流程里的功能模块 | 预检索中的查询转换、查询扩充 |
| 算法 | 模块的一种实现方法 | 查询转换可用普通重写、后退式重写、HyDE 重写等 |
这样拆分极大提高了系统的可扩展性和灵活性——每个模块都能独立替换、组合、编排,不再被固定的链式顺序束缚
