基于MySQL的AI对话持久化简单实现——AI 超级智能体
在最新版的Spring AI中,官方提供的JdbcChatMemoryRepository已经可以比较简单的使用了。
依赖
▼text复制代码<properties> <spring-ai.version>1.1.0</spring-ai.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>${spring-ai.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-model-chat-memory-repository-jdbc</artifactId> </dependency>
配置数据库
▼text复制代码spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver # 配置数据源,请替换成您自己的数据库信息 url: jdbc:mysql://localhost:3306/lzx_ai_agent?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: <your password> ai: chat: memory: repository: jdbc: initialize-schema: always
▼text复制代码CREATE DATABASE `lzx_ai_agent` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
▼text复制代码CREATE TABLE IF NOT EXISTS SPRING_AI_CHAT_MEMORY( conversation_id VARCHAR(36) NOT NULL, content TEXT NOT NULL, type VARCHAR(10) NOT NULL, `timestamp` TIMESTAMP NOT NULL, CONSTRAINT TYPE_CHECK CHECK (type IN ('USER', 'ASSISTANT', 'SYSTEM', 'TOOL')) );
LoveApp
▼text复制代码import org.springframework.ai.chat.memory.repository.jdbc.JdbcChatMemoryRepository; @Component public class LoveApp{ public LoveApp(ChatModel dashscopeChatModel, JdbcChatMemoryRepository chatMemoryRepository){ ChatMemory chatMemory = MessageWindowChatMemory.builder() .chatMemoryRepository(chatMemoryRepository) .maxMessages(10) .build(); ChatClient.Builder builder = ChatClient.builder(dashscopeChatModel); chatClient = builder.defaultSystem(SYSTEM_PROMPT) .defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build(), new MyLoggerAdvisor()) .build(); } }
细心的同学会发现,表结构中没用主键ID和元数据信息。这是因为
- 主键ID
- 存储策略 :Spring AI 使用"全量替换"策略 - 每次保存消息时,会先删除该 conversation_id 的所有旧消息,然后插入新消息
- 查询优化 :通过 conversation_id + timestamp 组合可以唯一标识记录
- 简化设计 :避免了复杂的主键管理,适合聊天历史的滑动窗口管理
- 性能考虑 :对于聊天历史这种频繁写入的场景,简化的表结构有助于提高性能
- 元数据
- 通用性 :元数据通常是应用特定的,不同应用有不同的元数据需求
- 灵活性 :Spring AI 提供了扩展机制,允许自定义实现
- 核心功能聚焦 :默认实现专注于核心功能 - 保存和检索消息
- 可扩展性 :通过实现自定义 ChatMemoryRepository 可以添加元数据支持
- 官方态度 根据Spring AI官方文档:
- 默认实现 :提供了基本的持久化功能,满足大多数场景需求
- 扩展支持 :明确支持通过实现 JdbcChatMemoryRepositoryDialect 接口来自定义存储逻辑
- 灵活性 :允许使用自定义的表结构和存储策略
- 如何添加主键和元数据 如果需要添加主键ID和元数据支持,你可以:
- 自定义表结构 :
- 创建包含主键和元数据字段的自定义表
- 使用 spring.ai.chat.memory.repository.jdbc.schema 属性指定自定义脚本
- 扩展实现 :
- 实现自定义的 ChatMemoryRepository
- 继承 JdbcChatMemoryRepository 并扩展功能
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
内容推荐
GitHub 是什么时候被 AI 项目占领的?我翻了 12 年 Trending 榜
1
🔥前端干货|程序员必看,5 段可直接复用代码,面试开发两不误
2
【Nexus 数字中枢】企业协作平台 · 公测通知信息散落各处、审批流程卡壳、跨部门协作像在玩传声筒?Nexus 来了——一个真正把「简单留给用户、复杂交给系统」的统一工作入口。🔥 我们解决什么问题?痛点一:信息孤岛。IM 在一个 App,文档在另一个,审批又跳到第三个,一天切换几十次。 痛点二:体验恶化。功能堆砌但每个都半成品,用起来比不用还累。 痛点三:管理内卷。考勤打卡要开三个系统,流程审
2
DeepSeek Harness
1
在OD待了两年,我成功跳槽大厂
5
作者分享
Day 2
✅ 今天做了:
1. AI超级智能体项目做完了AI应用的后端接口,并用Vibe coding的方式生成了前端页面,并成功跑通。
⏰ 明天计划:明天写写论文吧
1
AI超级智能体——AI恋爱大师应用后端开发
3
Day 1
✅ 今天做了:学习项目AI超级智能体
- 编写了自定义违禁词校验Advisor
- 编写了一套简单的包含变量的 Prompt 模板,并保存为资源文件,从文件加载模板
- 用阿里云百炼平台的官方SDK开发了一个简单的多模态对话助手,能够让AI 解释图片
⏰ 明天计划:完成 AI 恋爱大师应用的开发
📚 今日感悟:写项目不能只跟着敲一遍,要多些自己的思考,多看官方参考文档和代码源码,看不懂可以问ai,要勤记录
3
AI 超级智能体项目——Prompt模板实现
3
AI 超级智能体项目——自定义违禁词校验Advisor
3
