什么是 Spring AI 提出的模块化 RAG 架构?预检索、检索和后检索阶段各自负责什么?
- 标签:后端、编程导航
🏛 业务架构师
模块化 RAG 是 Spring AI 提倡的架构思想:把 RAG 拆成预检索、检索、后检索三段流水线,每段职责单一、可独立替换与组合——从"一根烟囱"变成"一条可编排的产线"。
三段职责:
- 预检索(Pre-Retrieval):优化"问题"——查询重写(口语转规范、指代补全)、多查询扩展、上下文相关性判断(不相关的跳过检索)、过滤条件构造。解决"问题配不上文档";
- 检索(Retrieval):执行召回——向量检索、关键词检索、混合检索,元数据过滤(权限/类目/时效)在此强制执行。解决"怎么搜得全又准";
- 后检索(Post-Retrieval):加工"结果"——重排序(Rerank 模型精排 top50→top5)、去重、压缩(长片段摘要)、来源标注。解决"塞给模型的上下文质量"。
业务架构价值(我为什么推崇这个分层):
- 可归因的优化:效果差时能定位到段——召回都没有是预检索/检索问题,召回了但答错是后检索问题——没有分段的 RAG 调优全是玄学;
- 可评测的每一段:每段定义指标(重写的完整性、召回率、重排的 NDCG),有度量才有优化;
- 组合的灵活性:不同场景按需组装(配合我的动态 Advisor 工厂)——客服场景全链路,轻量场景只留重写+检索。
一句话:模块化 RAG 把"调 RAG"从炼丹变成工程化的流水线治理——段间解耦、段内可替换、整链可评测,这也是企业级 AI 与 demo 的分水岭。
🏗 系统架构师
模块化 RAG 是 Spring AI 借鉴学术届(RAG Survey)提出的架构思想:把 RAG 拆成预检索(Pre-retrieval)、检索(Retrieval)、后检索(Post-retrieval)三个正交阶段,每阶段可独立替换与组合——从"固定管道"进化为"可编排的模块体系"。
三阶段职责:
- 预检索(查询侧优化):查询重写(指代消解、术语归一)、多查询扩展、查询分解、HyDE、路由(判断要不要检索、检索哪个库)——目标:让查询更好地表达信息需求;
- 检索(执行层):向量检索(ANN)、关键词检索(BM25)、混合检索、元数据过滤、多库联邦检索——目标:高召回高精度地拿到候选集;
- 后检索(结果侧优化):重排序(交叉编码器 Rerank)、去重合并、相关性过滤、chunk 压缩、上下文组装(来源引用)——目标:把候选集提炼成高质量上下文。
架构价值(我的理解):
- 问题定位清晰:RAG 效果差先分层归因——召回没有(预检索/索引问题)还是排序不对(后检索问题),各层独立评测;
- 组合自由:每阶段是 Advisor/组件,按知识库特征编排(规章库重精确 → 重排;资讯库重召回 → 多查询);
- 演进友好:新优化(如 Rerank 模型升级)替换单模块,不动全链路。
这与分层架构(接入/逻辑/数据)思想同源:复杂系统先正交分解,再谈逐层优化——我的动态 RAG Advisor 工厂正是按这三阶段组织配置的。
💻 全栈开发专家
模块化 RAG 是 Spring AI 借鉴学术界( Modular RAG 论文)确立的架构思想:把 RAG 拆成三个阶段的可插拔流水线,每个阶段独立配置、组合使用,而不是一个黑盒"检索 + 塞 prompt"。
预检索(Pre-Retrieval)—— 把查询变好:
- 查询重写(指代消解、口语规范化)
- 多查询扩展(Multi-Query)、HyDE(假设文档检索)
- 查询路由(判断该查哪个知识库、还是不查)
- 我项目里:QueryRewriteAdvisor + MultiQueryAdvisor + ContextGateAdvisor 全在这层。
检索(Retrieval)—— 把候选找全:
- 向量检索、关键词检索(BM25)、混合检索 + 融合(RRF)
- 元数据过滤(权限/分类)、topK/阈值调参
- 对应 Spring AI:
VectorStore.similaritySearch+ filterExpression,可挂多个 store。
后检索(Post-Retrieval)—— 把上下文用好:
- 重排 Rerank(cross-encoder 精排 top50 → top5)
- 上下文压缩(去掉 chunk 里无关句子)、去重
- 引用标注(回答时标注来源文档)、prompt 组装(QuestionAnswerAdvisor 的模板)
我的理解(面试升华):模块化 RAG 的工程价值是可组合、可观测、可评估——每一跳都是独立 Advisor,能单独 A/B 和监控;RAG 效果优化不再是玄学调 prompt,而是按阶段定位问题(召回率低查预检索/检索,准确率低查后检索)逐段优化。