You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
unilife/unilife-server/SIMPLIFIED_CHAT_HISTORY.md

2.3 KiB

简化的AI聊天会话历史方案

现状分析

您的项目已经有了完整的Spring AI ChatMemory + MySQL实现

  • Spring AI自动将消息存储到 SPRING_AI_CHAT_MEMORY
  • 自动会话记忆功能20条消息窗口
  • 消息持久化到MySQL

缺失的功能

Spring AI ChatMemory 专注于消息存储,但缺少:

  • 会话列表管理
  • 会话标题管理
  • 会话创建时间等元数据

建议的简化方案

1. 保留的表结构

只需要一个会话管理表:

-- 会话元数据管理表补充Spring AI ChatMemory
CREATE TABLE IF NOT EXISTS ai_chat_sessions (
    id VARCHAR(64) PRIMARY KEY COMMENT '会话ID',
    user_id BIGINT NULL COMMENT '用户ID可选',
    title VARCHAR(200) NOT NULL DEFAULT '新对话' COMMENT '会话标题',
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    INDEX idx_user_id (user_id),
    INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

2. 删除冗余的表

可以删除:

  • ai_chat_messages_history 表(与 SPRING_AI_CHAT_MEMORY 重复)

3. 简化的服务层

只需要会话元数据管理,消息历史直接从 SPRING_AI_CHAT_MEMORY 查询:

// 获取会话消息历史 - 直接查询Spring AI表
@Override
public Result<AiMessageHistoryVO> getSessionMessages(String sessionId, Integer page, Integer size) {
    // 直接从Spring AI ChatMemory获取
    List<Message> messages = chatMemory.get(sessionId);
    
    // 转换为VO并返回
    // ... 转换逻辑
}

4. 保留的核心功能

  • 会话列表管理
  • 会话标题管理
  • 会话创建/删除
  • 从 SPRING_AI_CHAT_MEMORY 表直接查询消息历史

实际需要的修改

  1. 删除冗余表: 移除 ai_chat_messages_history
  2. 简化服务: 移除消息同步逻辑直接使用Spring AI ChatMemory
  3. 保留会话管理: 只管理会话元数据

结论

您的担心是对的大部分功能确实是冗余的。Spring AI ChatMemory已经提供了强大的消息存储和记忆功能我们只需要补充会话元数据管理即可。