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.
2.3 KiB
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 表直接查询消息历史
实际需要的修改
- 删除冗余表: 移除
ai_chat_messages_history
- 简化服务: 移除消息同步逻辑,直接使用Spring AI ChatMemory
- 保留会话管理: 只管理会话元数据
结论
您的担心是对的,大部分功能确实是冗余的。Spring AI ChatMemory已经提供了强大的消息存储和记忆功能,我们只需要补充会话元数据管理即可。