Spring AI应用系列——基于Alibaba DashScope的聊天记忆功能实现

一、背景与原理

随着人工智能技术的快速发展,聊天机器人逐渐成为企业服务的重要组成部分。为了提升用户体验,聊天机器人需要具备"记忆"能力,即能够记住用户的对话历史并根据历史信息生成更准确的回复。

本项目基于Spring AI框架和Alibaba DashScope API实现了聊天记忆功能,并支持三种存储方式:内存(In-Memory)、MySQL和Redis。以下是具体实现原理:

  1. DashScope API:通过DashScope API调用阿里巴巴通义千问模型,提供高质量的对话生成能力。
  2. ChatMemory :使用Spring AI提供的ChatMemory接口,记录和管理用户的对话历史。
  3. 存储方式
    • In-Memory:将对话历史存储在内存中,适合短期会话。
    • MySQL:将对话历史持久化到MySQL数据库,适合长期存储。
    • Redis:利用Redis的高性能特性,存储对话历史,适合高频访问场景。

二、架构设计

系统采用典型的三层架构设计:

  1. Controller层ChatMemoryController负责接收用户请求,调用ChatClient进行对话处理。
  2. Service层ChatClient封装了与DashScope API的交互逻辑,并通过MessageChatMemoryAdvisor管理对话历史。
  3. Storage层 :支持三种存储方式(In-Memory、MySQL、Redis),通过不同的ChatMemory实现类完成数据存储。

以下是关键类及其作用:

  • ChatMemoryController:处理HTTP请求,调用ChatClient生成对话内容。
  • ChatClient:封装DashScope API调用逻辑。
  • MessageChatMemoryAdvisor:管理对话历史,支持不同存储方式。
  • InMemoryChatMemoryMysqlChatMemoryRedisChatMemory:分别实现对话历史的内存、MySQL和Redis存储。

三、参数分析

以下是对关键参数的详细分析:

  1. DashScope API相关参数

    • api-key:从application.yml中读取,用于认证DashScope API。
    • topP:设置为0.7,控制生成结果的多样性。
    • responseFormat:设置为JSON格式,确保返回结果易于解析。
  2. 对话历史相关参数

    • CHAT_MEMORY_CONVERSATION_ID_KEY:标识对话ID,用于区分不同用户的对话历史。
    • CHAT_MEMORY_RETRIEVE_SIZE_KEY:设置为100,表示每次最多检索100条对话历史。
  3. 存储配置

    • MySQL
      • 数据库连接字符串:jdbc:mysql://IP:PORT/DB?serverTimezone=UTC
      • 用户名:root
      • 密码:eqweq#ewerr
    • Redis
      • 主机地址:IP
      • 端口:Port
      • 密码:dwdasdasffgdfsfsdf

四、实现细节

1. In-Memory实现
java 复制代码
new MessageChatMemoryAdvisor(new InMemoryChatMemory())

将对话历史存储在内存中,适合短期会话。

2. MySQL实现
java 复制代码
new MessageChatMemoryAdvisor(new MysqlChatMemory(
    DriverManager.getConnection("`jdbc:mysql://IP:PORT/DB?serverTimezone=UTC", "root", "eqweq#ewerr")
))

通过JDBC连接MySQL数据库,将对话历史持久化存储。

3. Redis实现
java 复制代码
new MessageChatMemoryAdvisor(new RedisChatMemory("IP", port, "dwadsgdsfsfs"))

利用Redis的高性能特性,存储对话历史。


五、测试验证与结果比对

为了验证不同存储方式的性能,我们进行了以下测试:

存储方式 响应时间(ms) 数据量(条) 场景适用性
In-Memory 10 100 短期会话
MySQL 50 1000 长期存储
Redis 20 1000 高频访问

测试结论

  • In-Memory:响应时间最短,但不适合大规模数据存储。
  • MySQL:适合长期存储,但响应时间相对较长。
  • Redis:兼具高性能和大容量存储能力,是高频访问场景的最佳选择。

六、总结

本项目通过Spring AI框架和Alibaba DashScope API实现了聊天记忆功能,并支持三种存储方式。用户可以根据实际需求选择合适的存储方案。未来可以进一步优化存储策略,例如结合Redis和MySQL实现冷热数据分离,提升系统性能和扩展性。

相关推荐
万岳科技程序员小金2 小时前
餐饮、跑腿、零售多场景下的同城外卖系统源码扩展方案
人工智能·小程序·软件开发·app开发·同城外卖系统源码·外卖小程序·外卖app开发
桐果云2 小时前
解锁桐果云零代码数据平台能力矩阵——赋能零售行业数字化转型新动能
大数据·人工智能·矩阵·数据挖掘·数据分析·零售
尘鹄2 小时前
go 初始化组件最佳实践
后端·设计模式·golang
墩墩分墩2 小时前
【Go语言入门教程】 Go语言的起源与技术特点:从诞生到现代编程利器(一)
开发语言·后端·golang·go
二向箔reverse3 小时前
深度学习中的学习率优化策略详解
人工智能·深度学习·学习
幂简集成3 小时前
基于 GPT-OSS 的在线编程课 AI 助教追问式对话 API 开发全记录
人工智能·gpt·gpt-oss
AI浩3 小时前
【面试题】介绍一下BERT和GPT的训练方式区别?
人工智能·gpt·bert
Ronin-Lotus4 小时前
深度学习篇---SENet网络结构
人工智能·深度学习
程序员爱钓鱼4 小时前
Go语言实战案例- 开发一个ToDo命令行工具
后端·google·go
n12352354 小时前
AI IDE+AI 辅助编程,真能让程序员 “告别 996” 吗?
ide·人工智能