核心要点
Spring AI 把 RAG 实现为 Advisor:最简单的 QuestionAnswerAdvisor 一行接入「检索-拼接-回答」;模块化的 RetrievalAugmentationAdvisor 则允许把每个阶段拆开自定义。
预检索(pre-retrieval)阶段处理用户 query:可做查询改写、扩展为多个子查询、翻译、压缩历史上下文,目标是让送入检索的 query 更利于召回。
检索(retrieval)阶段从向量库取相关文档:执行向量相似度检索、按元数据过滤、控制 topK 与相似度阈值,是召回相关知识的核心环节。
后检索(post-retrieval)阶段加工候选文档:可做 rerank 重排、压缩裁剪、去重、合并,提升喂给模型的上下文质量,再拼进 Prompt 生成答案,整体对齐 Modular RAG 的可插拔编排思路。
标准回答
一、为什么要模块化 RAG
朴素 RAG 就是「检索 topK 文档 + 拼进提示词」,实现简单但效果天花板低:query 表达不佳会召回不准、检索结果含噪声会干扰生成。模块化 RAG(Modular RAG)的思路是把流程拆成若干可独立替换、可重排的阶段,按业务需要灵活编排。Spring AI 正是用 Advisor 体系落地了这一理念。
二、两个层次的 Advisor
Spring AI 提供两种 RAG Advisor:
- QuestionAnswerAdvisor:开箱即用的简单版,自动完成「用 query 检索向量库 → 把文档拼入上下文 → 回答」,适合快速搭建。
- RetrievalAugmentationAdvisor:模块化版,把 RAG 拆成预检索、检索、后检索三大阶段,每个阶段都有对应的可插拔组件接口,可按需替换或组合。
三、预检索(pre-retrieval)
聚焦「把 query 变好」。常见组件能力包括:查询改写(让口语化问题更适合检索)、查询扩展(拆成多个子查询提升召回覆盖)、查询翻译(跨语言知识库)、以及结合对话历史压缩出独立可检索的 query。这一步直接影响后续召回质量。
四、检索(retrieval)
核心召回环节:基于向量相似度从 VectorStore 检索候选文档,可叠加元数据过滤(按租户、时间、来源限定)、调节 topK 与相似度阈值。也可在此组合多路检索结果。目标是又准又全地拿到相关知识片段。
五、后检索(post-retrieval)
对召回结果做精加工再喂给模型:rerank 用更强的相关性模型重排、压缩裁剪掉无关段落、去重与合并相似内容、控制最终进入上下文的总量。处理完的文档拼进 Prompt,由模型生成最终答案。
六、整体价值
这套分阶段、可插拔的设计让团队可以针对自身瓶颈做精准优化——召回差就强化预检索与检索,上下文噪声大就加 rerank 与压缩——而不必重写整条链路,正是 Modular RAG 工程化的体现。
追问
追问 1:QuestionAnswerAdvisor 和 RetrievalAugmentationAdvisor 该如何选型?
按复杂度与可控性需求选。QuestionAnswerAdvisor 配置少、接入快,适合标准的「检索即回答」场景和快速原型;当默认的检索-拼接策略满足不了效果时再升级。RetrievalAugmentationAdvisor 适合需要定制查询改写、元数据过滤、rerank、压缩等环节的生产级 RAG,或要对各阶段单独调优和评测的场景。可以先用前者打底,发现瓶颈后切换到后者做精细化编排。
追问 2:后检索阶段加 rerank,相比只调大 topK 有什么好处?
🔗 相似问题
同一考点的不同问法,面试官可能换着问,一起刷更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习