news 2026/5/11 20:44:26

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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存储层,负责消息 CRUDChatMemoryRepository接口,支持多种存储后端
ChatMemoryAdvisor拦截器,自动处理记忆注入MessageChatMemoryAdvisorVectorStoreChatMemoryAdvisor

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

2.1 内置记忆策略

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

  1. MessageWindowChatMemory(默认)

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

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

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

  2. VectorStoreChatMemory(语义记忆)

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

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

2.2 支持的存储后端
存储类型实现类特点适用场景
内存存储InMemoryChatMemoryRepository基于ConcurrentHashMap,轻量快速开发测试、演示环境
RedisRedisChatMemoryRepository分布式、高性能、支持 TTL生产环境、多实例部署
JDBCJdbcChatMemoryRepository关系型数据库持久化需要长期存储、事务支持
CassandraCassandraChatMemoryRepository分布式 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

已经带有记忆功能了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 20:44:07

如何构建i茅台自动化预约系统:Campus-imaotai完整技术指南

如何构建i茅台自动化预约系统:Campus-imaotai完整技术指南 【免费下载链接】campus-imaotai i茅台app自动预约,每日自动预约,支持docker一键部署(本项目不提供成品,使用的是已淘汰的算法) 项目地址: http…

作者头像 李华
网站建设 2026/5/11 20:43:34

知识库自动化 - 微信文章自动同步与AI编译系统

📅 更新时间: 2026-05-11 | 标签: Python | OpenClaw | sage-wiki项目概述 知识库自动化是一个全自动的微信公众号文章采集与AI知识库编译系统。通过微信机器人采集文章、同步到腾讯云服务器、使用sage-wiki进行AI编译,最终生成Obsidian知识库中的概念图…

作者头像 李华
网站建设 2026/5/11 20:43:19

掌握Palworld存档管理:专业级二进制转JSON工具实战指南

掌握Palworld存档管理:专业级二进制转JSON工具实战指南 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools Palworld存档工具(…

作者头像 李华
网站建设 2026/5/11 20:42:00

从像素到画面:深入解读VESA时序如何驱动1080P高清显示

1. 屏幕显示的基本原理:像素如何组成画面 当你盯着眼前的1080P高清屏幕时,可能不会想到这看似平滑的画面背后藏着怎样的精密运作。实际上,屏幕显示的本质是用时间换空间的艺术。每个静止的画面都由数百万个像素点组成,而动态效果则…

作者头像 李华
网站建设 2026/5/11 20:42:00

Chiplet芯粒技术:从SoC到异构集成的设计范式演进

1. 从SoC到Chiplet:一场必然的范式转移在半导体行业摸爬滚打了十几年,我亲眼见证了“系统级芯片”从一个令人兴奋的前沿概念,变成了如今手机、平板、路由器里随处可见的“标配”。SoC的成功,本质上是摩尔定律黄金时代的产物&#…

作者头像 李华
网站建设 2026/5/11 20:41:27

macOS Big Sur下雷蛇雷云2.0驱动失效的深层解析与kext手动加载指南

1. 雷蛇雷云2.0驱动失效现象解析 最近在macOS Big Sur系统上尝试使用雷蛇鼠标时,发现雷云2.0驱动完全无法正常工作。具体表现为驱动程序始终显示"设备未连接",即使鼠标已经正确插入USB接口。这种情况在升级到Big Sur系统后特别常见&#xff0c…

作者头像 李华