核心要点

  • 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 工程化的体现。

常见误区

⚠️ 常见踩坑

不要一上来就堆模块化 RAG 的全部阶段——若业务简单,QuestionAnswerAdvisor 就够用,过度设计反而增加延迟与维护成本。另一个误区是只盯检索阶段、忽视预检索:很多召回不准其实源于 query 表达差,查询改写/扩展常比换向量模型收益更大。还要注意各阶段都会增加额外的模型或重排调用,带来延迟和成本,应按瓶颈定位针对性增减组件,并用评测集量化每个阶段的真实增益,而非凭感觉堆叠。

追问

追问 1QuestionAnswerAdvisor 和 RetrievalAugmentationAdvisor 该如何选型?

按复杂度与可控性需求选。QuestionAnswerAdvisor 配置少、接入快,适合标准的「检索即回答」场景和快速原型;当默认的检索-拼接策略满足不了效果时再升级。RetrievalAugmentationAdvisor 适合需要定制查询改写、元数据过滤、rerank、压缩等环节的生产级 RAG,或要对各阶段单独调优和评测的场景。可以先用前者打底,发现瓶颈后切换到后者做精细化编排。

追问 2后检索阶段加 rerank,相比只调大 topK 有什么好处?

单纯调大 topK 能提升召回率,但会引入更多噪声文档,且向量相似度只是粗排,未必反映真正的相关性。rerank 用更精确(通常是 cross-encoder 类)的相关性模型对候选重排,把最相关的放前面,再截取少量送入上下文。这样既享受大 topK 的高召回,又通过重排+裁剪保证进入提示词的内容高质高纯,缓解长上下文「迷失在中间」的问题。代价是多一次重排计算,需权衡延迟。

追问 3模块化 RAG 链路变长后,如何评估和定位是哪个阶段的问题?

分阶段评测是关键。检索阶段用召回率、命中率(标准答案所需文档是否被召回)衡量;生成阶段用答案正确性、忠实度(是否基于检索内容、有无幻觉)、是否引用了相关上下文等指标衡量。配合 Spring AI 基于 Micrometer 的可观测能力记录各阶段耗时与调用。若答案错但文档已召回,问题多在生成或后检索的上下文质量;若关键文档没召回,则回到预检索与检索阶段优化 query 与索引。

🔗 相似问题

同一考点的不同问法,面试官可能换着问,一起刷更稳

没找到想看的面试题?把你想看的告诉我们 →

延伸学习

按主题分类的相关资源,便于系统复习