Spring AI 2.0 RAG模块升级:依赖改名、Advisor架构与迁移注意事项
文章摘要
Spring AI 2.0对RAG相关模块进行了重新组织:原来的 spring-ai-advisors-vector-store 已改名为 spring-ai-vector-store-advisor,常用RAG流程继续通过QuestionAnswerAdvisor接入ChatClient,同时保留可自定义的模块化RAG架构。对于从1.1.x升级的项目,除了修改依赖,还需要检查Starter命名、包结构、Advisor注册、向量库自动配置和过滤表达式。本文给出完整迁移清单。
一、最直接的变化:依赖改名
旧依赖:
org.springframework.ai
spring-ai-advisors-vector-store
Spring AI 2.0改为:
org.springframework.ai
spring-ai-vector-store-advisor
如果升级后出现:
QuestionAnswerAdvisor找不到
依赖无法解析
ClassNotFoundException
先检查是否还在使用旧Artifact ID。
二、Starter命名也需要一起检查
Spring AI的新命名规则更加统一。
模型Starter:
spring-ai-starter-model-{provider}
向量库Starter:
spring-ai-starter-vector-store-{store}
例如PGvector:
org.springframework.ai
spring-ai-starter-vector-store-pgvector
旧项目中可能仍使用:
spring-ai-pgvector-store-spring-boot-starter
升级时不要只修改BOM版本,要逐项检查依赖名称。
三、Spring AI的RAG有两种使用方式
1. 开箱即用Advisor
最简单的方式:
ChatResponse response = ChatClient
.builder(chatModel)
.build()
.prompt()
.advisors(
QuestionAnswerAdvisor
.builder(vectorStore)
.build()
)
.user(userText)
.call()
.chatResponse();
QuestionAnswerAdvisor会:
接收用户问题
→ 查询VectorStore
→ 获取相关Document
→ 把上下文加入Prompt
→ 调用模型
适合:
- 基础知识问答;
- 快速原型;
- 单一向量库;
- 简单过滤条件。
2. 模块化RAG Flow
复杂项目需要控制:
- 查询改写;
- 多路检索;
- Metadata过滤;
- Reranker;
- 上下文压缩;
- 多知识库;
- 父子Chunk;
- 检索后评测。
这时可以使用Spring AI的模块化RAG组件,自定义完整流程。
四、不要把QuestionAnswerAdvisor当成完整企业RAG
它解决的是基本链路,不会自动提供:
- 文档版本治理;
- 多租户权限;
- 混合检索;
- Rerank;
- 引用校验;
- 答案忠实度;
- 解析质量门禁;
- 增量更新;
- 数据删除审计。
生产系统通常需要在Advisor前后增加:
TenantAdvisor
QueryRewriteAdvisor
RetrievalAdvisor
CitationAdvisor
EvaluationAdvisor
五、注册Advisor的两种方式
默认注册
@Bean
ChatClient ragChatClient(
ChatClient.Builder builder,
QuestionAnswerAdvisor ragAdvisor
) {
return builder
.defaultAdvisors(ragAdvisor)
.build();
}
对该ChatClient全部请求生效。
单次注册
String answer = chatClient.prompt()
.advisors(
QuestionAnswerAdvisor
.builder(vectorStore)
.build()
)
.user(question)
.call()
.content();
适合按请求选择不同知识库或策略。
常见问题是:
Advisor注册在一个ChatClient
业务调用另一个ChatClient
六、动态过滤条件怎么处理
企业RAG必须按租户和权限过滤。
伪代码:
String filter = "tenant_id == '"
+ safeTenantId + "'"
+ " && status == 'EFFECTIVE'";
SearchRequest request = SearchRequest.builder()
.query(question)
.topK(8)
.filterExpression(filter)
.build();
注意:
- 不要直接拼接未经校验的用户输入;
- tenantId应来自认证上下文;
- 过滤表达式要做转义;
- 服务端仍需执行数据权限;
- 检索日志不要泄露敏感过滤条件。
七、VectorStore自动配置变化
Spring AI 2.0将自动配置拆分得更细,目的是减少不必要依赖和版本冲突。
升级后如果VectorStore Bean不存在,检查:
Starter是否正确
配置前缀是否正确
数据库驱动是否存在
Schema初始化是否完成
EmbeddingModel Bean是否存在
不要直接手工创建多个重复VectorStore Bean,否则可能产生注入歧义。
八、Document与Metadata迁移检查
入库代码:
Document document = new Document(
content,
Map.of(
"document_id", documentId,
"tenant_id", tenantId,
"version", version,
"status", "EFFECTIVE"
)
);
升级时检查:
- Metadata类型是否兼容;
- 主键生成方式;
- ID是否稳定;
- Filter字段是否已建立索引;
- 日期类型是否一致;
- 数字是否被保存为字符串。
九、ETL模块也要同步验证
Spring AI ETL包含:
DocumentReader
DocumentTransformer
DocumentWriter
常见链路:
List documents = reader.get();
List chunks = splitter.apply(documents);
vectorStore.write(chunks);
升级后需要验证:
- PDF Reader依赖;
- Markdown Reader依赖;
- TokenTextSplitter参数;
- Metadata是否复制到Chunk;
- 批量Embedding策略;
- Writer失败重试。
十、TokenTextSplitter中文配置
Spring AI TokenTextSplitter支持自定义标点。
中文场景建议包含:
。
!
?
;
\n
示意:
TokenTextSplitter splitter =
TokenTextSplitter.builder()
.withChunkSize(600)
.withMinChunkSizeChars(200)
.withMinChunkLengthToEmbed(20)
.withKeepSeparator(true)
.withPunctuationMarks(
List.of(
'。',
'!',
'?',
';',
'\n'
)
)
.build();
具体方法签名应以当前2.0.0 API为准。
十一、迁移时建立兼容测试
入库测试
同一文档
→ 旧版本分块
→ 新版本分块
→ 比较数量、内容和Metadata
检索测试
固定问题集
→ 比较Top K
→ 比较排名
→ 比较过滤结果
问答测试
固定检索结果
→ 比较最终答案
→ 比较引用
→ 比较Token
十二、常见升级故障
1. 找不到QuestionAnswerAdvisor
检查新依赖。
2. VectorStore Bean不存在
检查新Starter和配置前缀。
3. 检索为空
检查Embedding模型、维度、Collection和过滤条件。
4. Advisor没有执行
检查调用的ChatClient实例。
5. Metadata过滤失败
检查字段类型和表达式语法。
6. 中文Chunk异常
检查标点和TokenSplitter参数。
十三、推荐迁移流程
固定旧版本依赖
→ 导出黄金测试集
→ 修改BOM与Artifact ID
→ 修复编译错误
→ 验证ETL
→ 验证VectorStore
→ 验证Advisor链
→ 影子检索
→ 灰度上线
不要在没有检索基线的情况下直接升级生产。
总结
Spring AI 2.0 RAG升级的核心不是功能完全重写,而是:
依赖命名统一
+模块拆分更清晰
+Advisor继续承担基础RAG入口
+复杂流程保留模块化扩展能力
从1.1.x迁移时,要同时检查依赖、Starter、Advisor、ETL、VectorStore和Metadata过滤,不能只修改版本号。
延伸阅读
想持续跟踪大模型、RAG、Agent、MCP 与开发者生态的最新变化,欢迎访问 智元界:
https://www.zyentor.com/
智元界将持续分享 AI 热点解读、技术实战、工具推荐与企业落地案例。