深入解析 Spring AI 中的 RAG:什么是RAG,完整的RAG工作流,SpringAI中的RAG Advisor的核心区别与选型指南
一、什么是 RAG?二、完整的RAG工作流三、Spring AI 中的检索增强生成 Advisor 选型
一、什么是 RAG?
RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合信息检索技术和 AI 内容生成的混合架构,可以解决大模型的知识时效性限制和幻觉问题。
- 检索增强生成(RAG)是一种技术,有助于克服大型语言模型的局限性,这些模型在处理长文本内容、事实准确性和上下文感知方面存在困难。
简单来说,RAG 就像给 AI 配了一个 “小抄本”,让 AI 回答问题前先查一查特定的知识库来获取知识,确保回答是基于真实资料而不是凭空想象。
从技术角度看,RAG 在大语言模型生成回答之前 ,会先从外部知识库中检索相关信息,然后将这些检索到的内容作为额外上下文提供给模型,引导其生成更准确、更相关的回答。
通过 RAG 技术改造后,AI 就能:
- 准确回答关于特定内容的问题
- 在合适的时机推荐相关课程和服务
- 用特定的语气和用户交流
- 提供更新、更准确的建议
可以简单了解下 RAG 和传统 AI 模型的区别:

二、完整的RAG工作流
分为两大块:
1.建立索引,准备文档阶段 2.查询阶段
一个是我们开发者准备的,一个是给用户用的

索引构建的目标是为检索做好准备。其核心流程是:将原始文档预处理并切分成文本片段,然后利用Embedding模型把文本片段转化为向量表示,最终将这些向量存储到向量数据库中。

检索与生成阶段遵循以下步骤:
-
检索:将用户查询转换为向量,基于相似度从向量数据库中检索出相关的文档切片。
-
精排(可选):使用重排序模型对初步检索结果进行精细排序,筛选出最相关的片段。
-
生成:将top-K个最相关的文档切片与用户查询共同组合成提示词,交由大语言模型生成最终答案。
三、Spring AI 中的检索增强生成 Advisor 选型
Spring AI 框架中用于实现检索增强生成(RAG, Retrieval-Augmented Generation)的 Advisor 有两个 QuestionAnswerAdvisor 和 RetrievalAugmentationAdvisor,但它们在功能、设计和使用场景上存在一些区别,下面就是我对这两个 Advisor 的分析。在使用这两个 Advisors 的时候,官方文档中写明需要引入这个依赖,但是引入报错,不引入也是可以实现的
1. 概述
- QuestionAnswerAdvisor: 这是 Spring AI 提供的一个专注于简单 RAG 场景的 Advisor,主要用于将用户查询与向量数据库(VectorStore)中检索到的文档结合,为 AI 模型提供上下文,从而生成更准确的回答。它通过默认或自定义的 PromptTemplate 将检索到的上下文与用户查询合并,适用于快速实现基本的 RAG 功能。
- RetrievalAugmentationAdvisor: 这是 Spring AI 中更通用、更模块化的 RAG 实现,基于模块化架构,提供了更高的灵活性和扩展性。它支持更复杂的 RAG 工作流,包括查询转换(query transformation)、文档后处理(document post-processing)等,适用于需要高级定制或复杂 RAG 场景的开发。
2. 主要区别以下是从功能、配置、灵活性、使用场景等几个方面对两者的对比:
|
特性 |
QuestionAnswerAdvisor |
RetrievalAugmentationAdvisor |
|
设计目标 |
提供简单的 RAG 实现,专注于快速集成向量数据库检索和生成回答。 |
提供模块化的 RAG 框架,支持更复杂的工作流和高级功能(如查询转换、文档后处理)。 |
|
核心功能 |
- 查询向量数据库并将结果附加到用户 prompt。 - 支持自定义 PromptTemplate 来控制上下文合并方式。 - 支持动态过滤表达式(FILTER_EXPRESSION)。 |
- 支持查询转换(queryTransformers)、文档检索(documentRetriever)和文档后处理(DocumentPostProcessor)。 - 更灵活的模块化配置。 |
|
配置方式 |
通过 QuestionAnswerAdvisor.Builder 配置,例如设置相似性阈值(similarityThreshold)、返回结果数量(topK)、过滤表达式和自定义模板。 |
通过 RetrievalAugmentationAdvisor.Builder 配置,支持更丰富的组件(如 queryTransformers 和 DocumentPostProcessor)。 |
|
动态性 |
支持运行时通过 FILTER_EXPRESSION 参数动态调整检索过滤条件。 |
除支持 FILTER_EXPRESSION 外,还支持动态调整查询转换和文档后处理逻辑。 |
|
自定义模板 |
支持通过 PromptTemplate 自定义如何将检索到的上下文与用户查询合并。 |
不直接提供 PromptTemplate 配置,但可以通过 queryAugmenter 或其他组件间接控制上下文增强逻辑。 |
|
空上下文处理 |
默认情况下会返回检索到的上下文,需显式处理空上下文的情况。 |
默认不允许空上下文,但可通过 allowEmptyContext(true) 配置允许空上下文。 |
|
高级功能 |
功能较为简单,专注于基本的 RAG 流程。 |
支持高级功能,如查询重写(RewriteQueryTransformer)、文档重新排序、内容压缩等。 |
|
依赖要求 |
无需额外的依赖,直接包含在 Spring AI 核心模块中。 |
需添加 spring-ai-rag 依赖以使用模块化 RAG 功能。 |
|
适用场景 |
适用于简单的 RAG 应用,例如直接从向量数据库检索相关文档并生成回答。 |
适用于需要复杂 RAG 工作流的场景,例如需要优化查询、重新排序文档或处理大规模数据。 |
3. 使用场景的区别
- QuestionAnswerAdvisor:
- 适合场景:
- 简单的问答系统,例如基于知识库的 FAQ 回答。
- 需要快速将向量数据库的检索结果附加到用户查询并生成回答。
- 对 prompt 模板有一定定制需求,但不需要复杂的查询优化或文档处理。
示例场景:企业内部文档查询系统,用户提问后直接从向量数据库检索相关文档并生成回答。
- RetrievalAugmentationAdvisor:
- 适合场景:
- 复杂的 RAG 应用,例如需要优化用户查询(query rewriting)或对检索到的文档进行重新排序、压缩。
- 大规模知识库场景,需要处理噪声数据或提高检索结果的相关性。
- 需要模块化设计以支持未来的扩展或自定义 RAG 流程。示例场景:学术研究系统,需对用户查询进行改写以提高检索精准度,并对检索到的文档进行重新排序以确保相关性。
4. 总结QuestionAnswerAdvisor 适合简单的 RAG 场景,易于使用,专注于将向量数据库检索结果附加到用户查询并生成回答。RetrievalAugmentationAdvisor 适合复杂 RAG 场景,提供模块化设计,支持查询转换、文档后处理等高级功能。
选择建议:
- 如果你的应用需求简单,当前使用的 QuestionAnswerAdvisor 已经足够。
- 如果需要查询优化、文档后处理或更灵活的 RAG 流程,考虑切换到 RetrievalAugmentationAdvisor,但需添加相应依赖并调整代码。
更多推荐



所有评论(0)