SpringAI基于Mysql jdbc方式存储对话记忆

版本

SpringAI:1.1.6

SpringBoot:3.5.14

JdbcChatMemoryRepository

JdbcChatMemoryRepository是一个内置实现,使用 JDBC 将消息存储在关系数据库中。

下面所有配置完成后,应用会在启动时,会读取内置建表语句,schema-mysql.sql,自动创建一张名为 spring_ai_chat_memory 的表,用于存储对话记录

IDEA中双击shift搜索schema-mysql.sql,就能看到建表语句。

使用

引入依赖

xml 复制代码
 <!-- 引入jdbc -->
 <dependency>
     <groupId>org.springframework.ai</groupId>
     <artifactId>spring-ai-starter-model-chat-memory-repository-jdbc</artifactId>
 </dependency>
 <!-- 引入mysql -->
 <dependency>
     <groupId>com.mysql</groupId>
     <artifactId>mysql-connector-j</artifactId>
     <scope>runtime</scope>
 </dependency>

修改配置

使用的是阿里云百炼平台中的大模型,配置如下

spring.ai.chat.memory.repository.jdbc.initialize-schema有三个选项

  • embedded:默认值,只能用于嵌入式数据库(如 H2、HSQL、Derby 等)
  • always:自动使用内置sql创建表
  • never:不初始化,手动创建自定义表
    spring.ai.chat.memory.repository.jdbc.platform的值,是你的数据库类型,当initialize-schema=always时,springai会根据platform使用对应的schema-{platform}.sql文件建表
groovy 复制代码
spring.ai.openai.chat.api-key=
spring.ai.openai.chat.base-url=https://dashscope.aliyuncs.com/compatible-mode
spring.ai.openai.chat.options.model=deepseek-v4-flash

spring.ai.chat.memory.repository.jdbc.initialize-schema=always 
spring.ai.chat.memory.repository.jdbc.platform=mysql

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/ai_demo
spring.datasource.username=root
spring.datasource.password=1111
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

代码

java 复制代码
package com.cry.chatmemorymysql.controller;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;
import org.springframework.ai.chat.memory.repository.jdbc.JdbcChatMemoryRepository;
import org.springframework.ai.chat.messages.Message;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class ChatMemoryMysqlController {
    private ChatClient chatClient;
    private JdbcChatMemoryRepository chatMemoryRepository;
    public ChatMemoryMysqlController(ChatClient.Builder builder, JdbcChatMemoryRepository chatMemoryRepository) {
        this.chatMemoryRepository = chatMemoryRepository;
        // 创建聊天存储器
        ChatMemory chatMemory = MessageWindowChatMemory.builder()
                .chatMemoryRepository(chatMemoryRepository)
                .maxMessages(5) // 数据库中同一id,最多保存5条
                .build();
        this.chatClient = builder
                .defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build()) // 使用聊天存储器
                .build();
    }

    @GetMapping("/chat")
    public String chat(@RequestParam(value = "message",defaultValue = "你是谁") String message,@RequestParam(value = "chatId",defaultValue = "1") String chatId) {
        return chatClient.prompt(message)
                // 设置会话id
                .advisors(advisorSpec -> advisorSpec.param(ChatMemory.CONVERSATION_ID, chatId))
                .call()
                .content();
    }

    @GetMapping("/chat/list")
    public List<String> chatList() {
        return chatMemoryRepository.findConversationIds();
    }

    @GetMapping("/chat/history")
    public List<Message> chatHistory(@RequestParam(value = "chatId",defaultValue = "1") String chatId) {
        return chatMemoryRepository.findByConversationId(chatId);
    }
}

验证

http://localhost:8080/chat?message=我是ccc&chatId=1
http://localhost:8080/chat?message=我是谁&chatId=1

相关推荐
周航宇JoeZhou5 小时前
JB3-9-SpringAI(二)
java·ai·agent·多智能体·调度·智能体·观察
Tbisnic5 小时前
AI大模型学习第十一天:技术选型、安全防护与金融实战
python·学习·ai·大模型·提示词工程
大白要努力!6 小时前
MySQL 8.0 + Navicat 完整操作指南
数据库·mysql
AI工具挖掘机6 小时前
Codex 桌面版上手:从安装到自己开发首个小游戏,0 基础快速入门,手把手教学
经验分享·ai·ai编程
凉菜凉凉6 小时前
AI时代,被抛弃的前端
前端·ai
云絮.6 小时前
数据库操作
数据库·mysql·算法·oracle
设计师小聂!8 小时前
宝塔 Linux 面板保姆级教程
linux·mysql·开源·运维开发
不吃青椒!9 小时前
LangGraph 流式事件处理:从实战到体系
ai·langchain·状态模式
DS随心转插件9 小时前
AI 导出鸭实测:Markdown TO Word 本地化转换能力深度评测,多角度拆解本地化转换真实表现
人工智能·ai·word·wps·deepseek·ai导出鸭
财经资讯数据_灵砚智能9 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年6月10日
大数据·人工智能·python·ai·信息可视化·自然语言处理·灵砚智能