移除多余的测试文件
This commit is contained in:
196
src/chat/memory_system/async_optimization_guide.md
Normal file
196
src/chat/memory_system/async_optimization_guide.md
Normal file
@@ -0,0 +1,196 @@
|
||||
# 记忆系统异步优化说明
|
||||
|
||||
## 🎯 优化目标
|
||||
|
||||
解决MaiBot-Plus记忆系统阻塞主程序的问题,将原本的线性同步调用改为异步非阻塞运行。
|
||||
|
||||
## ⚠️ 问题分析
|
||||
|
||||
### 原有问题
|
||||
1. **瞬时记忆阻塞**:每次用户发消息时,`await self.instant_memory.get_memory_for_context(target)` 会阻塞等待LLM响应
|
||||
2. **定时记忆构建阻塞**:每600秒执行的 `build_memory_task()` 会完全阻塞主程序数十秒
|
||||
3. **LLM调用链阻塞**:记忆存储和检索都需要调用LLM,延迟较高
|
||||
|
||||
### 卡顿表现
|
||||
- 用户发消息后,程序响应延迟明显增加
|
||||
- 定时记忆构建时,整个程序无响应
|
||||
- 高并发时,记忆系统成为性能瓶颈
|
||||
|
||||
## 🚀 优化方案
|
||||
|
||||
### 1. 异步记忆队列系统 (`async_memory_optimizer.py`)
|
||||
|
||||
**核心思想**:将记忆操作放入异步队列,后台处理,不阻塞主程序。
|
||||
|
||||
**关键特性**:
|
||||
- 任务队列管理:支持存储、检索、构建三种任务类型
|
||||
- 优先级调度:高优先级任务(用户查询)优先处理
|
||||
- 线程池执行:避免阻塞事件循环
|
||||
- 结果缓存:减少重复计算
|
||||
- 失败重试:提高系统可靠性
|
||||
|
||||
```python
|
||||
# 使用示例
|
||||
from src.chat.memory_system.async_memory_optimizer import (
|
||||
store_memory_nonblocking,
|
||||
retrieve_memory_nonblocking,
|
||||
build_memory_nonblocking
|
||||
)
|
||||
|
||||
# 非阻塞存储记忆
|
||||
task_id = await store_memory_nonblocking(chat_id, content)
|
||||
|
||||
# 非阻塞检索记忆(支持缓存)
|
||||
memories = await retrieve_memory_nonblocking(chat_id, query)
|
||||
|
||||
# 非阻塞构建记忆
|
||||
task_id = await build_memory_nonblocking()
|
||||
```
|
||||
|
||||
### 2. 异步瞬时记忆包装器 (`async_instant_memory_wrapper.py`)
|
||||
|
||||
**核心思想**:为现有瞬时记忆系统提供异步包装,支持超时控制和多层回退。
|
||||
|
||||
**关键特性**:
|
||||
- 超时控制:防止长时间阻塞
|
||||
- 缓存机制:热点查询快速响应
|
||||
- 多系统融合:LLM记忆 + 向量记忆
|
||||
- 回退策略:保证系统稳定性
|
||||
- 后台存储:存储操作完全非阻塞
|
||||
|
||||
```python
|
||||
# 使用示例
|
||||
from src.chat.memory_system.async_instant_memory_wrapper import get_async_instant_memory
|
||||
|
||||
async_memory = get_async_instant_memory(chat_id)
|
||||
|
||||
# 后台存储(发后即忘)
|
||||
async_memory.store_memory_background(content)
|
||||
|
||||
# 快速检索(带超时)
|
||||
result = await async_memory.get_memory_with_fallback(query, max_timeout=2.0)
|
||||
```
|
||||
|
||||
### 3. 主程序优化
|
||||
|
||||
**记忆构建任务异步化**:
|
||||
- 原来:`await self.hippocampus_manager.build_memory()` 阻塞主程序
|
||||
- 现在:使用异步队列或线程池,后台执行
|
||||
|
||||
**消息处理优化**:
|
||||
- 原来:同步等待记忆检索完成
|
||||
- 现在:最大2秒超时,保证用户体验
|
||||
|
||||
## 📊 性能提升预期
|
||||
|
||||
### 响应速度
|
||||
- **用户消息响应**:从原来的3-10秒减少到0.5-2秒
|
||||
- **记忆检索**:缓存命中时几乎即时响应
|
||||
- **记忆存储**:从同步阻塞改为后台处理
|
||||
|
||||
### 并发能力
|
||||
- **多用户同时使用**:不再因记忆系统相互阻塞
|
||||
- **高峰期稳定性**:记忆任务排队处理,不会崩溃
|
||||
|
||||
### 资源使用
|
||||
- **CPU使用**:异步处理,更好的CPU利用率
|
||||
- **内存优化**:缓存机制,减少重复计算
|
||||
- **网络延迟**:LLM调用并行化,减少等待时间
|
||||
|
||||
## 🔧 部署和配置
|
||||
|
||||
### 1. 自动部署
|
||||
新的异步系统已经集成到现有代码中,支持自动回退:
|
||||
|
||||
```python
|
||||
# 优先级回退机制
|
||||
1. 异步瞬时记忆包装器 (最优)
|
||||
2. 异步记忆管理器 (次优)
|
||||
3. 带超时的同步模式 (保底)
|
||||
```
|
||||
|
||||
### 2. 配置参数
|
||||
|
||||
在 `config.toml` 中可以调整相关参数:
|
||||
|
||||
```toml
|
||||
[memory]
|
||||
enable_memory = true
|
||||
enable_instant_memory = true
|
||||
memory_build_interval = 600 # 记忆构建间隔(秒)
|
||||
```
|
||||
|
||||
### 3. 监控和调试
|
||||
|
||||
```python
|
||||
# 查看异步队列状态
|
||||
from src.chat.memory_system.async_memory_optimizer import async_memory_manager
|
||||
status = async_memory_manager.get_status()
|
||||
print(status)
|
||||
|
||||
# 查看包装器状态
|
||||
from src.chat.memory_system.async_instant_memory_wrapper import get_async_instant_memory
|
||||
wrapper = get_async_instant_memory(chat_id)
|
||||
status = wrapper.get_status()
|
||||
print(status)
|
||||
```
|
||||
|
||||
## 🧪 验证方法
|
||||
|
||||
### 1. 性能测试
|
||||
```bash
|
||||
# 测试用户消息响应时间
|
||||
time curl -X POST "http://localhost:8080/api/message" -d '{"message": "你还记得我们昨天聊的内容吗?"}'
|
||||
|
||||
# 观察内存构建时的程序响应
|
||||
# 构建期间发送消息,观察是否还有阻塞
|
||||
```
|
||||
|
||||
### 2. 并发测试
|
||||
```python
|
||||
import asyncio
|
||||
import time
|
||||
|
||||
async def test_concurrent_messages():
|
||||
"""测试并发消息处理"""
|
||||
tasks = []
|
||||
for i in range(10):
|
||||
task = asyncio.create_task(send_message(f"测试消息 {i}"))
|
||||
tasks.append(task)
|
||||
|
||||
start_time = time.time()
|
||||
results = await asyncio.gather(*tasks)
|
||||
end_time = time.time()
|
||||
|
||||
print(f"10条并发消息处理完成,耗时: {end_time - start_time:.2f}秒")
|
||||
```
|
||||
|
||||
### 3. 日志监控
|
||||
关注以下日志输出:
|
||||
- `"异步瞬时记忆:"` - 确认使用了异步系统
|
||||
- `"记忆构建任务已提交"` - 确认构建任务非阻塞
|
||||
- `"瞬时记忆检索超时"` - 监控超时情况
|
||||
|
||||
## 🔄 回退机制
|
||||
|
||||
系统设计了多层回退机制,确保即使新系统出现问题,也能维持基本功能:
|
||||
|
||||
1. **异步包装器失败** → 使用异步队列管理器
|
||||
2. **异步队列失败** → 使用带超时的同步模式
|
||||
3. **超时保护** → 最长等待时间不超过2秒
|
||||
4. **完全失败** → 跳过记忆功能,保证基本对话
|
||||
|
||||
## 📝 注意事项
|
||||
|
||||
1. **首次启动**:异步系统需要初始化时间,可能前几次记忆调用延迟稍高
|
||||
2. **缓存预热**:系统运行一段时间后,缓存效果会显著提升响应速度
|
||||
3. **内存使用**:缓存会增加内存使用,但相对于性能提升是值得的
|
||||
4. **兼容性**:如果发现异步系统有问题,可以临时禁用相关导入,自动回退到原系统
|
||||
|
||||
## 🎉 预期效果
|
||||
|
||||
- ✅ **消息响应速度提升60%+**
|
||||
- ✅ **记忆构建不再阻塞主程序**
|
||||
- ✅ **支持更高的并发用户数**
|
||||
- ✅ **系统整体稳定性提升**
|
||||
- ✅ **保持原有记忆功能完整性**
|
||||
Reference in New Issue
Block a user