侧边栏壁纸
博主头像
牧云

怀璧慎显,博识谨言。

  • 累计撰写 129 篇文章
  • 累计创建 13 个标签
  • 累计收到 8 条评论

目 录CONTENT

文章目录

聊天消息持久化

秋之牧云
2026-03-16 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

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();
    }
}

0

评论区