跳到正文

现代 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. 问法 1 · 场景切入

    假设你在做一个电商智能客服,用户问“我的订单到哪了”,系统先搜索订单状态再生成回答。但传统做法是检索完直接拼prompt,你觉得这种“拼接”方式有什么问题?现代RAG又是怎么改进的?

  2. 问法 2 · 层层追问

    讲讲你理解的RAG系统?……传统方式一般是检索一段文本然后直接拼到prompt里给LLM,你觉得这种做法的瓶颈在哪?……那现代RAG在信息融合方式上做了什么改进,比如检索结果怎么更好地融入生成过程?

  3. 问法 3 · 直球架构

    对比传统“检索+生成”流水线,现代RAG在架构设计、信息融合和端到端训练上有哪些关键升级?重点说说检索器和生成器怎么不再是简单串联,以及如何解决检索离散性带来的不可微问题。

同模块相关题目