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

相关推荐
只是甲5 小时前
Text2SQL 系列博客 02:技术原理深度剖析 - 从自然语言到 SQL 的完整链路
人工智能·text2sql·nl2sql·ai agent·自助数据分析·data agent·agentic 数据洞察
懷淰メ5 小时前
【AI赋能】基于PyQt+YOLO+DeepSeek水上漂浮物检测系统(详细介绍)
人工智能·yolo·目标检测·计算机视觉·pyqt·漂浮物·水上漂浮物
EQUINOX15 小时前
【论文精读】| CLIP精读
大数据·人工智能
PC2005-cloud5 小时前
博文已索引但不展示:一次 Bing SEO 问题排查记录
服务器·人工智能
weixin_408099675 小时前
2026 图片去文字 API 实战:AI一键去除图片文字(附 Python / Java / PHP / JS 完整代码)
人工智能·api接口·图片去水印·石榴智能·ai图像修复·图片去文字
greenbbLV5 小时前
2026节日慰问品政策解读:合规标准升级与福利行业新趋势
人工智能·节日
前端工作日常6 小时前
我学习到的Java 的 Service 分层:itf 和 impl 到底是什么?
java·后端
奈斯先生Vector6 小时前
告别工具碎片化:基于 Nano Banana 全模态 AI 聚合架构搭建“文本-图像-视频”自动化协同生产线
运维·数据库·人工智能·架构·自动化·aigc·音视频
领麦微红外6 小时前
国产MEMS红外测温传感器:传感器+算法+产品级出厂标定一站式交付模式深度解读
人工智能·硬件工程·产品经理
mingo_敏6 小时前
DeepAgents : 检索(Retrieval)
人工智能·深度学习·langchain