
Spring AI 2.1.0 干了一件大事:把社区项目 Spring AI Session 正式收编进主仓库,带来了全新的基于 Session 的会话记忆模型。与此同时,大家熟悉的 ChatMemory API 连同它的一众 Advisor 和实现类被标记为废弃,计划在 Spring AI 3.0.0 中移除。
虽然老 API 现在还能用,但既然迁移成本低得惊人,没有理由等到 3.0 再动手。这篇就带你把一个基于 MessageChatMemoryAdvisor 的老应用迁到新的 Session 体系上。
典型的老代码长这样:
@Bean
ChatClientBuilderCustomizer chatMemoryCustomizer(ChatMemory chatMemory) {
return builder -> builder.defaultAdvisors(
new MessageChatMemoryAdvisor(chatMemory));
}每次调用时通过 ChatMemory.CONVERSATION_ID 参数区分会话:
chatClient.prompt()
.user(message)
.advisors(spec -> spec.param(ChatMemory.CONVERSATION_ID, "DEMO"))
.call();MessageChatMemoryAdvisor 和 MessageWindowChatMemory 在 2.1 里都已被打上 @Deprecated。
把 springAiVersion 升到 2.1.0-RC2,然后新增两个依赖:
implementation 'org.springframework.ai:spring-ai-session-advisor'
implementation 'org.springframework.ai:spring-ai-autoconfigure-model-session'前者提供 Session Advisor 体系(SessionAdvisors、SessionRepository、SessionService),后者负责 Session 记忆的自动装配。
自动装配有个前提:容器里得先有一个 SessionRepository,Spring AI 才能帮你装配出 SessionService。目前官方提供两个实现:
实现 | 说明 |
|---|
InMemorySessionRepository | 内存存储,重启即丢,适合开发和演示 |
|---|
JdbcSessionRepository | 关系型数据库持久化,生产环境的选择 |
|---|
先用内存版跑通:
@Bean
SessionRepository sessionRepository() {
return InMemorySessionRepository.builder().build();
}记住一点:内存版意味着重启后所有会话上下文清空。需要跨重启保留会话的应用,直接上 JDBC 实现。
把原来的 chatMemoryCustomizer 整个换掉:
@Bean
ChatClientBuilderCustomizer chatMemoryCustomizer(
SessionService sessionService) {
return builder -> builder
.defaultAdvisors(
SessionAdvisors.builder(sessionService).build());
}注意 SessionService 不用自己 new——有了上一步的 SessionRepository Bean,自动装配会把它准备好。SessionAdvisors.builder() 产出的 Advisor 组合通过 defaultAdvisors() 挂到 ChatClient 上,对每一次调用生效。
调用侧唯一的改动:不再用 ChatMemory.CONVERSATION_ID,改用 SessionAdvisors.session():
chatClient.prompt()
.user(message)
.advisors(SessionAdvisors.session("DEMO"))
.call();概念上一一对应:conversation ID 换成 session ID,仅此而已。真实项目里这个 ID 通常绑定当前登录用户(甚至可以细化到用户的某个具体会话),千万别学示例里写死。
跑起来后做个经典测试:先告诉模型"我最喜欢的桌游是卡坦岛",隔一轮再问"我说我最喜欢什么桌游?"——能答上来,说明会话记忆已经在工作了。没有记忆机制的话,第二个问题模型根本无从回答。
步骤 | 动作 |
|---|
1 | 升级 Spring AI 到 2.1.0-RC2+ |
|---|
2 | 加 spring-ai-session-advisor + spring-ai-autoconfigure-model-session 两个依赖 |
|---|
3 | 声明 SessionRepository Bean(内存或 JDBC) |
|---|
4 | 用 SessionAdvisors.builder(sessionService) 替换老的 memory Advisor |
|---|
5 | 调用侧从 ChatMemory.CONVERSATION_ID 改为 SessionAdvisors.session(id) |
|---|
四处改动,半天工作量,换来的是跟上下一代 API 的船票。Session 体系的能力不止于替代 ChatMemory——它把"会话"提升为一级概念,后续的会话摘要、跨会话检索等能力都会长在这套地基上。趁早迁,别等 3.0 的破坏性变更找上门。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。