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实现冷热数据分离,提升系统性能和扩展性。

相关推荐
AI街潜水的八角1 小时前
图像修复:深度学习实现老照片划痕修复+老照片上色
人工智能·深度学习
HuggingFace3 小时前
Hugging Face 开源 HopeJR 机器臂!今天晚上直播带你深入技术核心
人工智能
SUPER52664 小时前
AI应用服务
人工智能
义薄云天us4 小时前
028_分布式部署架构
人工智能·分布式·架构·claude code
HuggingFace5 小时前
HF Papers 直播| AI for Science 专场
人工智能
机器视觉与AI5 小时前
半导体制造流程深度解析:外观缺陷检测的AI化路径与实践
人工智能·视觉检测·制造
熟悉的新风景6 小时前
springboot项目或其他项目使用@Test测试项目接口配置-spring-boot-starter-test
java·spring boot·后端
批量小王子7 小时前
2025-07-15通过边缘线检测图像里的主体有没有出血
人工智能·opencv·计算机视觉
晴空月明8 小时前
分布式系统高可用性设计 - 监控与日志系统
后端
zyhomepage8 小时前
科技的成就(六十九)
开发语言·网络·人工智能·科技·内容运营