当前位置: 首页 > article >正文

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?pwd1234提取码0000Spring 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接口默认实现MessageWindowChatMemoryChatMemoryRepository存储层负责消息 CRUDChatMemoryRepository接口支持多种存储后端ChatMemoryAdvisor拦截器自动处理记忆注入MessageChatMemoryAdvisor和VectorStoreChatMemoryAdvisor二、内置 Chat Memory 类型与存储后端2.1 内置记忆策略Spring AI 2.0 提供两种主要记忆类型MessageWindowChatMemory默认核心机制维护固定大小消息窗口超出上限时淘汰最早消息永远保留 system 消息Spring默认窗口大小20 条消息Spring适用场景大多数简单多轮对话平衡上下文完整性与 token 消耗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我是锋哥convId001 http://localhost:8080/aiplus?question我是谁convId001已经带有记忆功能了。

相关文章:

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 — 拦截器模式…...

手把手教你排查和修复Gradle Daemon启动失败的NoClassDefFoundError

深度解析Gradle Daemon启动失败的NoClassDefFoundError排查方法论 当你正专注于开发进度,突然在终端看到一行刺眼的红色错误提示:"Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7",Gradle构建进程戛然而止。这…...

如何快速掌握ComfyUI图像修复插件:终极完整使用指南

如何快速掌握ComfyUI图像修复插件:终极完整使用指南 【免费下载链接】comfyui-inpaint-nodes Nodes for better inpainting with ComfyUI: Fooocus inpaint model for SDXL, LaMa, MAT, and various other tools for pre-filling inpaint & outpaint areas. 项…...

Honey Select 2汉化补丁:5分钟打造你的完美游戏体验

Honey Select 2汉化补丁:5分钟打造你的完美游戏体验 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为《Honey Select 2》的语言障碍而烦恼吗&a…...

暗黑破坏神2存档编辑器:3步掌握d2s-editor的终极修改指南

暗黑破坏神2存档编辑器:3步掌握d2s-editor的终极修改指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 还在为暗黑破坏神2中无尽刷装备而烦恼吗?想快速体验不同职业的build却不想花费数百小时&#xff…...

Cadence焊盘绘制实战:从零到一构建PCB封装基石

1. 为什么焊盘设计是PCB封装的基石 刚入行硬件设计那会儿,我总以为画封装就是照着尺寸描边。直到有次量产时发现整批QFN芯片虚焊,才明白焊盘设计才是封装可靠性的命门。Cadence的分离式设计哲学——将焊盘(Padstack)与封装&#x…...

从玩具车到智能体:用STC89C52给小车装上‘眼睛’和‘触角’的传感器融合实战

从玩具车到智能体:STC89C52多传感器融合的决策系统设计 当一辆普通的玩具车被赋予环境感知能力,它便开始了向智能体的进化。在这个项目中,我们使用STC89C52单片机作为"大脑",通过超声波模块和漫反射光电传感器构建了一…...

Simulink进阶:用S-Function Builder封装你的C语言电机控制算法(以MTPA为例)

Simulink进阶:用S-Function Builder封装C语言电机控制算法实战指南 在电机控制领域,算法验证环节常常面临一个关键矛盾:DSP嵌入式代码的高效性与Simulink系统级仿真的可视化优势如何兼得?我曾参与过一个永磁同步电机控制项目&…...

暗黑破坏神2存档编辑器:5分钟掌握你的游戏命运

暗黑破坏神2存档编辑器:5分钟掌握你的游戏命运 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 还在为暗黑破坏神2的重复刷怪而烦恼吗?想快速体验各种强力build却不想花费数百小时练级?d2s-edi…...

DSP+FPGA异构架构在实时信号处理中的应用与优化

1. 实时信号处理系统架构解析在工业自动化、医疗影像和通信系统中,对信号处理实时性要求极高的场景比比皆是。传统纯软件方案往往受限于CPU的串行处理特性,难以满足严格的时序要求。这正是DSPFPGA异构架构大显身手的领域——我曾参与过多个类似项目&…...

