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

langchain4j集成QWen、Redis聊天记忆持久化

        langchain4j实现聊天记忆默认是基于进程内存的方式,InMemoryChatMemoryStore是具体的实现了,是将聊天记录到一个map中,如果用户大的话,会造成内存溢出以及数据安全问题。位了解决这个问题 langchain4提供了ChatMemoryStore接口,让开发者可以灵活的选择存储策略,常用的可以使用mysql、redis、mongodb等,本文以redis为例,集成百炼平台通义千问实现大模型聊天记忆持久化。

 一、引入依赖

       具体详情可参考官网

https://docs.langchain4j.dev/integrations/language-models/dashscope
    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-redis', version: '3.4.0'// langchain4j AiService整合spring bootimplementation group: 'dev.langchain4j', name: 'langchain4j-spring-boot-starter', version: '1.0.0-beta4'// langchain4j整合千问dashscopeimplementation group: 'dev.langchain4j', name: 'langchain4j-community-dashscope-spring-boot-starter', version: '1.0.0-beta4'

          yaml配置

langchain4j:## https://docs.langchain4j.dev/integrations/language-models/dashscopecommunity:dashscope:chat-model:api-key: 百炼平台申请model-name: qwen-plusspring:data:redis:host: server200port: 6379database: 3

二、持久化配置

@Configuration
public class ChatMemoryConf {/*** 聊天记录持久化存储到redis中* @param redisTemplate* @return*/public ChatMemoryStore chatMemoryStore(RedisTemplate<String,String>  redisTemplate){return  new ChatMemoryStore(){@Overridepublic List<ChatMessage> getMessages(Object memoryId) {String value = redisTemplate.opsForValue().get("chat:" + memoryId.toString());if(value == null || value.isEmpty()){return List.of();}return ChatMessageDeserializer.messagesFromJson(value);}@Overridepublic void updateMessages(Object memoryId, List<ChatMessage> list) {String messages = ChatMessageSerializer.messagesToJson(list);redisTemplate.opsForValue().set("chat:" + memoryId.toString(), messages);}@Overridepublic void deleteMessages(Object memoryId) {redisTemplate.delete("chat:" + memoryId.toString());}};}@Beanpublic ChatMemoryProvider chatMemoryProvider(RedisTemplate<String,String>  redisTemplate){return memoryId -> MessageWindowChatMemory.builder().maxMessages(10).id(memoryId).chatMemoryStore(chatMemoryStore(redisTemplate)).build();}}

三、创建AiService代理

       AiService的具体功能,可以看官网(https://docs.langchain4j.dev/tutorials/ai-services),上面有很详细的解释和示例

@AiService
public interface DashScopeAssistant {@SystemMessage("Answer using slang")String chat(@MemoryId String  chatId, @UserMessage  String userMessage);}

@Service
public class DashScopeChatMemoryService {private final static Logger LOGGER = LoggerFactory.getLogger(DashScopeChatMemoryService.class);private final DashScopeAssistant dashScopeAssistant;@Autowiredpublic DashScopeChatMemoryService(QwenChatModel qwenChatModel,ChatMemoryProvider chatMemoryProvider) {dashScopeAssistant =  AiServices.builder(DashScopeAssistant.class).chatMemoryProvider(chatMemoryProvider).chatModel(qwenChatModel).build();}public String persistentChat(String chatId, String userMessage){String chat = dashScopeAssistant.chat(chatId, userMessage);LOGGER.info("persistent chat output : {}" ,chat);return chat;}
}

 四、测试持久化

chatMemoryService.persistentChat("101", "我是赵光义");
chatMemoryService.persistentChat("101", "我是北宋的第二位皇帝,在高粱河被辽国打败了");
chatMemoryService.persistentChat("101", "你知道为为什么叫车神吗?");

    通过断点观察,数据已经成功存入redis


 

 

http://www.xdnf.cn/news/407377.html

相关文章:

  • 【android bluetooth 案例分析 03】【PTS 测试 】【PBAP/PCE/SGSIT/SERR/BV-01-C】
  • 右值和移动
  • 部署Superset BI(六)Superset 的主机安装
  • 文件上传总结
  • Redis——达人探店
  • CSS3 遮罩
  • HTML5 中实现盒子水平垂直居中的方法
  • 【启动盘制作】macbook 制作windows启动盘,重装 Windows 的详细教程
  • C++:公有,保护及私有继承
  • 数据结构-树(1)
  • 硬件设备基础
  • 豆瓣电影Top250数据工程实践:从爬虫到智能存储的技术演进(含完整代码)
  • Mysql使用PXC实现高可用
  • js 字符串中的特殊字符全部替换成定义对象里面key对应的value值(进阶篇)
  • Python60日基础学习打卡D12【虫豸版】
  • 如何使用 React Hooks 替代类组件的生命周期方法?
  • Linux服务器连接SSH工具FinalShell安装使用支持Linux文件上传下载
  • (自用)Java学习-5.8(总结,springboot)
  • 【合新通信】无人机天线拉远RFOF(射频光纤传输)解决方案
  • upload-labs通关笔记-第01关 文件上传之前端绕过(3种渗透方法)
  • 浙江大学 deepseek 公开课 第三季 第3期 - 陈喜群 教授 (附PPT下载) by 突破信息差
  • Linux笔记---信号(上)
  • SWMM在城市排水防涝规划中的实战应用:模型校准、情景模拟与工程决策
  • Linux进程10-有名管道概述、创建、读写操作、两个管道进程间通信、读写规律(只读、只写、读写区别)、设置阻塞/非阻塞
  • WordPress 网站上的 jpg、png 和 WebP 图片插件
  • 请解释 React Native 的新架构(Fabric 和 TurboModules)与旧架构的主要区别
  • 「光域」系列激光测距传感器:以光为尺,重构空间认知边界
  • 【华为HCIP | 华为数通工程师】821—多选解析—第二十二页
  • 详解 IRC协议 及客户端工具 WeeChat 的使用
  • OpenCV进阶操作:光流估计