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

SpringAI实现多用户记忆隔离

核心需求拆解​

首先得明确什么是 “记忆隔离”。在对话系统里,这意味着:​

  • 用户 A 的历史对话不能被用户 B 获取​
  • 同一用户的多轮对话必须保持上下文连贯​

技术选型思路​

SpringAI 本身提供了对话记忆(ChatMemory),如果不用这个的话就得手动维护一轮对话中上下文内容,会非常麻烦,ChatMemory实际上内部也是封装了一个map,这个map大致就是Map<用户id,List<消息>>这样子的结构,通过这个id进行用户的记忆隔离。本文先用基于内存的方式实现
在这里插入图片描述

实现步骤详解

1.导入ChatMemory所用到的包,使用ChatMemoryAutoConfigure配置类

 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-autoconfigure-model-chat-memory</artifactId></dependency>

2.在构造出ChatClient加上ChatMemory的配置

ChatClient chatClient = ChatClient.builder(dashScopeChatModel)//chatMemory专门提供存储记录的功能.defaultAdvisors(PromptChatMemoryAdvisor.builder(chatMemory).build()).defaultOptions(ChatOptions.builder().temperature(0.1).build()).build();

3.在Promt设置用户id

 String content = chatClient.prompt().user("我是路飞").advisors(pcm -> {pcm.param(ChatMemory.CONVERSATION_ID, userId1);}).call().content();

ChatMemory.CONVERSATION_ID是一个key的标识 通过这个标识来确定是哪个用户
在这里插入图片描述

效果展示

在这里插入图片描述

完整代码

@RestController
public class IsolationController {@Autowiredprivate DashScopeChatModel dashScopeChatModel;@Autowiredprivate ChatMemory chatMemory;@GetMapping("/ci")public void ConversationIsolation() {//假设有两个用户idString userId1="userId1";String userId2="userId2";ChatClient chatClient = ChatClient.builder(dashScopeChatModel)//chatMemory专门提供存储记录的功能.defaultAdvisors(PromptChatMemoryAdvisor.builder(chatMemory).build()).defaultOptions(ChatOptions.builder().temperature(0.1).build()).build();String content = chatClient.prompt().user("我是路飞").advisors(pcm -> {pcm.param(ChatMemory.CONVERSATION_ID, userId1);}).call().content();System.out.println(content);System.out.println("-------------------------------------------我是分割线---------------------------------------");String content1 = chatClient.prompt().user("我是谁???").advisors(pcm -> {pcm.param(ChatMemory.CONVERSATION_ID, userId1);}).call().content();System.out.println(content1);System.out.println("-------------------------------------------我是分割线---------------------------------------");String content2 = chatClient.prompt().user("我是谁???").advisors(pcm -> {pcm.param(ChatMemory.CONVERSATION_ID, userId2);}).call().content();System.out.println(content2);}}
http://www.dtcms.com/a/322060.html

相关文章:

  • 【SpringAI】9.创建本地mcp服务(演示通过mcp实现联网搜索)
  • Git Commit 命令详解:版本控制的核心操作
  • $QAXHoneypot是什么文件夹
  • 2025 蓝桥杯C/C++国B 部分题解
  • DAY34打卡
  • GDB 调试全方位指南:从入门到精通
  • try-catch-finally
  • 3-防火墙
  • 【JAVA EE初阶】多线程(进阶)
  • linux 一次性查看所有docker容器网络模式和端口映射
  • 打破枷锁:Python GIL下的并发突围之路
  • 两个函数 quantize() 和 dequantize() 可用于对不同的位数进行量化实验
  • 睿抗开发者大赛国赛-24
  • 【深度学习】动手深度学习PyTorch版——安装书本附带的环境和代码(Windows11)
  • 【实证分析】地区市场公平竞争程度数据集-含do代码(2012-2024年)
  • JAVA接口请求测试及调用
  • 直播美颜SDK快速上手指南:从API调用到美白滤镜效果调优
  • Godot ------ 制作属于自己的卡牌
  • 从伪造的验证码到远程攻击工具 (RAT):2025 年网络欺骗威胁趋势
  • 同一局域网下,vmwear为啥xshell连不上,ssh也安装了
  • 加密流量论文复现:《Detecting DNS over HTTPS based data exfiltration》(下)
  • 【2025】AutoDock最新保姆级安装教程(附安装包+永久使用方法)
  • 项目历程—画图板
  • C语言学习笔记——编译和链接
  • Vue 自定义水印指令实现方案解析
  • ClickHouse集群部署实践---3分片2副本集群
  • 主成分分析加强版:MP-PCA
  • fio文件读写io带宽测试工具
  • 从零构建TransformerP2-新闻分类Demo
  • Spring AI 系列之三十九 - Spring AI Alibaba-集成百炼知识库