航模老鸟的‘省钱’秘籍:一块BB响如何守护你的多块锂电池(附设置误区避坑)

航模电池管理的低成本智慧:BB响的进阶使用策略 在航模和无人机领域,电池管理一直是玩家们关注的焦点。对于拥有多块电池的资深爱好者或小型工作室来说,如何在保证安全的前提下优化成本,是一个值得深入探讨的话题。传统做法是为每块…...

深入理解 Tool Use 机制:AI Agent Harness Engineering 如何调用外部工具

深入理解 Tool Use 机制:AI Agent Harness Engineering 如何调用外部工具 引言 背景介绍 相信所有使用过大模型的开发者都遇到过这些典型痛点:问ChatGPT“今天北京的气温是多少”,它会告诉你“我的知识截止到2023年10月,无法提供实时天气信息”;让它计算“12345.67 * 9…...

从SPICE到Q-SPICE:四阶累积量如何重塑阵列信号处理的超分辨能力

1. 从SPICE到Q-SPICE:为什么我们需要四阶累积量? 我第一次接触SPICE算法是在处理雷达信号的时候。当时团队遇到一个头疼的问题:在强噪声环境下,传统算法就像近视眼观察星空,明明知道那里有信号,却怎么也分辨…...

从零搭建生产级LLM API服务:架构设计、部署与性能调优实战

1. 项目概述与核心价值 最近在折腾大语言模型本地部署和API服务搭建的朋友,估计都绕不开一个词:文档。不是模型本身的论文,而是那些能把复杂技术栈串起来、让你从“能跑起来”到“能稳定用起来”的操作指南。我关注到 GitHub 上一个名为 var…...

从零构建现代化个人作品集网站:技术选型、架构设计与性能优化实战

1. 项目概述与核心价值 最近在GitHub上看到一个挺有意思的项目,叫“YasirAwan4831/arch-technologies-internship-task-1-portfolio-website”。光看这个仓库名,信息量其实不小。这明显是一个实习生的任务项目,来自一家叫“Arch Technologies…...

面试过程中被问懵

高并发内存池中基数数相比哈希表差别,优势在哪相比传统的哈希表(Hash Table),基数树在内存管理这种特定场景下具有压倒性的优势。哈希表(哈希表)逻辑:通过哈希函数将 转换为数组下标。PageID锁定…...

用AI写论文怎么不被判AI?写作prompt+降AI工具双层防御攻略!

用AI写论文怎么不被判AI?写作prompt降AI工具双层防御攻略! 用 AI 写论文最稳的姿势是「双层防御」——写作端用降 AI 提示词预防(0 成本但有能力上限) 写完用降 AI 工具兜底(4.8 元/千字双降到位)。 这两…...

HsMod终极指南:55项功能全面优化炉石传说游戏体验的完整方案

HsMod终极指南:55项功能全面优化炉石传说游戏体验的完整方案 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一款基于BepInEx框架开发的炉石传说模改插件,为…...

Systemback不只是备份:手把手教你修复Ubuntu启动项(GRUB)和fstab文件

Systemback系统救援实战:从GRUB修复到fstab配置急救指南 当Ubuntu系统突然拒绝启动,屏幕上只剩下闪烁的光标或是令人心碎的"GRUB rescue>"提示符时,大多数用户的第一反应往往是重装系统。但你可能不知道,Systemback这…...

怎样从零构建高性能Voron 2.4 3D打印机:5个专业技巧全解析

怎样从零构建高性能Voron 2.4 3D打印机:5个专业技巧全解析 【免费下载链接】Voron-2 Voron 2 CoreXY 3D Printer design 项目地址: https://gitcode.com/gh_mirrors/vo/Voron-2 Voron 2.4是一款开源的CoreXY高速3D打印机,以其卓越的打印质量和专业…...

