Spring AI 支持的数据库如下:
PostgreSQL
MySQL / MariaDB
SQL Server
HSQLDB
Cassandra
Neo4j 图数据库;
1. Cassandra
时间序列优化: 原生支持时间序列数据模型(聊天记录本质是时间序列),并且内置 TTL (Time-To-Live) 自动清理机制,比如自动清理 3 年前的对话记录;
高并发写入:分布式架构轻松处理海量聊天消息写入(优于关系型数据库),线性扩展能力满足用户量增长;
生产级可靠性:多副本机制保障高可用,自动分区平衡,无单点故障;
与 Spring AI 深度集成:与 Spring AI 兼容性较好,自动建表 (
ai_chat_memory),无需手动 DDL,支持滑动窗口记忆策略 ;
2. Spring AI 整合 Cassandra: 实现聊天消息持久化
2.1. 依赖
<!-- Cassandra -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-chat-memory-repository-cassandra</artifactId>
</dependency>2.2. 配置
键空间命名不要使用 - 连接线,需要使用下划线 _, 否则会报错。
spring:
cassandra:
contact-points: 127.0.0.1 # Cassandra 集群节点地址(可配置多个,用逗号分隔)
port: 9042 # 端口号
local-datacenter: datacenter1 # 必须与集群配置的数据中心名称一致(大小写敏感)
ai:
chat:
memory:
repository:
cassandra:
keyspace: ai_robot # 指定存储聊天记忆的 Keyspace(类似数据库名)
table: t_ai_chat_memory # 表名
time-to-live: 1095d # 数据的自动过期时间(1095天 ≈ 3年)
initialize-schema: true # 自动初始化表结构2.3. 修改 ChatMemory 存储方式
@Resource
private CassandraChatMemoryRepository chatMemoryRepository;@Configuration
public class ChatMemoryConfig {
/**
* 记忆存储,默认内存
*/
// @Resource
// private ChatMemoryRepository chatMemoryRepository;
@Resource
private CassandraChatMemoryRepository chatMemoryRepository;
/**
* 初始化一个 ChatMemory 实例,并注入到 Spring 容器中
* @return
*/
@Bean
public ChatMemory chatMemory() {
return MessageWindowChatMemory.builder()
.maxMessages(50) // 最大消息窗口为 50,默认值为 20
.chatMemoryRepository(chatMemoryRepository) // 记忆存储
.build();
}
}整合到 ChatClient
@Configuration
public class ChatClientConfig {
@Resource
private ChatMemory chatMemory;
/**
* 初始化 ChatClient 客户端
* @param chatModel
* @return
*/
@Bean
public ChatClient chatClient(DeepSeekChatModel chatModel) {
return ChatClient.builder(chatModel)
.defaultSystem("请你扮演一名犬小哈 Java 项目实战专栏的客服人员")
.defaultAdvisors(
new SimpleLoggerAdvisor(), // 添加 Spring AI 内置的日志记录功能
MessageChatMemoryAdvisor.builder(chatMemory).build())
.build();
}
}
评论区