Spring AI 2.0 开发Java Agent智能体 - 会话记忆(Chat Memory)

大家好,我是Java1234_小锋老师,最近更新《2027版本 Spring AI 2.0 开发Java Agent智能体 视频教程》专辑,感谢大家支持。

本课程主要介绍和讲解Spring AI 2.0简介,Spring AI 2.0 HelloWorld搭建,Advisors --- 拦截器模式增强AI能力,对话与提示词工程(Prompt),工具调用 (Function Calling / Tools) ,RAG(检索增强生成),MCP(模型 上下文协议)和多模态支持。

等这个Spring AI2.0基础课程录制完成,接下来要发布2个 企业级Java AI实战课程,RAG 企业知识库系统和AI智能客服系统。大家可以点点关注,后面更精彩。

视频教程+课件+源码打包下载:

链接:https://pan.baidu.com/s/1o-zRfndo1HHrS_uFroOiCw?pwd=1234

提取码:0000

Spring AI 2.0 开发Java Agent智能体 - 会话记忆(Chat Memory)

一、Chat Memory 核心概念

1.1 什么是 Chat Memory

大型语言模型 (LLMs) 本质是无状态 的,无法保留历史对话信息。Spring AI 2.0 提供的Chat Memory功能解决了这一问题,它能:

  • 存储历史对话:自动保存用户消息和 AI 响应到记忆仓库

  • 检索历史对话:新请求时自动提取相关历史消息注入当前 Prompt

  • 会话隔离 :通过conversationId区分不同用户 / 会话,确保上下文独立

  • 消息管理:提供灵活策略(如滑动窗口)控制保留哪些历史消息

1.2 核心组件架构
组件 作用 核心接口 / 类
ChatMemory 策略层,决定保留哪些消息 ChatMemory接口,默认实现MessageWindowChatMemory
ChatMemoryRepository 存储层,负责消息 CRUD ChatMemoryRepository接口,支持多种存储后端
ChatMemoryAdvisor 拦截器,自动处理记忆注入 MessageChatMemoryAdvisorVectorStoreChatMemoryAdvisor

二、内置 Chat Memory 类型与存储后端

2.1 内置记忆策略

Spring AI 2.0 提供两种主要记忆类型

  1. MessageWindowChatMemory(默认)

    • 核心机制:维护固定大小消息窗口,超出上限时淘汰最早消息永远保留 system 消息Spring

    • 默认窗口大小:20 条消息Spring

    • 适用场景:大多数简单多轮对话,平衡上下文完整性与 token 消耗

  2. VectorStoreChatMemory(语义记忆)

    • 核心机制:基于向量存储的语义检索,将对话内容向量化后存储,根据语义相似度召回相关历史

    • 适用场景:长对话、需要精准语义匹配的复杂场景

2.2 支持的存储后端
存储类型 实现类 特点 适用场景
内存存储 InMemoryChatMemoryRepository 基于ConcurrentHashMap,轻量快速 开发测试、演示环境
Redis RedisChatMemoryRepository 分布式、高性能、支持 TTL 生产环境、多实例部署
JDBC JdbcChatMemoryRepository 关系型数据库持久化 需要长期存储、事务支持
Cassandra CassandraChatMemoryRepository 分布式 NoSQL,高可用 大规模分布式系统

三、具体实例:构建有记忆的对话应用

我们先演示下没有以及的对话。

请求:http://localhost:8080/ai?question=我是小锋

我们再次请求:http://localhost:8080/ai?question=我是谁?

因为没有会话记忆,所以每次请求访问都是独立的。但是如果我们做聊天机器人,客服机器人,那肯定是不行的,我们需要让大模型记住历史会话上下文章。

我们来实现下吧。

首先在AiConfiguration里定义ChatMemory bean

复制代码
/**
     * 创建一个 ChatMemory 对象,用于存储聊天记录。
     *
     * @return ChatMemory 对象,用于存储聊天记录。
     */
    @Bean
    public ChatMemory chatMemory(){
        return MessageWindowChatMemory.builder()
                .maxMessages(10) // 设置消息窗口大小为 10
                .chatMemoryRepository(new InMemoryChatMemoryRepository()) // 内存存储
                .build();
    }

接着chatClient的advisors里加上chatMemory会话记忆

复制代码
/**
     * 创建一个 ChatClient 对象,用于处理聊天请求。
     *
     * @param model OpenAiChatModel 对象,用于处理聊天请求。
     * @return ChatClient 对象,用于处理聊天请求。
     */
    @Bean
    public ChatClient chatClient(OpenAiChatModel  model,ChatMemory chatMemory){
        return ChatClient
                .builder(model) // 创建 ChatClient 对象,并设置模型为 model
                // .defaultAdvisors(new MySimpleLoggerAdvisor()) // 添加一个 MySimpleLoggerAdvisor,记录请求日志
                .defaultAdvisors(
                        new SimpleLoggerAdvisor(), // 添加一个 SimpleLoggerAdvisor,记录请求日志
                        MessageChatMemoryAdvisor.builder(chatMemory).build() // 添加一个 MessageChatMemoryAdvisor,记录聊天记录
                )
                .build(); // 构建 ChatClient 对象
    }

然后MyAiChatController里加上一个会话ID设置,保证聊天上下文独立。

复制代码
@RequestMapping("/aiplus")
    public String aiplus(String question, String convId) {
        return chatClient.prompt() // 创建一个 Prompt 对象,用于构建聊天请求。
                .user( question) // 设置用户输入的文本。
                .advisors(a->a.param(ChatMemory.CONVERSATION_ID,convId)) // 设置会话 ID
                .call() // 调用 ChatClient 对象的 call() 方法,发送聊天请求给大模型并获取响应。
                .content(); // 获取响应的文本内容。
    }

我们再来测试下:

复制代码
http://localhost:8080/aiplus?question=我是锋哥&convId=001
http://localhost:8080/aiplus?question=我是谁&convId=001

已经带有记忆功能了。

相关推荐
Highcharts.js3 小时前
五大痛点拖慢数据分析平台决策效率:Highchart可视化与AI分析解决方案解析
人工智能·信息可视化·数据分析·数据可视化·highcharts·ai可视化分析
摇滚侠3 小时前
《SpringBoot 3:入门与应用实战》第 15 章 生产级特性 监控指标 Metrics 阅读笔记
java·spring boot·笔记
义嘉泰3 小时前
手腕上的小手电:智能手表怎么把“绿光”变成心率
人工智能·智能手表
Canace3 小时前
AI 生成到 90% 突然断了:你的解决方案是?
前端·人工智能
湘美书院--湘美谈教育3 小时前
AI时代的奥德赛:算法星空,寻找精神归航
大数据·人工智能·深度学习·机器学习·生活
玖石书4 小时前
ASP.NET Core 迁移至 Spring系列:编译生态篇
后端·spring·asp.net
瓦学妹4 小时前
2026亚马逊本土店怎么注册?入驻流程、资料准备与常见问题
大数据·运维·人工智能
弹简特4 小时前
【Java项目-企悦抽】11-用户与认证模块-实现用户登录03(结束登录功能)-完成测试+对接前端+登录拦截器
java·开发语言
YucongCai4 小时前
Opengovernment(智慧城市) v0.0.3 攻防一体的智能体主动网络安全平台:ActiveCybersecurity v0.2
人工智能·web安全·智慧城市
腾讯云大数据4 小时前
从多模态数据处理到模型训练:腾讯云EMR-Ray打通Data+AI全流程
人工智能·云计算·腾讯云·mapreduce·腾讯云大数据