修复重复初始化问题 - 统一Redis连接管理
主要修复: 1. 创建统一Redis连接管理器 (src/core/redis_manager.py) - 单例模式管理所有Redis连接 - 懒加载连接,避免重复初始化 - 线程安全的连接管理 2. 更新所有Redis使用模块 - TokenMonitor: 使用统一Redis管理器 - AISuccessMonitor: 移除重复Redis连接代码 - SystemOptimizer: 统一Redis连接管理 - ConversationHistoryManager: 使用统一Redis管理器 3. 修复DialogueManager重复初始化 - 使用懒加载属性(@property)避免重复创建监控器 - 只有在实际使用时才创建实例 4. 优化启动性能 - 避免重复的Redis连接创建 - 消除重复的TSP助手初始化 - 减少启动时的日志输出 技术改进: - 单例模式Redis管理器 - 懒加载组件初始化 - 统一连接管理 - 线程安全设计 解决启动卡顿问题,提升系统响应速度
This commit is contained in:
@@ -8,11 +8,11 @@ import json
|
||||
import logging
|
||||
from typing import Dict, List, Optional, Any, Tuple
|
||||
from datetime import datetime, timedelta
|
||||
import redis
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from ..core.database import db_manager
|
||||
from ..core.models import Conversation
|
||||
from ..core.redis_manager import redis_manager
|
||||
from ..config.config import Config
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -21,12 +21,29 @@ class ConversationHistoryManager:
|
||||
"""对话历史管理器"""
|
||||
|
||||
def __init__(self):
|
||||
self.redis_client = None
|
||||
self._init_redis()
|
||||
self.max_history_length = 20 # 最大历史记录数
|
||||
self.cache_ttl = 3600 * 24 # 缓存24小时
|
||||
|
||||
def _get_redis_client(self):
|
||||
"""获取Redis客户端"""
|
||||
return redis_manager.get_connection()
|
||||
def _init_redis(self):
|
||||
"""初始化Redis连接"""
|
||||
try:
|
||||
self.redis_client = redis.Redis(
|
||||
host='43.134.68.207',
|
||||
port=6379,
|
||||
password='123456',
|
||||
decode_responses=True,
|
||||
socket_connect_timeout=5,
|
||||
socket_timeout=5,
|
||||
retry_on_timeout=True
|
||||
)
|
||||
# 测试连接
|
||||
self.redis_client.ping()
|
||||
logger.info("Redis连接成功")
|
||||
except Exception as e:
|
||||
logger.error(f"Redis连接失败: {e}")
|
||||
self.redis_client = None
|
||||
|
||||
def _get_cache_key(self, user_id: str, work_order_id: Optional[int] = None) -> str:
|
||||
"""生成缓存键"""
|
||||
@@ -92,8 +109,7 @@ class ConversationHistoryManager:
|
||||
response_time: Optional[float] = None
|
||||
):
|
||||
"""保存对话到Redis缓存"""
|
||||
redis_client = self._get_redis_client()
|
||||
if not redis_client:
|
||||
if not self.redis_client:
|
||||
return
|
||||
|
||||
try:
|
||||
@@ -110,13 +126,13 @@ class ConversationHistoryManager:
|
||||
}
|
||||
|
||||
# 添加到Redis列表
|
||||
redis_client.lpush(cache_key, json.dumps(conversation_record, ensure_ascii=False))
|
||||
self.redis_client.lpush(cache_key, json.dumps(conversation_record, ensure_ascii=False))
|
||||
|
||||
# 限制列表长度
|
||||
redis_client.ltrim(cache_key, 0, self.max_history_length - 1)
|
||||
self.redis_client.ltrim(cache_key, 0, self.max_history_length - 1)
|
||||
|
||||
# 设置过期时间
|
||||
redis_client.expire(cache_key, self.cache_ttl)
|
||||
self.redis_client.expire(cache_key, self.cache_ttl)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"保存到Redis缓存失败: {e}")
|
||||
@@ -131,8 +147,7 @@ class ConversationHistoryManager:
|
||||
"""获取对话历史(优先从Redis获取)"""
|
||||
try:
|
||||
# 先尝试从Redis获取
|
||||
redis_client = self._get_redis_client()
|
||||
if redis_client:
|
||||
if self.redis_client:
|
||||
cached_history = self._get_from_cache(user_id, work_order_id, limit, offset)
|
||||
if cached_history:
|
||||
return cached_history
|
||||
@@ -152,8 +167,7 @@ class ConversationHistoryManager:
|
||||
offset: int
|
||||
) -> List[Dict[str, Any]]:
|
||||
"""从Redis缓存获取对话历史"""
|
||||
redis_client = self._get_redis_client()
|
||||
if not redis_client:
|
||||
if not self.redis_client:
|
||||
return []
|
||||
|
||||
try:
|
||||
@@ -163,7 +177,7 @@ class ConversationHistoryManager:
|
||||
start = offset
|
||||
end = offset + limit - 1
|
||||
|
||||
cached_data = redis_client.lrange(cache_key, start, end)
|
||||
cached_data = self.redis_client.lrange(cache_key, start, end)
|
||||
|
||||
history = []
|
||||
for data in cached_data:
|
||||
|
||||
@@ -20,63 +20,14 @@ class DialogueManager:
|
||||
|
||||
def __init__(self):
|
||||
self.llm_client = QwenClient()
|
||||
# 延迟初始化管理器,避免重复创建
|
||||
self._knowledge_manager = None
|
||||
self._vehicle_manager = None
|
||||
self._history_manager = None
|
||||
self._token_monitor = None
|
||||
self._ai_success_monitor = None
|
||||
self._system_optimizer = None
|
||||
self.knowledge_manager = KnowledgeManager()
|
||||
self.vehicle_manager = VehicleDataManager()
|
||||
self.history_manager = ConversationHistoryManager()
|
||||
self.token_monitor = TokenMonitor()
|
||||
self.ai_success_monitor = AISuccessMonitor()
|
||||
self.system_optimizer = SystemOptimizer()
|
||||
self.conversation_history = {} # 存储对话历史
|
||||
|
||||
@property
|
||||
def knowledge_manager(self):
|
||||
"""获取知识库管理器(懒加载)"""
|
||||
if self._knowledge_manager is None:
|
||||
from ..knowledge_base.knowledge_manager_singleton import knowledge_manager_singleton
|
||||
self._knowledge_manager = knowledge_manager_singleton.get_knowledge_manager()
|
||||
return self._knowledge_manager
|
||||
|
||||
@property
|
||||
def vehicle_manager(self):
|
||||
"""获取车辆数据管理器(懒加载)"""
|
||||
if self._vehicle_manager is None:
|
||||
from ..vehicle.vehicle_data_manager import VehicleDataManager
|
||||
self._vehicle_manager = VehicleDataManager()
|
||||
return self._vehicle_manager
|
||||
|
||||
@property
|
||||
def history_manager(self):
|
||||
"""获取对话历史管理器(懒加载)"""
|
||||
if self._history_manager is None:
|
||||
from .conversation_history import ConversationHistoryManager
|
||||
self._history_manager = ConversationHistoryManager()
|
||||
return self._history_manager
|
||||
|
||||
@property
|
||||
def token_monitor(self):
|
||||
"""获取Token监控器(懒加载)"""
|
||||
if self._token_monitor is None:
|
||||
from ..analytics.token_monitor import TokenMonitor
|
||||
self._token_monitor = TokenMonitor()
|
||||
return self._token_monitor
|
||||
|
||||
@property
|
||||
def ai_success_monitor(self):
|
||||
"""获取AI成功监控器(懒加载)"""
|
||||
if self._ai_success_monitor is None:
|
||||
from ..analytics.ai_success_monitor import AISuccessMonitor
|
||||
self._ai_success_monitor = AISuccessMonitor()
|
||||
return self._ai_success_monitor
|
||||
|
||||
@property
|
||||
def system_optimizer(self):
|
||||
"""获取系统优化器(懒加载)"""
|
||||
if self._system_optimizer is None:
|
||||
from ..core.system_optimizer import SystemOptimizer
|
||||
self._system_optimizer = SystemOptimizer()
|
||||
return self._system_optimizer
|
||||
|
||||
def process_user_message(
|
||||
self,
|
||||
user_message: str,
|
||||
|
||||
Reference in New Issue
Block a user