现代 RAG 架构怎么变?
与传统流水线在信息融合、端到端训练上的关键区别
原题:相较于传统的‘先检索后生成’流水线方法,现代RAG系统在架构设计、信息融合方式和端到端训练方面有哪些关键区别?
RAG基础 · 淘天真题
回答与解析
核心区别:从"拼接"到"融合"
1. 架构设计演进
| 维度 | 传统RAG | 现代RAG |
|---|---|---|
| 检索器 | 稀疏检索(BM25)、独立索引 | 稠密检索(DPR、Contriever)、双塔编码 |
| 生成器 | 固定LLM,仅把检索文本当prompt | 可训练或适配的生成模型 |
| 连接方式 | 字符串拼接,显式上下文窗口 | 潜在空间交互,隐式信息融合 |
典型代表:Facebook的RAG模型(2020)首次将检索器和生成器联合预训练,而非简单拼接。
2. 信息融合位置
- 输入层融合(早期):检索文档直接拼接到prompt,受限于上下文长度,容易信息淹没
- 中间层融合(现代):检索得到的向量通过cross-attention注入decoder各层,如Fusion-in-Decoder (FiD)
- 输出层/自适应融合:Self-RAG让模型自己决定何时检索、用多少检索结果
3. 端到端训练
传统:检索器固定(Elasticsearch)→ 生成器固定(GPT-3)→ 零梯度流动
现代:检索编码器 + 生成器 联合优化
- 挑战:检索的离散操作不可微
- 解法:Gumbel-Softmax近似、强化学习(REINFORCE)、或者像REALM那样预训练整个系统
4. 关键能力跃迁
- 自适应检索:模型判断"我知道/不知道",避免检索噪声
- 多跳推理:检索-生成-再检索的迭代,如IRCoT
- 端到端可学习:从"用检索增强生成"变成"生成过程本身包含检索"
一句话总结:传统RAG是检索+生成两个系统的串联,现代RAG趋向检索与生成一体化的可学习系统。
学习建议
建议系统学习该知识点
口语版讲法(约4分钟)
- 一句话定位:从拼接式RAG到融合式RAG
- 架构演进:检索器与生成器的连接方式变了
- 信息融合:从输入层拼接到中间层交叉注意力
- 端到端训练:离散检索怎么可微
- 业务实例与风险:客服退款场景下的取舍
这道题其实问的是RAG从早期简单拼接到现在深度融合的演进,本质是看我们怎么理解检索和生成之间的关系。早期做法就是典型的流水线,检索器用BM25或者TF-IDF这种稀疏检索,把文档拿回来,直接拼到prompt里扔给LLM。生成器是固定的,完全不参与检索过程。但现代RAG系统,比如Facebook 2020年那篇RAG论文,已经开始把检索器和生成器一起训练了。
具体区别我分几个点讲。先说架构。传统的是两个独立系统串联,检索器是稀疏检索,生成器是LLM,中间就是个字符串拼接。现代的做法,检索器换成了稠密检索,比如DPR、Contriever这种双塔模型,生成器也会做适配。更关键的是连接方式变了,不再是简单的文本拼接,而是向量层面的交互。比如Fusion-in-Decoder,它把检索回来的文档分别编码,然后在decoder的每一层通过cross-attention把信息融合进去,不是只在开头拼一下。
再一个就是信息融合的位置。早期只在输入层融合,受限于上下文长度,文档一多关键信息就被淹没了。现代RASG系统把融合点挪到了中间层,甚至输出层。像Self-RAG,它让模型自己判断什么时候需要检索、用多少检索结果,相当于把检索决策内化到生成过程里。
端到端训练这块是个难点。传统RAG没有梯度流动,检索器和生成器各自固定。现代系统要联合优化,但检索是离散操作,不可微。解法有好几种,比如用Gumbel-Softmax做近似,或者用强化学习里的REINFORCE,再或者像REALM那样预训练整个系统。
我举个实际业务场景吧。比如电商客服的退款问题。用户问“为什么我的退款还没到账”,传统RAG的做法是检索退款相关的FAQ,拼到prompt里,让LLM回答。但实际落地会发现,如果检索出来的文档里有“7-15个工作日”这种通用规则,而用户的订单其实已经触发异常需要人工介入,传统方法就回答不准。现代RAG系统会怎么做?它可能先用一个检索器召回订单详情和退款状态,然后生成器通过cross-attention把这些结构化信息融合进去,甚至主动判断需要再查一下物流状态,做一次多跳推理。
但这里有个前提,就是检索质量要够高。如果底库里的文档质量参差不齐,或者召回率不够,那融合得再好也没用。我上线时特别关注的是检索的召回率和精确率的平衡,一旦检索结果里混进太多噪声,生成器会跟着跑偏。
所以我的判断是,传统RAG适合知识库稳定、查询简单的场景,比如企业内部SOP问答;现代RAG更适合那些需要动态推理、信息源多的场景,比如客服、金融分析。真正落地时,我倾向把两者结合起来,比如用混合检索,关键词召回保底,向量召回提高精度,再用一个重排模型把结果精排一下。
不过说到联合训练,我其实更关心一个细节:检索器更新的频率。如果知识库每天都在变,检索器的编码器要不要跟着微调?如果不调,新文档的向量和旧文档的向量可能不在一个空间里;如果调,又可能破坏已有文档的表示。这块目前还没有特别成熟的方案,我觉得是个值得深挖的方向。
关键一句:检索器更新的频率问题:知识库动态变化时,编码器是否应该增量微调?
面试官还可能这样问
- 问法 1 · 场景切入
假设你在做一个电商智能客服,用户问“我的订单到哪了”,系统先搜索订单状态再生成回答。但传统做法是检索完直接拼prompt,你觉得这种“拼接”方式有什么问题?现代RAG又是怎么改进的?
- 问法 2 · 层层追问
讲讲你理解的RAG系统?……传统方式一般是检索一段文本然后直接拼到prompt里给LLM,你觉得这种做法的瓶颈在哪?……那现代RAG在信息融合方式上做了什么改进,比如检索结果怎么更好地融入生成过程?
- 问法 3 · 直球架构
对比传统“检索+生成”流水线,现代RAG在架构设计、信息融合和端到端训练上有哪些关键升级?重点说说检索器和生成器怎么不再是简单串联,以及如何解决检索离散性带来的不可微问题。