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

相关推荐
ai小陈9 小时前
PyTorch DataLoader数据加载性能排查:GPU利用率低的实操指南
人工智能·pytorch·python·深度学习·ai·gpu算力
2601_9620780313 小时前
百度双重主要上市9月1日生效,“全栈AI”如何打开估值空间?
百度·ai·双重上市·估值空间·港股通
泡干脆面就番茄16 小时前
MySQL_子查询_分页查询与联合查询详解
数据库·mysql
CaseyWei17 小时前
Harness 架构 Multi‑Agent(多智能体)完整深度解析
人工智能·ai·架构·harness
eaglewgs18 小时前
关于AI书写测试用例,谈一下我的思考
人工智能·测试开发·ai·测试用例·agent·测试经验·agent测试开发
天若有情67318 小时前
Node+MySQL小型全栈笔记项目实战课程分享
数据库·笔记·mysql
知了一笑19 小时前
企业的卷味,组织的AI味
人工智能·ai·ai工作流
icsocket19 小时前
国内测试稳定可靠的AI算力芯片测试座厂家
ai
西索斯coding19 小时前
doubao-seed-2.1-turbo 调用一直 401 怎么办?pro 版同样的 Key 却正常——5 分钟排查定位指南
java·服务器·数据库·ai
俊哥V21 小时前
每日 AI 研究简报 · 2026-09-01
人工智能·ai