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

Java的SpringAI+Deepseek大模型实战-会话记忆【三】

文章目录

  • 背景
  • 项目环境
  • 实现步骤
    • 第一步、定义会话存储方式
      • 方式一、定义记忆存储ChatMemory
      • 方式二、注入记忆存储ChatMemory
    • 第二步、配置会话记忆
      • 方式一、老版本实现
      • 方式二、新版本实现
    • 第三步、添加会话ID
  • 异常处理
    • 1、InMemoryChatMemory 无法解析

背景

前两期搭建起大模型对话的框架,如何进行会话记忆

项目环境

Spring Ai 版本:1.0.0

实现步骤

第一步、定义会话存储方式

在配置类CommomConfiguration中定义记忆存储的方式,根据版本不同,可使用。

方式一、定义记忆存储ChatMemory

定义ChatMemory,并添加 Advisors
适用于【SpringAi 1.0.0.0 M6】

// 记忆存储的方式
@Bean
public ChatMemory chatMemory(){return new InMemoryChatMemory();
}
// 添加会话记忆
@Bean
public ChatClient chatClient(OllamaChatModel model,ChatMemory chatMemory){return ChatClient.builder(model).defaultSystem("你是一个可爱热心的智能助手,你的名字叫小爱,请以小爱的口吻回答问题").defaultAdvisors(new SimpleLoggerAdvisor(),new MessageChatMemoryAdvisor(chatMemory)).build();
}

方式二、注入记忆存储ChatMemory

注入ChatMemory,并添加 Advisors
适用于【SpringAi 1.0.0.0及以上版本】

// SpringAi 1.0.0 注入==ChatMemory==
@Autowired
private ChatMemory chatMemory;@Bean
public ChatClient chatClient(OllamaChatModel model){return ChatClient.builder(model).defaultSystem("你是一个可爱热心的智能助手,你的名字叫小爱,请以小爱的口吻回答问题").defaultAdvisors(new SimpleLoggerAdvisor(),MessageChatMemoryAdvisor.builder(chatMemory).build()).build();
}

第二步、配置会话记忆

方式一、老版本实现

@RequestMapping(value = "/chatting",produces = "text/html;charset=utf-8")public Flux<String> chatting(String str,String chatId){return chatClient.prompt().user(str).advisors(aa -> aa.param(AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY,chatId)).stream().content();}

方式二、新版本实现

import static org.springframework.ai.chat.memory.ChatMemory.CONVERSATION_ID;@RequestMapping(value = "/chatting",produces = "text/html;charset=utf-8")public Flux<String> chatting(String str,String chatId){return chatClient.prompt().user(str).advisors(aa -> aa.param(CONVERSATION_ID,chatId)).stream().content();}

在这里插入图片描述

第三步、添加会话ID

异常处理

1、InMemoryChatMemory 无法解析

原因:SpringAi 1.0.0 版本移除InMemoryChatMemory
直接注入

import org.springframework.ai.chat.memory.ChatMemory;@Autowired
private ChatMemory chatMemory;
http://www.lqws.cn/news/603991.html

相关文章:

  • Kotlin Data包含ByteArray类型
  • 【RTSP从零实践】6、实现最简单的同时传输H264、AAC的RTSP服务器
  • 【记录】基于 C++ 和 Winsock 的简单 TCP 通信实现
  • 基于[coze][dify]搭建一个智能体工作流,使用第三方插件抓取热门视频数据,自动存入在线表格
  • Node.js-http模块
  • 解锁医疗AI密码:医疗人工智能专业大学四年学习路径
  • 将大仓库拆分为多个小仓库
  • URL时间戳参数深度解析:缓存破坏与前端优化的前世今生
  • Linux缓存调优指南:提升服务器性能的关键策略
  • opencv基础的图像操作
  • 图像二值化方法及 Python OpenCV 实现
  • 【分明集合】特征函数、关系与运算
  • 【1.6 漫画数据库设计实战 - 从零开始设计高性能数据库】
  • 【格与代数系统】格与哈斯图
  • Instruct-GPT中强化学习(RL)训练部分详解
  • 电机控制的一些笔记
  • uniapp选择相册
  • 【读代码】百度开源大模型:ERNIE项目解析
  • web开发,旅游景点管理系统推荐算法版本demo,基于asp.net,mvc,c#,sql server
  • 【算法】动态规划 斐波那契类型: 740. 删除并获得点数
  • [面试] 手写题-防抖,节流
  • Vue 安装使用教程
  • 小白成长之路-Mysql数据库基础(二)
  • uniapp内置蓝牙打印
  • jQuery UI 安装使用教程
  • Leetcode力扣解题记录--第49题(map)
  • 电源芯片之DCDC初探索ING
  • 数据结构:递归:组合数(Combination formula)
  • 深度学习常见的激活函数
  • 2025年7月最新英雄联盟战绩自动查询工具