首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >ChatMemory 要进坟墓了:Spring AI 2.1 会话记忆迁移实战

ChatMemory 要进坟墓了:Spring AI 2.1 会话记忆迁移实战

原创
作者头像
HELLO程序员
发布于 2026-11-11 17:55:50
发布于 2026-11-11 17:55:50
260
举报

ChatMemory 要进坟墓了:Spring AI 2.1 会话记忆迁移实战

Spring AI 2.1.0 干了一件大事:把社区项目 Spring AI Session 正式收编进主仓库,带来了全新的基于 Session 的会话记忆模型。与此同时,大家熟悉的 ChatMemory API 连同它的一众 Advisor 和实现类被标记为废弃,计划在 Spring AI 3.0.0 中移除。

虽然老 API 现在还能用,但既然迁移成本低得惊人,没有理由等到 3.0 再动手。这篇就带你把一个基于 MessageChatMemoryAdvisor 的老应用迁到新的 Session 体系上。

迁移前的样子

典型的老代码长这样:

代码语言:javascript
复制
@Bean
ChatClientBuilderCustomizer chatMemoryCustomizer(ChatMemory chatMemory) {
    return builder -> builder.defaultAdvisors(
        new MessageChatMemoryAdvisor(chatMemory));
}

每次调用时通过 ChatMemory.CONVERSATION_ID 参数区分会话:

代码语言:javascript
复制
chatClient.prompt()
    .user(message)
    .advisors(spec -> spec.param(ChatMemory.CONVERSATION_ID, "DEMO"))
    .call();

MessageChatMemoryAdvisor 和 MessageWindowChatMemory 在 2.1 里都已被打上 @Deprecated。

第一步:升级依赖

把 springAiVersion 升到 2.1.0-RC2,然后新增两个依赖:

代码语言:javascript
复制
implementation 'org.springframework.ai:spring-ai-session-advisor'
implementation 'org.springframework.ai:spring-ai-autoconfigure-model-session'

前者提供 Session Advisor 体系(SessionAdvisors、SessionRepository、SessionService),后者负责 Session 记忆的自动装配。

第二步:声明一个 SessionRepository

自动装配有个前提:容器里得先有一个 SessionRepository,Spring AI 才能帮你装配出 SessionService。目前官方提供两个实现:

实现

说明

InMemorySessionRepository

内存存储,重启即丢,适合开发和演示

JdbcSessionRepository

关系型数据库持久化,生产环境的选择

先用内存版跑通:

代码语言:javascript
复制
@Bean
SessionRepository sessionRepository() {
    return InMemorySessionRepository.builder().build();
}

记住一点:内存版意味着重启后所有会话上下文清空。需要跨重启保留会话的应用,直接上 JDBC 实现。

第三步:替换 Advisor 配置

把原来的 chatMemoryCustomizer 整个换掉:

代码语言:javascript
复制
@Bean
ChatClientBuilderCustomizer chatMemoryCustomizer(
        SessionService sessionService) {
    return builder -> builder
        .defaultAdvisors(
            SessionAdvisors.builder(sessionService).build());
}

注意 SessionService 不用自己 new——有了上一步的 SessionRepository Bean,自动装配会把它准备好。SessionAdvisors.builder() 产出的 Advisor 组合通过 defaultAdvisors() 挂到 ChatClient 上,对每一次调用生效。

第四步:会话 ID 的写法变了

调用侧唯一的改动:不再用 ChatMemory.CONVERSATION_ID,改用 SessionAdvisors.session():

代码语言:javascript
复制
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 删除。

目录
  • ChatMemory 要进坟墓了:Spring AI 2.1 会话记忆迁移实战
    • 迁移前的样子
    • 第一步:升级依赖
    • 第二步:声明一个 SessionRepository
    • 第三步:替换 Advisor 配置
    • 第四步:会话 ID 的写法变了
    • 验证一下
    • 迁移清单总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档