2025-09-06 21:06:18 +08:00
|
|
|
|
import logging
|
|
|
|
|
|
import sys
|
|
|
|
|
|
import os
|
2025-09-18 19:37:14 +01:00
|
|
|
|
from typing import Dict, Any, List, Optional
|
2025-09-06 21:06:18 +08:00
|
|
|
|
from datetime import datetime, timedelta
|
|
|
|
|
|
|
|
|
|
|
|
# 添加项目根目录到Python路径
|
|
|
|
|
|
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
|
|
|
2026-02-11 00:08:09 +08:00
|
|
|
|
from src.config.unified_config import get_config
|
2025-09-06 21:06:18 +08:00
|
|
|
|
from src.utils.helpers import setup_logging
|
|
|
|
|
|
from src.core.database import db_manager
|
|
|
|
|
|
from src.core.llm_client import QwenClient
|
|
|
|
|
|
from src.knowledge_base.knowledge_manager import KnowledgeManager
|
|
|
|
|
|
from src.dialogue.dialogue_manager import DialogueManager
|
|
|
|
|
|
from src.analytics.analytics_manager import AnalyticsManager
|
|
|
|
|
|
from src.analytics.alert_system import AlertSystem
|
|
|
|
|
|
from src.analytics.monitor_service import MonitorService
|
2025-09-18 19:37:14 +01:00
|
|
|
|
from src.analytics.token_monitor import TokenMonitor
|
|
|
|
|
|
from src.analytics.ai_success_monitor import AISuccessMonitor
|
|
|
|
|
|
from src.core.system_optimizer import SystemOptimizer
|
2025-09-16 17:05:50 +01:00
|
|
|
|
from src.core.models import WorkOrder
|
2025-09-06 21:06:18 +08:00
|
|
|
|
|
|
|
|
|
|
class TSPAssistant:
|
|
|
|
|
|
"""TSP助手主类"""
|
|
|
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
|
# 设置日志
|
2026-02-11 00:08:09 +08:00
|
|
|
|
config = get_config()
|
|
|
|
|
|
setup_logging(config.server.log_level, "logs/tsp_assistant.log")
|
2025-09-06 21:06:18 +08:00
|
|
|
|
self.logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
2025-09-18 20:12:54 +01:00
|
|
|
|
# 初始化各个管理器
|
|
|
|
|
|
self.llm_client = QwenClient()
|
2025-09-18 20:37:27 +01:00
|
|
|
|
self.knowledge_manager = KnowledgeManager()
|
2025-09-06 21:06:18 +08:00
|
|
|
|
self.dialogue_manager = DialogueManager()
|
2025-09-18 20:12:54 +01:00
|
|
|
|
self.analytics_manager = AnalyticsManager()
|
|
|
|
|
|
self.alert_system = AlertSystem()
|
2025-09-06 21:06:18 +08:00
|
|
|
|
self.monitor_service = MonitorService()
|
2025-09-18 19:37:14 +01:00
|
|
|
|
self.token_monitor = TokenMonitor()
|
|
|
|
|
|
self.ai_success_monitor = AISuccessMonitor()
|
|
|
|
|
|
self.system_optimizer = SystemOptimizer()
|
2025-10-27 10:33:34 +08:00
|
|
|
|
|
2025-09-06 21:06:18 +08:00
|
|
|
|
|
|
|
|
|
|
def test_system(self) -> Dict[str, Any]:
|
|
|
|
|
|
"""测试系统各个组件"""
|
|
|
|
|
|
results = {
|
|
|
|
|
|
"database": False,
|
|
|
|
|
|
"llm_api": False,
|
|
|
|
|
|
"knowledge_base": False,
|
|
|
|
|
|
"overall": False
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
# 测试数据库连接
|
|
|
|
|
|
if db_manager.test_connection():
|
|
|
|
|
|
results["database"] = True
|
|
|
|
|
|
self.logger.info("数据库连接测试成功")
|
|
|
|
|
|
else:
|
|
|
|
|
|
self.logger.error("数据库连接测试失败")
|
|
|
|
|
|
|
|
|
|
|
|
# 测试LLM API连接
|
|
|
|
|
|
if self.llm_client.test_connection():
|
|
|
|
|
|
results["llm_api"] = True
|
|
|
|
|
|
self.logger.info("LLM API连接测试成功")
|
|
|
|
|
|
else:
|
|
|
|
|
|
self.logger.error("LLM API连接测试失败")
|
|
|
|
|
|
|
|
|
|
|
|
# 测试知识库
|
|
|
|
|
|
knowledge_stats = self.knowledge_manager.get_knowledge_stats()
|
|
|
|
|
|
if knowledge_stats:
|
|
|
|
|
|
results["knowledge_base"] = True
|
|
|
|
|
|
self.logger.info("知识库测试成功")
|
|
|
|
|
|
else:
|
|
|
|
|
|
self.logger.warning("知识库为空或测试失败")
|
|
|
|
|
|
|
|
|
|
|
|
# 整体状态
|
|
|
|
|
|
results["overall"] = all([results["database"], results["llm_api"]])
|
|
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"系统测试失败: {e}")
|
|
|
|
|
|
|
|
|
|
|
|
return results
|
|
|
|
|
|
|
|
|
|
|
|
def process_message(self, message: str, user_id: str = None, work_order_id: int = None) -> Dict[str, Any]:
|
|
|
|
|
|
"""处理用户消息"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
result = self.dialogue_manager.process_user_message(
|
|
|
|
|
|
user_message=message,
|
|
|
|
|
|
user_id=user_id,
|
|
|
|
|
|
work_order_id=work_order_id
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
if "error" in result:
|
|
|
|
|
|
self.logger.error(f"处理消息失败: {result['error']}")
|
|
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"处理消息异常: {e}")
|
|
|
|
|
|
return {"error": f"处理异常: {str(e)}"}
|
|
|
|
|
|
|
|
|
|
|
|
def create_work_order(self, title: str, description: str, category: str, priority: str = "medium") -> Dict[str, Any]:
|
|
|
|
|
|
"""创建工单"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
result = self.dialogue_manager.create_work_order(
|
|
|
|
|
|
title=title,
|
|
|
|
|
|
description=description,
|
|
|
|
|
|
category=category,
|
|
|
|
|
|
priority=priority
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
if "error" in result:
|
|
|
|
|
|
self.logger.error(f"创建工单失败: {result['error']}")
|
|
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"创建工单异常: {e}")
|
|
|
|
|
|
return {"error": f"创建异常: {str(e)}"}
|
|
|
|
|
|
|
|
|
|
|
|
def update_work_order(self, work_order_id: int, **kwargs) -> bool:
|
|
|
|
|
|
"""更新工单"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
return self.dialogue_manager.update_work_order(work_order_id, **kwargs)
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"更新工单异常: {e}")
|
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
def search_knowledge(self, query: str, top_k: int = 3) -> Dict[str, Any]:
|
|
|
|
|
|
"""搜索知识库"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
results = self.knowledge_manager.search_knowledge(query, top_k)
|
|
|
|
|
|
return {
|
|
|
|
|
|
"results": results,
|
|
|
|
|
|
"count": len(results)
|
|
|
|
|
|
}
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"搜索知识库异常: {e}")
|
|
|
|
|
|
return {"error": f"搜索异常: {str(e)}"}
|
|
|
|
|
|
|
|
|
|
|
|
def add_knowledge(self, question: str, answer: str, category: str, confidence_score: float = 0.5) -> bool:
|
|
|
|
|
|
"""添加知识库条目"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
return self.knowledge_manager.add_knowledge_entry(question, answer, category, confidence_score)
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"添加知识库异常: {e}")
|
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
def generate_analytics(self, date_range: str = "today") -> Dict[str, Any]:
|
|
|
|
|
|
"""生成分析报告"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
from src.utils.helpers import parse_date_range
|
|
|
|
|
|
|
|
|
|
|
|
start_date, end_date = parse_date_range(date_range)
|
|
|
|
|
|
|
|
|
|
|
|
# 生成每日分析
|
|
|
|
|
|
analytics_results = []
|
|
|
|
|
|
current_date = start_date
|
|
|
|
|
|
while current_date <= end_date:
|
|
|
|
|
|
result = self.analytics_manager.generate_daily_analytics(current_date)
|
|
|
|
|
|
if "error" not in result:
|
|
|
|
|
|
analytics_results.append(result)
|
|
|
|
|
|
current_date += timedelta(days=1)
|
|
|
|
|
|
|
|
|
|
|
|
# 获取汇总统计
|
|
|
|
|
|
summary = self.analytics_manager.get_analytics_summary((end_date - start_date).days + 1)
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
|
"period": f"{start_date} 到 {end_date}",
|
|
|
|
|
|
"daily_analytics": analytics_results,
|
|
|
|
|
|
"summary": summary
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"生成分析报告异常: {e}")
|
|
|
|
|
|
return {"error": f"生成异常: {str(e)}"}
|
|
|
|
|
|
|
|
|
|
|
|
def get_alerts(self) -> Dict[str, Any]:
|
|
|
|
|
|
"""获取预警信息"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
active_alerts = self.analytics_manager.get_active_alerts()
|
|
|
|
|
|
return {
|
|
|
|
|
|
"active_alerts": active_alerts,
|
|
|
|
|
|
"count": len(active_alerts)
|
|
|
|
|
|
}
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"获取预警异常: {e}")
|
|
|
|
|
|
return {"error": f"获取异常: {str(e)}"}
|
|
|
|
|
|
|
|
|
|
|
|
def get_system_status(self) -> Dict[str, Any]:
|
|
|
|
|
|
"""获取系统状态"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
from src.utils.helpers import get_memory_usage
|
|
|
|
|
|
|
|
|
|
|
|
# 系统测试
|
|
|
|
|
|
test_results = self.test_system()
|
|
|
|
|
|
|
|
|
|
|
|
# 知识库统计
|
|
|
|
|
|
knowledge_stats = self.knowledge_manager.get_knowledge_stats()
|
|
|
|
|
|
|
|
|
|
|
|
# 内存使用
|
|
|
|
|
|
memory_usage = get_memory_usage()
|
|
|
|
|
|
|
|
|
|
|
|
# 活跃预警
|
|
|
|
|
|
alerts = self.alert_system.get_active_alerts()
|
|
|
|
|
|
|
|
|
|
|
|
# 系统健康状态
|
|
|
|
|
|
health_status = self.monitor_service.get_system_health()
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
|
"system_status": test_results,
|
|
|
|
|
|
"knowledge_base": knowledge_stats,
|
|
|
|
|
|
"memory_usage": memory_usage,
|
|
|
|
|
|
"active_alerts": len(alerts),
|
|
|
|
|
|
"health_score": health_status.get("health_score", 0),
|
|
|
|
|
|
"health_status": health_status.get("status", "unknown"),
|
|
|
|
|
|
"timestamp": datetime.now().isoformat()
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"获取系统状态异常: {e}")
|
|
|
|
|
|
return {"error": f"获取状态异常: {str(e)}"}
|
|
|
|
|
|
|
|
|
|
|
|
def start_monitoring(self):
|
|
|
|
|
|
"""启动监控服务"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
self.monitor_service.start()
|
|
|
|
|
|
self.logger.info("监控服务已启动")
|
|
|
|
|
|
return True
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"启动监控服务失败: {e}")
|
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
def stop_monitoring(self):
|
|
|
|
|
|
"""停止监控服务"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
self.monitor_service.stop()
|
|
|
|
|
|
self.logger.info("监控服务已停止")
|
|
|
|
|
|
return True
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"停止监控服务失败: {e}")
|
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
def check_alerts(self) -> List[Dict[str, Any]]:
|
|
|
|
|
|
"""检查预警"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
return self.alert_system.check_all_rules()
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"检查预警失败: {e}")
|
|
|
|
|
|
return []
|
|
|
|
|
|
|
|
|
|
|
|
def get_active_alerts(self) -> List[Dict[str, Any]]:
|
|
|
|
|
|
"""获取活跃预警"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
return self.alert_system.get_active_alerts()
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"获取活跃预警失败: {e}")
|
|
|
|
|
|
return []
|
|
|
|
|
|
|
2025-09-08 15:27:22 +08:00
|
|
|
|
def create_alert(self, alert_type: str, title: str, description: str, level: str = "medium") -> Dict[str, Any]:
|
|
|
|
|
|
"""创建预警"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
from ..core.database import db_manager
|
|
|
|
|
|
from ..core.models import Alert
|
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
|
|
|
|
with db_manager.get_session() as session:
|
|
|
|
|
|
alert = Alert(
|
|
|
|
|
|
rule_name=f"手动预警_{datetime.now().strftime('%Y%m%d_%H%M%S')}",
|
|
|
|
|
|
alert_type=alert_type,
|
|
|
|
|
|
level=level,
|
|
|
|
|
|
message=f"{title}: {description}",
|
|
|
|
|
|
is_active=True,
|
|
|
|
|
|
created_at=datetime.now()
|
|
|
|
|
|
)
|
|
|
|
|
|
session.add(alert)
|
|
|
|
|
|
session.commit()
|
|
|
|
|
|
|
|
|
|
|
|
self.logger.info(f"创建预警成功: {title}")
|
|
|
|
|
|
return {
|
|
|
|
|
|
"id": alert.id,
|
|
|
|
|
|
"title": title,
|
|
|
|
|
|
"description": description,
|
|
|
|
|
|
"level": level,
|
|
|
|
|
|
"alert_type": alert_type,
|
|
|
|
|
|
"created_at": alert.created_at.isoformat()
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"创建预警异常: {e}")
|
|
|
|
|
|
return {"error": f"创建异常: {str(e)}"}
|
|
|
|
|
|
|
2025-09-06 21:06:18 +08:00
|
|
|
|
def resolve_alert(self, alert_id: int) -> bool:
|
|
|
|
|
|
"""解决预警"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
return self.alert_system.resolve_alert(alert_id)
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"解决预警失败: {e}")
|
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
def get_alert_statistics(self) -> Dict[str, Any]:
|
|
|
|
|
|
"""获取预警统计"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
return self.alert_system.get_alert_statistics()
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"获取预警统计失败: {e}")
|
|
|
|
|
|
return {}
|
2025-09-16 17:05:50 +01:00
|
|
|
|
|
|
|
|
|
|
def get_workorders(self, limit: int = 100) -> List[Dict[str, Any]]:
|
|
|
|
|
|
"""获取最近的工单列表(按创建时间倒序)"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
with db_manager.get_session() as session:
|
|
|
|
|
|
q = session.query(WorkOrder).order_by(WorkOrder.created_at.desc())
|
|
|
|
|
|
if limit:
|
|
|
|
|
|
q = q.limit(limit)
|
|
|
|
|
|
rows = q.all()
|
|
|
|
|
|
results: List[Dict[str, Any]] = []
|
|
|
|
|
|
for w in rows:
|
|
|
|
|
|
results.append({
|
|
|
|
|
|
"id": w.id,
|
|
|
|
|
|
"order_id": w.order_id,
|
|
|
|
|
|
"title": w.title,
|
|
|
|
|
|
"description": w.description,
|
|
|
|
|
|
"category": w.category,
|
|
|
|
|
|
"priority": w.priority,
|
|
|
|
|
|
"status": w.status,
|
|
|
|
|
|
"created_at": w.created_at.isoformat() if w.created_at else None,
|
|
|
|
|
|
"updated_at": w.updated_at.isoformat() if w.updated_at else None,
|
|
|
|
|
|
"resolution": w.resolution,
|
|
|
|
|
|
"satisfaction_score": w.satisfaction_score
|
|
|
|
|
|
})
|
|
|
|
|
|
return results
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"获取工单列表失败: {e}")
|
|
|
|
|
|
return []
|
2025-09-06 21:06:18 +08:00
|
|
|
|
|
|
|
|
|
|
def get_system_health(self) -> Dict[str, Any]:
|
|
|
|
|
|
"""获取系统健康状态"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
return self.monitor_service.get_system_health()
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"获取系统健康状态失败: {e}")
|
|
|
|
|
|
return {"error": f"获取健康状态失败: {str(e)}"}
|
2025-09-18 19:37:14 +01:00
|
|
|
|
|
|
|
|
|
|
def get_token_usage_stats(self, user_id: str = None, days: int = 7) -> Dict[str, Any]:
|
|
|
|
|
|
"""获取Token使用统计"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
if user_id:
|
|
|
|
|
|
return self.token_monitor.get_user_token_stats(user_id, days)
|
|
|
|
|
|
else:
|
|
|
|
|
|
return self.token_monitor.get_system_token_stats(days)
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"获取Token使用统计失败: {e}")
|
|
|
|
|
|
return {"error": f"获取Token统计失败: {str(e)}"}
|
|
|
|
|
|
|
|
|
|
|
|
def get_ai_performance_stats(self, model_name: str = None, hours: int = 24) -> Dict[str, Any]:
|
|
|
|
|
|
"""获取AI性能统计"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
if model_name:
|
|
|
|
|
|
return self.ai_success_monitor.get_model_performance(model_name, hours)
|
|
|
|
|
|
else:
|
|
|
|
|
|
return self.ai_success_monitor.get_system_performance(hours)
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"获取AI性能统计失败: {e}")
|
|
|
|
|
|
return {"error": f"获取AI性能统计失败: {str(e)}"}
|
|
|
|
|
|
|
|
|
|
|
|
def get_cost_trend(self, days: int = 30) -> List[Dict[str, Any]]:
|
|
|
|
|
|
"""获取成本趋势"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
return self.token_monitor.get_cost_trend(days)
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"获取成本趋势失败: {e}")
|
|
|
|
|
|
return []
|
|
|
|
|
|
|
|
|
|
|
|
def get_performance_trend(self, days: int = 7) -> List[Dict[str, Any]]:
|
|
|
|
|
|
"""获取性能趋势"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
return self.ai_success_monitor.get_performance_trend(days)
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"获取性能趋势失败: {e}")
|
|
|
|
|
|
return []
|
|
|
|
|
|
|
|
|
|
|
|
def get_user_conversation_history(
|
|
|
|
|
|
self,
|
|
|
|
|
|
user_id: str,
|
|
|
|
|
|
work_order_id: Optional[int] = None,
|
|
|
|
|
|
limit: int = 10,
|
|
|
|
|
|
offset: int = 0
|
|
|
|
|
|
) -> List[Dict[str, Any]]:
|
|
|
|
|
|
"""获取用户对话历史"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
return self.dialogue_manager.get_user_conversation_history(
|
|
|
|
|
|
user_id=user_id,
|
|
|
|
|
|
work_order_id=work_order_id,
|
|
|
|
|
|
limit=limit,
|
|
|
|
|
|
offset=offset
|
|
|
|
|
|
)
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"获取用户对话历史失败: {e}")
|
|
|
|
|
|
return []
|
|
|
|
|
|
|
|
|
|
|
|
def delete_conversation(self, conversation_id: int) -> bool:
|
|
|
|
|
|
"""删除对话记录"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
return self.dialogue_manager.delete_conversation(conversation_id)
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"删除对话记录失败: {e}")
|
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
def delete_user_conversations(self, user_id: str, work_order_id: Optional[int] = None) -> int:
|
|
|
|
|
|
"""删除用户的所有对话记录"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
return self.dialogue_manager.delete_user_conversations(user_id, work_order_id)
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"删除用户对话记录失败: {e}")
|
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
|
|
def cleanup_old_data(self, days: int = 30) -> Dict[str, int]:
|
|
|
|
|
|
"""清理旧数据"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
results = {}
|
|
|
|
|
|
|
|
|
|
|
|
# 清理对话历史
|
|
|
|
|
|
conversation_cleaned = self.dialogue_manager.history_manager.cleanup_old_conversations(days)
|
|
|
|
|
|
results["conversations"] = conversation_cleaned
|
|
|
|
|
|
|
|
|
|
|
|
# 清理Token监控数据
|
|
|
|
|
|
token_cleaned = self.token_monitor.cleanup_old_data(days)
|
|
|
|
|
|
results["token_data"] = token_cleaned
|
|
|
|
|
|
|
|
|
|
|
|
# 清理AI成功率监控数据
|
|
|
|
|
|
ai_cleaned = self.ai_success_monitor.cleanup_old_data(days)
|
|
|
|
|
|
results["ai_data"] = ai_cleaned
|
|
|
|
|
|
|
|
|
|
|
|
self.logger.info(f"数据清理完成: {results}")
|
|
|
|
|
|
return results
|
|
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"清理旧数据失败: {e}")
|
|
|
|
|
|
return {}
|
|
|
|
|
|
|
|
|
|
|
|
def check_rate_limit(self, user_id: str) -> bool:
|
|
|
|
|
|
"""检查用户请求频率限制"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
return self.system_optimizer.check_rate_limit(user_id)
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"检查频率限制失败: {e}")
|
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
def check_input_security(self, user_input: str) -> Dict[str, Any]:
|
|
|
|
|
|
"""检查输入安全性"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
return self.system_optimizer.check_input_security(user_input)
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"检查输入安全性失败: {e}")
|
|
|
|
|
|
return {"is_safe": True, "message": "安全检查异常"}
|
|
|
|
|
|
|
|
|
|
|
|
def check_cost_limit(self, estimated_cost: float) -> bool:
|
|
|
|
|
|
"""检查成本限制"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
return self.system_optimizer.check_cost_limit(estimated_cost)
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"检查成本限制失败: {e}")
|
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
def get_system_optimization_status(self) -> Dict[str, Any]:
|
|
|
|
|
|
"""获取系统优化状态"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
return self.system_optimizer.get_system_status()
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"获取系统优化状态失败: {e}")
|
|
|
|
|
|
return {"status": "error", "message": str(e)}
|
|
|
|
|
|
|
|
|
|
|
|
def optimize_response_time(self, response_time: float) -> Dict[str, Any]:
|
|
|
|
|
|
"""优化响应时间"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
return self.system_optimizer.optimize_response_time(response_time)
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
self.logger.error(f"优化响应时间失败: {e}")
|
|
|
|
|
|
return {}
|
2025-09-06 21:06:18 +08:00
|
|
|
|
|
|
|
|
|
|
def main():
|
|
|
|
|
|
"""主函数"""
|
|
|
|
|
|
# 创建TSP助手实例
|
|
|
|
|
|
assistant = TSPAssistant()
|
|
|
|
|
|
|
|
|
|
|
|
# 测试系统
|
|
|
|
|
|
test_results = assistant.test_system()
|
|
|
|
|
|
print("系统测试结果:", test_results)
|
|
|
|
|
|
|
|
|
|
|
|
if not test_results["overall"]:
|
|
|
|
|
|
print("系统初始化失败,请检查配置")
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
print("TSP助手启动成功!")
|
|
|
|
|
|
|
|
|
|
|
|
# 示例用法
|
|
|
|
|
|
# 创建工单
|
|
|
|
|
|
work_order = assistant.create_work_order(
|
|
|
|
|
|
title="测试工单",
|
|
|
|
|
|
description="这是一个测试工单",
|
|
|
|
|
|
category="技术问题",
|
|
|
|
|
|
priority="medium"
|
|
|
|
|
|
)
|
|
|
|
|
|
print("创建工单:", work_order)
|
|
|
|
|
|
|
|
|
|
|
|
# 处理消息
|
|
|
|
|
|
if "work_order_id" in work_order:
|
|
|
|
|
|
response = assistant.process_message(
|
|
|
|
|
|
message="我的账户无法登录",
|
|
|
|
|
|
work_order_id=work_order["work_order_id"]
|
|
|
|
|
|
)
|
|
|
|
|
|
print("处理消息:", response)
|
|
|
|
|
|
|
|
|
|
|
|
# 获取系统状态
|
|
|
|
|
|
status = assistant.get_system_status()
|
|
|
|
|
|
print("系统状态:", status)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
|
main()
|