C++项目集成Tesseract 5.x踩坑实录:从编译选项到内存管理的完整避坑指南

C项目集成Tesseract 5.x踩坑实录:从编译选项到内存管理的完整避坑指南 在计算机视觉和文档处理领域,Tesseract OCR引擎以其开源免费、多语言支持和较高的识别准确率,成为众多C项目的首选集成方案。然而,从源码编译到生产环境部署&…...

Ubuntu16.04高效桌面管理全攻略:多工作区、分屏与终端Terminator进阶技巧

1. Ubuntu16.04多工作区高效管理 刚接触Ubuntu时,最让我惊喜的功能就是多工作区。这个功能相当于给你的电脑桌面"扩容",把不同任务分散到不同虚拟桌面,再也不用在一堆窗口里来回切换了。在Ubuntu16.04上设置多工作区特别简单&#…...

Qt WebEngine(02):从架构到实战,构建现代桌面Web混合应用

1. Qt WebEngine架构解析:为什么它适合桌面混合开发 第一次接触Qt WebEngine时,我正为一个工业控制面板项目头疼——需要同时展示实时设备数据和远程监控页面。传统方案要么用浏览器插件(兼容性噩梦),要么自己实现HTTP…...

别再傻傻分不清了!VB、VBS、VBA到底该用哪个?从Excel自动化到网页脚本的实战选择指南

VB、VBS与VBA实战指南:从Excel自动化到系统脚本的精准选择 每次打开Excel准备处理数据时,你是否纠结过该用VBA还是VBS?当需要批量重命名文件时,是否犹豫过VB和VBS哪个更高效?这三种看似相似的"VB系"语言&am…...

DIY焊台实战:用STM32F070F6P6的Encoder模式搞定EC11编码器(附完整CubeMX配置)

DIY焊台实战:用STM32F070F6P6的Encoder模式搞定EC11编码器(附完整CubeMX配置) 在电子DIY的世界里,焊台是每个硬件爱好者的必备工具。而一个精准可控的T12焊台,不仅能提升焊接效率,更能让整个DIY过程充满乐趣…...

Betaflight飞行控制固件:5分钟快速上手指南与完整配置教程

Betaflight飞行控制固件:5分钟快速上手指南与完整配置教程 【免费下载链接】betaflight Open Source Flight Controller Firmware 项目地址: https://gitcode.com/gh_mirrors/be/betaflight 还在为穿越机飞行不稳定而烦恼吗?🤔 想体验…...

eFuse 的核心作用

它触及了设备安全性的核心机制——eFuse。 简而言之:一台已经烧录(blown)了 eFuse 的设备,其安全机制与未烧录 eFuse 的设备有本质区别,你之前在非 eFuse 设备上成功的代码修改(强制 check_key 返回 0)很可能在烧录了 eFuse 的设备上无效。 以下是详细解释: eFuse 的…...

从寄存器到库函数:手把手拆解STM32的RCC时钟树(以F103C8T6为例)

从寄存器到库函数:手把手拆解STM32的RCC时钟树(以F103C8T6为例) 在嵌入式开发领域,STM32系列微控制器因其出色的性能和丰富的外设资源而广受欢迎。然而,对于许多开发者来说,STM32的时钟系统(RCC…...

用PyTorch复现DKT模型:从Assistment数据集处理到LSTM训练全流程(附完整代码)

用PyTorch构建DKT模型:从数据预处理到LSTM实战全解析 在教育技术领域,追踪学生知识掌握程度一直是个核心挑战。想象一下,当学生在在线学习平台上完成一系列数学题时,系统如何预测他们下一步可能遇到的困难?这正是深度知…...

OpenClawBox:构建统一AI网关,实现多模型智能路由与成本优化

1. 项目概述:从零到一,打造你的个人AI路由中枢 如果你和我一样,在深度使用各类大语言模型(LLM)时,常常陷入一种甜蜜的烦恼:ChatGPT-4o的推理能力无与伦比,但价格不菲;Cl…...