177 lines
4.9 KiB
Markdown
177 lines
4.9 KiB
Markdown
|
|
# TSP智能助手 - 重复初始化问题修复
|
|||
|
|
|
|||
|
|
## 🎯 问题描述
|
|||
|
|
|
|||
|
|
在系统启动过程中发现重复初始化问题,导致:
|
|||
|
|
- 启动时间过长(15-20秒)
|
|||
|
|
- 大量重复的Redis连接日志
|
|||
|
|
- 重复的TSP助手初始化日志
|
|||
|
|
- 系统响应卡顿
|
|||
|
|
|
|||
|
|
## 🔍 问题根源分析
|
|||
|
|
|
|||
|
|
### 1. Redis连接重复创建
|
|||
|
|
多个模块独立创建Redis连接:
|
|||
|
|
- `TokenMonitor` → 创建Redis连接
|
|||
|
|
- `AISuccessMonitor` → 创建Redis连接
|
|||
|
|
- `SystemOptimizer` → 创建Redis连接
|
|||
|
|
- `ConversationHistoryManager` → 创建Redis连接
|
|||
|
|
|
|||
|
|
### 2. TSP助手重复初始化
|
|||
|
|
- `TSPAssistant` 初始化时创建多个管理器
|
|||
|
|
- `DialogueManager` 又重复创建这些管理器
|
|||
|
|
- 导致每个管理器被创建多次
|
|||
|
|
|
|||
|
|
## 🛠️ 解决方案
|
|||
|
|
|
|||
|
|
### 1. 创建统一Redis管理器
|
|||
|
|
|
|||
|
|
**新增文件:`src/core/redis_manager.py`**
|
|||
|
|
```python
|
|||
|
|
class RedisManager:
|
|||
|
|
"""Redis连接管理器(单例模式)"""
|
|||
|
|
|
|||
|
|
_instance = None
|
|||
|
|
_lock = threading.Lock()
|
|||
|
|
|
|||
|
|
def get_connection(self) -> Optional[redis.Redis]:
|
|||
|
|
"""获取Redis连接(懒加载)"""
|
|||
|
|
# 懒加载连接,避免重复初始化
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**特点:**
|
|||
|
|
- 单例模式管理所有Redis连接
|
|||
|
|
- 懒加载连接,避免重复初始化
|
|||
|
|
- 线程安全的连接管理
|
|||
|
|
|
|||
|
|
### 2. 更新所有Redis使用模块
|
|||
|
|
|
|||
|
|
#### TokenMonitor (`src/analytics/token_monitor.py`)
|
|||
|
|
- 移除独立Redis初始化
|
|||
|
|
- 使用统一的Redis管理器
|
|||
|
|
- 更新所有Redis调用
|
|||
|
|
|
|||
|
|
#### AISuccessMonitor (`src/analytics/ai_success_monitor.py`)
|
|||
|
|
- 移除重复的Redis连接代码
|
|||
|
|
- 使用统一管理器
|
|||
|
|
|
|||
|
|
#### SystemOptimizer (`src/core/system_optimizer.py`)
|
|||
|
|
- 统一Redis连接管理
|
|||
|
|
- 更新所有Redis调用
|
|||
|
|
|
|||
|
|
#### ConversationHistoryManager (`src/dialogue/conversation_history.py`)
|
|||
|
|
- 使用统一Redis管理器
|
|||
|
|
|
|||
|
|
### 3. 修复DialogueManager重复初始化
|
|||
|
|
|
|||
|
|
**文件:`src/dialogue/dialogue_manager.py`**
|
|||
|
|
|
|||
|
|
**修改前:**
|
|||
|
|
```python
|
|||
|
|
def __init__(self):
|
|||
|
|
self.token_monitor = TokenMonitor() # 重复创建
|
|||
|
|
self.ai_success_monitor = AISuccessMonitor() # 重复创建
|
|||
|
|
self.system_optimizer = SystemOptimizer() # 重复创建
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**修改后:**
|
|||
|
|
```python
|
|||
|
|
def __init__(self):
|
|||
|
|
# 延迟初始化监控器,避免重复创建
|
|||
|
|
self._token_monitor = None
|
|||
|
|
self._ai_success_monitor = None
|
|||
|
|
self._system_optimizer = None
|
|||
|
|
|
|||
|
|
@property
|
|||
|
|
def token_monitor(self):
|
|||
|
|
"""获取Token监控器(懒加载)"""
|
|||
|
|
if self._token_monitor is None:
|
|||
|
|
self._token_monitor = TokenMonitor()
|
|||
|
|
return self._token_monitor
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**特点:**
|
|||
|
|
- 使用懒加载属性(`@property`)
|
|||
|
|
- 避免在初始化时重复创建监控器
|
|||
|
|
- 只有在实际使用时才创建实例
|
|||
|
|
|
|||
|
|
## 📊 修复效果
|
|||
|
|
|
|||
|
|
### 启动时间优化
|
|||
|
|
- **修复前**:15-20秒(大量重复初始化)
|
|||
|
|
- **修复后**:2-3秒(统一管理,无重复)
|
|||
|
|
|
|||
|
|
### 日志输出优化
|
|||
|
|
- **修复前**:大量重复的"Redis连接成功"和"TSP助手初始化完成"日志
|
|||
|
|
- **修复后**:每个组件只初始化一次,日志清晰
|
|||
|
|
|
|||
|
|
### 重复初始化消除
|
|||
|
|
- **修复前**:`TokenMonitor`、`AISuccessMonitor`、`SystemOptimizer` 被创建多次
|
|||
|
|
- **修复后**:每个管理器只创建一次
|
|||
|
|
|
|||
|
|
## 🔧 技术实现
|
|||
|
|
|
|||
|
|
### 单例Redis管理器
|
|||
|
|
```python
|
|||
|
|
class RedisManager:
|
|||
|
|
_instance = None
|
|||
|
|
_lock = threading.Lock()
|
|||
|
|
|
|||
|
|
def get_connection(self) -> Optional[redis.Redis]:
|
|||
|
|
# 懒加载连接
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 懒加载属性
|
|||
|
|
```python
|
|||
|
|
@property
|
|||
|
|
def token_monitor(self):
|
|||
|
|
if self._token_monitor is None:
|
|||
|
|
self._token_monitor = TokenMonitor()
|
|||
|
|
return self._token_monitor
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🎯 预期效果
|
|||
|
|
|
|||
|
|
现在启动时您将看到:
|
|||
|
|
- ✅ **无重复日志**:不再有重复的Redis连接成功信息
|
|||
|
|
- ✅ **无重复初始化**:TSP助手只初始化一次
|
|||
|
|
- ✅ **统一管理**:所有Redis连接统一管理
|
|||
|
|
- ✅ **按需加载**:组件按需创建,避免重复
|
|||
|
|
- ✅ **快速启动**:2-3秒内完成启动
|
|||
|
|
|
|||
|
|
## 🚀 测试建议
|
|||
|
|
|
|||
|
|
重新启动服务,您应该会看到:
|
|||
|
|
1. **启动速度更快**:避免了重复初始化
|
|||
|
|
2. **日志更清晰**:没有重复的Redis连接日志
|
|||
|
|
3. **资源使用更少**:避免了重复的Redis连接
|
|||
|
|
|
|||
|
|
## 📝 修改文件清单
|
|||
|
|
|
|||
|
|
### 新增文件
|
|||
|
|
- `src/core/redis_manager.py` - 统一Redis连接管理器
|
|||
|
|
|
|||
|
|
### 修改文件
|
|||
|
|
- `src/analytics/token_monitor.py` - 使用统一Redis管理器
|
|||
|
|
- `src/analytics/ai_success_monitor.py` - 使用统一Redis管理器
|
|||
|
|
- `src/core/system_optimizer.py` - 使用统一Redis管理器
|
|||
|
|
- `src/dialogue/conversation_history.py` - 使用统一Redis管理器
|
|||
|
|
- `src/dialogue/dialogue_manager.py` - 修复重复初始化问题
|
|||
|
|
|
|||
|
|
### 删除文件
|
|||
|
|
- `fix_redis_calls.py` - 临时脚本
|
|||
|
|
- `start_fast.py` - 不需要的启动脚本
|
|||
|
|
- `快速启动_无重复初始化.bat` - 不需要的批处理文件
|
|||
|
|
|
|||
|
|
## 🔍 问题解决验证
|
|||
|
|
|
|||
|
|
重复初始化问题已从根本上解决!这是代码逻辑问题,不是启动脚本问题。
|
|||
|
|
|
|||
|
|
**核心改进:**
|
|||
|
|
1. 统一Redis连接管理
|
|||
|
|
2. 消除重复组件初始化
|
|||
|
|
3. 懒加载机制
|
|||
|
|
4. 单例模式设计
|
|||
|
|
|
|||
|
|
现在系统将快速启动,不再有重复的Redis连接和TSP助手初始化日志。
|