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

已经带有记忆功能了。

相关推荐
HackTorjan6 小时前
2026年5月29日:全球首个通用人工智能操作系统正式发布,开启人机协同新纪元
人工智能
刘大猫.7 小时前
智造短剧新引擎:火山引擎上线「火山剧创 1.0」,制作效率提升 80%
人工智能·ai·chatgpt·机器人·大模型·火山引擎·短剧新引擎
AI人工智能+电脑小能手7 小时前
【大白话说Java面试题 第87题】【Mysql篇】第17题:分布式事务的实现原理?
java·数据库·分布式·mysql·面试
红尘散仙7 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
雅菲奥朗7 小时前
企业级 AI 自动化|OpenClaw 龙虾实战与认证
运维·人工智能·自动化·openclaw
HIT_Weston7 小时前
99、【Agent】【OpenCode】task 工具提示词(Slash command)(一)
人工智能·agent·opencode
25 Hz7 小时前
Mind 爱好者时空表征刊 第24期 | 时间结构学习、空间对时间表征的补偿、事件内部的时间扭曲……
人工智能
心中有国也有家7 小时前
GE图引擎深度解析——CANN的计算图优化与执行引擎
人工智能·pytorch·python·学习·numpy
海兰8 小时前
【文字三国志:第一篇】天命重构,大语言模型(LLM)动态生成文言风格的叙事文本的文字游戏
人工智能·游戏·语言模型
来杯@Java8 小时前
图书管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·mybatis·课程设计