|
|
# 简化的AI聊天会话历史方案
|
|
|
|
|
|
## 现状分析
|
|
|
|
|
|
您的项目已经有了完整的Spring AI ChatMemory + MySQL实现:
|
|
|
- ✅ Spring AI自动将消息存储到 `SPRING_AI_CHAT_MEMORY` 表
|
|
|
- ✅ 自动会话记忆功能(20条消息窗口)
|
|
|
- ✅ 消息持久化到MySQL
|
|
|
|
|
|
## 缺失的功能
|
|
|
|
|
|
Spring AI ChatMemory 专注于消息存储,但缺少:
|
|
|
- ❌ 会话列表管理
|
|
|
- ❌ 会话标题管理
|
|
|
- ❌ 会话创建时间等元数据
|
|
|
|
|
|
## 建议的简化方案
|
|
|
|
|
|
### 1. 保留的表结构
|
|
|
|
|
|
只需要一个会话管理表:
|
|
|
|
|
|
```sql
|
|
|
-- 会话元数据管理表(补充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` 查询:
|
|
|
|
|
|
```java
|
|
|
// 获取会话消息历史 - 直接查询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已经提供了强大的消息存储和记忆功能,我们只需要补充会话元数据管理即可。 |