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

相关推荐
Re2752 小时前
数据库里的「暗锁」:逻辑外键为什么悄悄流行起来?
后端
心动啊1212 小时前
机器学习概念2
人工智能·机器学习
港港胡说2 小时前
机器学习(西瓜书)学习——绪论
人工智能·学习·机器学习
LeeZhao@2 小时前
【AGI】GPT-5:博士级AI助手的全面进化与协作智能时代的黎明
人工智能·gpt·agi
深圳UMI2 小时前
AI模型设计基础入门
大数据·人工智能
白雪讲堂3 小时前
【GEO从入门到精通】生成式引擎与其他 AI 技术的关系
大数据·人工智能·数据分析·智能电视·geo
魔力之心3 小时前
actuary notes[1]
人工智能·概率
Fine姐4 小时前
数据挖掘2.3-2.5:梯度,梯度下降以及凸性
人工智能·数据挖掘
寻月隐君4 小时前
Rust 实战:从零构建一个多线程 Web 服务器
后端·rust·github