现代RAG架构有哪些改进?
从流水线到深度融合,检索与生成如何协同优化
原题:相比于传统的‘先检索后生成’流水线方法,现代RAG系统在架构或流程上有何改进或差异?是否仅仅是简单拼接还是存在更深层次的融合机制?
评估与监控 · 淘天真题
回答与解析
核心差异:从"拼接"到"深度融合"
传统RAG是线性流水线:检索 → 拼接上下文 → 生成,三者独立优化。现代RAG的核心改进在于打破这种隔离,实现检索与生成的双向交互。
架构层面的关键演进
| 维度 | 传统RAG | 现代RAG |
|---|---|---|
| 交互方式 | 单向一次 | 迭代/多轮交互 |
| 检索决策 | 固定策略 | 自适应路由(何时检、检多少) |
| 优化目标 | 分段优化 | 端到端联合训练 |
三类深度融合机制
1. 迭代式检索(Iterative Retrieval)
- 生成过程中动态发现知识缺口,触发补充检索
- 代表:IRCoT、Self-Ask,让LLM主动决定"我还需要查什么"
2. 自适应路由(Adaptive Routing)
- 根据问题难度选择策略:直接生成 / 单轮检索 / 多轮迭代
- 代表:Self-RAG、Corrective RAG,用反思token判断检索必要性
3. 联合表示学习
- 检索器与生成器共享梯度,如REPLUG、RA-DIT
- 检索目标从"相关度"转向"对生成有用的信息"
典型方案速览
- Self-RAG:生成时输出反思token(Retrieve/IsRel/IsSup/IsUse),自评估是否需要检索及结果质量
- CRAG:检索后做置信度评估,低置信时触发工具扩展或生成降级
本质区别
传统RAG问的是"检索到了什么";现代RAG问的是"生成需要什么"——检索成为生成过程的动态函数,而非前置固定输入。
学习建议
掌握RAG基本流程,学习检索与生成的独立评估指标,结合端到端任务理解整体性能度量方法。
口语版讲法(约4分钟)
- 本质是检索和生成从单向变成双向互动
- 边界划分:自适应路由 vs 固定流程
- 业务场景:客服退款,动态决定是否检索
- 落地风险:检索质量不稳定、延迟、成本
- 我的判断:用迭代检索+反思机制,但控制轮次
这道题问的是现代RAG到底比传统流水线强在哪,本质是看检索和生成的关系从单向变成双向互动了。传统做法是检索完把结果拼进prompt,生成器就直接用了,三个模块各自优化,检的只管检,写的只管写。但现代RAG会把检索嵌进生成过程里,让生成器反过来指导检索,比如生成到一半发现缺信息,再主动去查一次。这不是简单拼接,而是有更深层的融合。
具体说一下,传统RAG适合那些问题比较固定、知识库也不太变动的场景,比如内部知识库问答,查什么文档基本一眼就能判断。但真实业务里,问题复杂度差别很大,比如电商客服,用户问“退款流程”可能直接生成就行,但问“用了满减券又用了积分,退款怎么算”就得检索详细规则。所以现代RAG引入了自适应路由,让模型自己判断要不要检、检几次。
这里我重点讲几个机制。第一个是迭代式检索,生成过程中发现知识缺口就触发补充检索,比如Self-Ask,模型会主动说“我需要查一下某某规则”。第二个是自适应路由,根据问题难度选策略:简单的直接生成,中等难度的单轮检索,复杂的甚至多轮迭代。像Self-RAG会输出反思token,比如“是否需要检索”“结果是否相关”“是否足够支持生成”,模型自己评估要不要再查一次。
拿客服退款举个例子。用户问“我昨天买了东西今天降价了能退差价吗”,传统做法是直接把所有退货政策文档塞进prompt,可能信息很多但没切中要点。现代RAG会先尝试生成,如果模型不确定,就触发检索,找到“价保政策”那条记录,再生成回答;如果检索结果不够置信,比如文档里没明确说,模型可以降级处理,比如建议用户联系人工。这样既快又准。
但落地时有个关键前提:检索质量得稳定。如果检索器召回一堆不相关文档,那迭代反而放大错误。我特别关注的是,上线前要压测检索的Recall和Precision,同时控制迭代轮次,一般两轮就够,多了延迟和成本受不了。常见失败场景是迭代检索陷入死循环,模型反复说“还需要查”,这时候得设最大轮次,超时就用默认策略。
所以我会把现代RAG看成一种动态决策系统,而不是简单的检索+生成。我更倾向的做法是先用Corrective RAG做置信度评估,低置信时触发工具扩展或生成降级,同时保留传统流程兜底。
另外有个点值得注意,就是这些反思token是怎么训练出来的?像Self-RAG是用了SFT来教模型输出这些控制信号,但训练数据构造本身就很讲究,比如负样本怎么采样,直接关系到模型会不会过度依赖检索。
关键一句:反思token的训练数据构造,特别是负样本采样方式会影响模型是否过度依赖检索。
面试官还可能这样问
- 问法 1 · 场景切入
假设你在做电商客服的RAG系统,用户问“这个手机和那个平板哪个好”,你检索了一堆资料,但生成答案时发现缺了对比维度。传统做法是先检完再生成,但现在你怎么让生成过程中还能动态去查更细的信息?
- 问法 2 · 层层追问
你理解的RAG流程是怎样的?……那检索和生成是各做各的,还是有什么互动?……如果生成一半发现信息不够,能回头再查吗?这种迭代检索怎么实现?
- 问法 3 · 直球架构
现代RAG相比传统检索-生成流水线,有哪些架构上的核心改进?不只是简单拼接吧,说说深层融合机制,比如迭代检索、自适应路由、联合训练这些,具体怎么做的?