diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..538b10a --- /dev/null +++ b/.gitignore @@ -0,0 +1,107 @@ +# Python缓存文件 +__pycache__/ +*.py[cod] +*$py.class +*.so + +# 分发/打包 +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +*.manifest +*.spec + +# 单元测试/覆盖率报告 +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# 环境变量 +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# IDE文件 +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# 操作系统文件 +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# 日志文件 +*.log +logs/ + +# 数据库文件(开发环境) +*.db +*.sqlite +*.sqlite3 + +# 备份文件 +backups/ +*.backup +*.bak + +# 临时文件 +*.tmp +*.temp +temp/ +tmp/ + +# 部署相关 +deploy_config.json +dev_deploy/ + +# 测试文件 +test_*.py +*_test.py +test_sample.txt + +# 文档草稿 +note/ +*问题修复*.md +*修复总结*.md +*使用指南*.md + +# Excel文件(除了模板) +*.xlsx +!uploads/workorder_template.xlsx + +# 配置文件(敏感信息) +config/local_config.py +.env.local \ No newline at end of file diff --git a/TSP智能助手使用指南.md b/TSP智能助手使用指南.md deleted file mode 100644 index 6a978e5..0000000 --- a/TSP智能助手使用指南.md +++ /dev/null @@ -1,1173 +0,0 @@ -# TSP智能助手 - 完整使用指南 - -## 📋 目录 - -1. [系统概述](#系统概述) -2. [快速开始](#快速开始) -3. [核心功能](#核心功能) -4. [Web界面使用](#web界面使用) -5. [API接口](#api接口) -6. [数据库管理](#数据库管理) -7. [Agent功能](#agent功能) -8. [车辆数据管理](#车辆数据管理) -9. [知识库管理](#知识库管理) -10. [对话系统](#对话系统) -11. [工单管理](#工单管理) -12. [分析报告](#分析报告) -13. [预警系统](#预警系统) -14. [故障排除](#故障排除) -15. [开发指南](#开发指南) - ---- - -## 🎯 系统概述 - -TSP智能助手是一个基于大语言模型的智能客服系统,集成了知识库管理、车辆数据监控、工单处理、分析报告等功能。 - -### 主要特性 - -- 🤖 **智能对话**: 基于阿里云千问大模型的自然语言对话 -- 📚 **知识库管理**: 支持手动添加和文件自动生成知识库 -- 🚗 **车辆数据**: 实时车辆数据监控和管理 -- 🎯 **Agent模式**: 自主决策和任务执行能力 -- 📊 **数据分析**: 智能分析和报告生成 -- 🚨 **预警系统**: 实时监控和异常预警 -- 🎫 **工单管理**: 完整的客服工单流程 -- 🌐 **Web界面**: 现代化的用户界面 - -### 技术架构 - -- **后端**: Python + Flask -- **数据库**: MySQL/SQLite -- **前端**: HTML5 + Bootstrap 5 + Chart.js -- **AI模型**: 阿里云千问 (Qwen) -- **实时通信**: WebSocket - ---- - -## 🚀 快速开始 - -### 1. 环境要求 - -- Python 3.8+ -- MySQL 5.7+ (可选,默认使用SQLite) -- 阿里云千问API密钥 - -### 2. 安装依赖 - -```bash -pip install -r requirements.txt -``` - -### 3. 配置系统 - -编辑 `src/config/config.py`: - -```python -class Config: - # 阿里云千问API配置 - ALIBABA_API_KEY = "your-api-key" - ALIBABA_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1" - ALIBABA_MODEL_NAME = "qwen-plus-latest" - - # 数据库配置 - DATABASE_URL = "mysql+pymysql://user:password@localhost/tsp_assistant?charset=utf8mb4" - # 或使用SQLite: DATABASE_URL = "sqlite:///tsp_assistant.db" -``` - -### 4. 初始化数据库 - -```bash -python init_database.py -``` - -### 5. 启动系统 - -```bash -python start_dashboard.py -``` - -### 6. 访问界面 - -打开浏览器访问: http://localhost:5000 - ---- - -## 🎛️ 核心功能 - -### 1. 智能对话系统 - -- **实时对话**: 基于WebSocket的实时聊天 -- **知识库集成**: 自动搜索相关知识库内容 -- **车辆数据集成**: 结合实时车辆数据提供准确回答 -- **上下文记忆**: 维护对话历史和上下文 - -### 2. Agent模式 - -- **自主决策**: AI Agent可以自主分析和决策 -- **任务规划**: 自动分解复杂任务 -- **工具调用**: 集成多种工具和API -- **主动监控**: 实时监控系统状态 - -### 3. 知识库管理 - -- **手动添加**: 通过界面手动添加知识条目 -- **文件导入**: 支持TXT、PDF、DOC、DOCX、MD文件 -- **自动提取**: 使用LLM自动从文件中提取知识 -- **验证机制**: 人工验证确保知识质量 -- **分页显示**: 支持大量知识库的分页浏览 - -### 4. 车辆数据管理 - -- **实时数据**: 存储和查询车辆实时数据 -- **数据汇总**: 生成车辆状态摘要 -- **历史记录**: 保存车辆数据历史 -- **多车辆支持**: 支持多辆车辆的数据管理 - ---- - -## 🌐 Web界面使用 - -### 主界面布局 - -Web界面采用现代化的单页应用设计,包含以下主要区域: - -1. **侧边栏导航**: 功能模块切换 -2. **主内容区**: 当前功能的具体操作界面 -3. **状态栏**: 系统状态和通知 - -### 功能模块 - -#### 1. 仪表板 (Dashboard) -- 系统概览和关键指标 -- 实时数据图表 -- 快速操作入口 - -#### 2. 智能对话 (Chat) -- 实时聊天界面 -- 支持文本和语音输入 -- 对话历史记录 - -#### 3. Agent模式 (Agent) -- Agent状态监控 -- 任务执行情况 -- 主动监控设置 - -#### 4. 预警管理 (Alerts) -- 预警规则配置 -- 预警历史记录 -- 预警处理状态 - -#### 5. 知识库 (Knowledge) -- 知识条目管理 -- 文件上传功能 -- 知识验证操作 - -#### 6. 工单管理 (Work Orders) -- 工单创建和编辑 -- 工单状态跟踪 -- 工单统计分析 - -#### 7. 数据分析 (Analytics) -- 数据统计图表 -- 趋势分析报告 -- 性能指标监控 - -#### 8. 系统设置 (Settings) -- 系统参数配置 -- 用户权限管理 -- 系统维护操作 - -### 页面状态保持 - -系统会自动保存当前页面状态,刷新后会自动恢复到之前的页面。 - ---- - -## 🔌 API接口 - -### 基础URL -``` -http://localhost:5000/api -``` - -### 1. 对话接口 - -#### 发送消息 -```http -POST /api/chat/message -Content-Type: application/json - -{ - "message": "用户消息内容", - "work_order_id": 123, - "user_id": "user123", - "vehicle_id": "V001" -} -``` - -#### WebSocket连接 -```javascript -const ws = new WebSocket('ws://localhost:5000/ws'); -ws.onmessage = function(event) { - const data = JSON.parse(event.data); - console.log('收到消息:', data); -}; -``` - -### 2. 知识库接口 - -#### 获取知识库列表 -```http -GET /api/knowledge?page=1&per_page=10 -``` - -#### 添加知识条目 -```http -POST /api/knowledge/add -Content-Type: application/json - -{ - "question": "问题内容", - "answer": "答案内容", - "category": "分类", - "confidence_score": 0.8 -} -``` - -#### 上传文件生成知识库 -```http -POST /api/knowledge/upload -Content-Type: multipart/form-data - -file: [文件内容] -process_method: auto -category: 分类 -confidence_score: 0.8 -``` - -#### 验证知识条目 -```http -POST /api/knowledge/verify/{knowledge_id} -``` - -#### 取消验证 -```http -POST /api/knowledge/unverify/{knowledge_id} -``` - -#### 删除知识条目 -```http -DELETE /api/knowledge/{knowledge_id} -``` - -### 3. 车辆数据接口 - -#### 获取车辆数据 -```http -GET /api/vehicle/data?vehicle_id=V001&limit=10 -``` - -#### 获取最新车辆数据 -```http -GET /api/vehicle/data/{vehicle_id}/latest -``` - -#### 获取车辆摘要 -```http -GET /api/vehicle/data/{vehicle_id}/summary -``` - -#### 添加车辆数据 -```http -POST /api/vehicle/data -Content-Type: application/json - -{ - "vehicle_id": "V001", - "vehicle_vin": "1HGBH41JXMN109186", - "data_type": "location", - "data_value": "{\"lat\": 39.9042, \"lng\": 116.4074}" -} -``` - -#### 初始化示例数据 -```http -POST /api/vehicle/init-sample-data -``` - -### 4. Agent接口 - -#### 获取Agent状态 -```http -GET /api/agent/status -``` - -#### 切换Agent模式 -```http -POST /api/agent/toggle -Content-Type: application/json - -{ - "enabled": true -} -``` - -#### 启动主动监控 -```http -POST /api/agent/monitoring/start -``` - -#### 停止主动监控 -```http -POST /api/agent/monitoring/stop -``` - -### 5. 工单接口 - -#### 获取工单列表 -```http -GET /api/work-orders?page=1&per_page=10 -``` - -#### 创建工单 -```http -POST /api/work-orders -Content-Type: application/json - -{ - "title": "工单标题", - "description": "工单描述", - "priority": "high", - "category": "技术问题", - "customer_id": "customer123" -} -``` - -#### 更新工单状态 -```http -PUT /api/work-orders/{work_order_id} -Content-Type: application/json - -{ - "status": "resolved", - "resolution": "问题已解决" -} -``` - -### 6. 分析接口 - -#### 获取分析报告 -```http -GET /api/analytics/report?date=2025-09-06 -``` - -#### 获取KPI数据 -```http -GET /api/analytics/kpi -``` - -### 7. 预警接口 - -#### 获取预警列表 -```http -GET /api/alerts?status=active -``` - -#### 处理预警 -```http -POST /api/alerts/{alert_id}/resolve -Content-Type: application/json - -{ - "resolution": "处理说明" -} -``` - ---- - -## 🗄️ 数据库管理 - -### 数据库初始化 - -系统提供了完整的数据库初始化脚本: - -```bash -python init_database.py -``` - -该脚本会自动执行以下操作: -1. 创建所有必要的数据库表 -2. 添加新字段(如知识库验证字段) -3. 插入初始示例数据 -4. 添加示例车辆数据 -5. 验证所有知识库条目 - -### 数据库表结构 - -#### 1. 知识库表 (knowledge_entries) -```sql -CREATE TABLE knowledge_entries ( - id INTEGER PRIMARY KEY, - question TEXT NOT NULL, - answer TEXT NOT NULL, - category VARCHAR(100), - confidence_score FLOAT DEFAULT 0.5, - usage_count INTEGER DEFAULT 0, - created_at DATETIME DEFAULT CURRENT_TIMESTAMP, - updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, - is_active BOOLEAN DEFAULT TRUE, - is_verified BOOLEAN DEFAULT FALSE, - verified_by VARCHAR(100), - verified_at DATETIME, - vector_embedding TEXT -); -``` - -#### 2. 车辆数据表 (vehicle_data) -```sql -CREATE TABLE vehicle_data ( - id INTEGER PRIMARY KEY, - vehicle_id VARCHAR(50) NOT NULL, - vehicle_vin VARCHAR(17), - data_type VARCHAR(50) NOT NULL, - data_value TEXT NOT NULL, - timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, - is_active BOOLEAN DEFAULT TRUE -); -``` - -#### 3. 工单表 (work_orders) -```sql -CREATE TABLE work_orders ( - id INTEGER PRIMARY KEY, - title VARCHAR(200) NOT NULL, - description TEXT, - status VARCHAR(50) DEFAULT 'open', - priority VARCHAR(20) DEFAULT 'medium', - category VARCHAR(100), - customer_id VARCHAR(100), - assigned_to VARCHAR(100), - created_at DATETIME DEFAULT CURRENT_TIMESTAMP, - updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, - resolved_at DATETIME, - resolution TEXT -); -``` - -#### 4. 对话表 (conversations) -```sql -CREATE TABLE conversations ( - id INTEGER PRIMARY KEY, - user_id VARCHAR(100), - work_order_id INTEGER, - vehicle_id VARCHAR(50), - message TEXT NOT NULL, - response TEXT, - timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, - session_id VARCHAR(100) -); -``` - -#### 5. 分析表 (analytics) -```sql -CREATE TABLE analytics ( - id INTEGER PRIMARY KEY, - date DATE NOT NULL, - metric_name VARCHAR(100) NOT NULL, - metric_value FLOAT NOT NULL, - created_at DATETIME DEFAULT CURRENT_TIMESTAMP -); -``` - -#### 6. 预警表 (alerts) -```sql -CREATE TABLE alerts ( - id INTEGER PRIMARY KEY, - alert_type VARCHAR(100) NOT NULL, - title VARCHAR(200) NOT NULL, - description TEXT, - severity VARCHAR(20) DEFAULT 'medium', - status VARCHAR(20) DEFAULT 'active', - created_at DATETIME DEFAULT CURRENT_TIMESTAMP, - resolved_at DATETIME, - resolution TEXT -); -``` - -### 数据库维护 - -#### 重置数据库 -```bash -python reset_database.py -``` - -#### 创建MySQL数据库 -```bash -python create_mysql_db.py -``` - ---- - -## 🤖 Agent功能 - -### Agent架构 - -TSP智能助手集成了完整的Agent架构,包括: - -1. **Agent核心** (Agent Core): 中央协调器 -2. **规划器** (Planner): 任务规划和分解 -3. **执行器** (Executor): 任务执行管理 -4. **工具管理器** (Tool Manager): 工具注册和调用 -5. **推理引擎** (Reasoning Engine): 逻辑推理和决策 -6. **目标管理器** (Goal Manager): 目标设定和跟踪 - -### Agent工具 - -系统内置了多种Agent工具: - -1. **search_knowledge**: 搜索知识库 -2. **create_work_order**: 创建工单 -3. **update_work_order**: 更新工单 -4. **generate_response**: 生成回复 -5. **analyze_data**: 数据分析 -6. **send_notification**: 发送通知 -7. **schedule_task**: 任务调度 -8. **web_search**: 网络搜索 - -### Agent模式使用 - -#### 启用Agent模式 -```javascript -// 通过Web界面 -fetch('/api/agent/toggle', { - method: 'POST', - headers: {'Content-Type': 'application/json'}, - body: JSON.stringify({enabled: true}) -}); -``` - -#### 启动主动监控 -```javascript -fetch('/api/agent/monitoring/start', {method: 'POST'}); -``` - -#### 获取Agent状态 -```javascript -fetch('/api/agent/status') - .then(response => response.json()) - .then(data => console.log('Agent状态:', data)); -``` - ---- - -## 🚗 车辆数据管理 - -### 车辆数据类型 - -系统支持多种车辆数据类型: - -1. **位置数据** (location): GPS坐标和地址信息 -2. **状态数据** (status): 车辆运行状态 -3. **电池数据** (battery): 电池电量和健康状态 -4. **引擎数据** (engine): 引擎运行参数 -5. **故障数据** (fault): 故障码和诊断信息 - -### 数据格式示例 - -#### 位置数据 -```json -{ - "lat": 39.9042, - "lng": 116.4074, - "address": "北京市朝阳区", - "speed": 60, - "direction": 180 -} -``` - -#### 状态数据 -```json -{ - "engine_status": "running", - "door_status": "locked", - "window_status": "closed", - "light_status": "on" -} -``` - -#### 电池数据 -```json -{ - "battery_level": 85, - "charging_status": "not_charging", - "voltage": 12.6, - "temperature": 25 -} -``` - -### 车辆数据操作 - -#### 添加车辆数据 -```python -from src.vehicle.vehicle_data_manager import VehicleDataManager - -vehicle_manager = VehicleDataManager() - -# 添加位置数据 -vehicle_manager.add_vehicle_data( - vehicle_id="V001", - vehicle_vin="1HGBH41JXMN109186", - data_type="location", - data_value={"lat": 39.9042, "lng": 116.4074} -) - -# 添加状态数据 -vehicle_manager.add_vehicle_data( - vehicle_id="V001", - data_type="status", - data_value={"engine_status": "running", "door_status": "locked"} -) -``` - -#### 查询车辆数据 -```python -# 获取最新数据 -latest_data = vehicle_manager.get_latest_vehicle_data("V001") - -# 获取历史数据 -history_data = vehicle_manager.get_vehicle_data("V001", limit=10) - -# 获取数据摘要 -summary = vehicle_manager.get_vehicle_summary("V001") -``` - -### 车辆数据集成 - -车辆数据会自动集成到对话系统中: - -1. **实时查询**: 对话时自动查询相关车辆数据 -2. **上下文整合**: 将车辆数据与知识库内容结合 -3. **智能分析**: 基于车辆数据提供更准确的建议 - ---- - -## 📚 知识库管理 - -### 知识库结构 - -每个知识库条目包含以下字段: - -- **问题** (question): 用户可能提出的问题 -- **答案** (answer): 对应的详细答案 -- **分类** (category): 问题所属类别 -- **置信度** (confidence_score): 答案的可信度 (0-1) -- **使用次数** (usage_count): 该条目被使用的次数 -- **验证状态** (is_verified): 是否经过人工验证 -- **验证人** (verified_by): 验证人员 -- **验证时间** (verified_at): 验证时间 - -### 知识库分类 - -系统支持以下知识库分类: - -1. **账户问题**: 用户账户相关的问题 -2. **支付问题**: 支付和财务相关的问题 -3. **技术问题**: 技术故障和解决方案 -4. **服务问题**: 客户服务相关问题 -5. **远程控制**: 车辆远程控制功能 -6. **APP功能**: 移动应用功能使用 -7. **车辆绑定**: 车辆绑定和管理 -8. **其他**: 其他类型的问题 - -### 手动添加知识 - -#### 通过Web界面 -1. 进入"知识库"标签页 -2. 点击"添加知识"按钮 -3. 填写问题、答案、分类和置信度 -4. 点击"保存"按钮 - -#### 通过API -```http -POST /api/knowledge/add -Content-Type: application/json - -{ - "question": "如何重置密码?", - "answer": "您可以通过以下步骤重置密码:1. 点击登录页面的'忘记密码'链接 2. 输入您的邮箱地址 3. 检查邮箱并点击重置链接 4. 设置新密码", - "category": "账户问题", - "confidence_score": 0.9 -} -``` - -### 文件导入知识库 - -#### 支持的文件格式 -- **TXT**: 纯文本文件 -- **PDF**: PDF文档 -- **DOC/DOCX**: Word文档 -- **MD**: Markdown文件 - -#### 导入流程 -1. 进入"知识库"标签页 -2. 点击"上传文件"按钮 -3. 选择要上传的文件 -4. 选择处理方式(自动/手动) -5. 设置分类和置信度 -6. 点击"上传"按钮 - -#### 自动知识提取 -系统使用LLM自动从文件中提取问答对: - -1. **内容分析**: 分析文件内容结构 -2. **问题识别**: 识别潜在的问题点 -3. **答案生成**: 生成对应的详细答案 -4. **分类建议**: 自动建议问题分类 -5. **置信度评估**: 评估答案的可信度 - -### 知识库验证 - -#### 验证机制 -- **自动验证**: 系统初始化的知识库条目自动标记为已验证 -- **人工验证**: 新添加的知识库条目需要人工验证 -- **验证状态**: 只有已验证的知识库条目才会在对话中使用 - -#### 验证操作 -1. 进入"知识库"标签页 -2. 找到未验证的知识条目 -3. 点击"验证"按钮确认知识正确性 -4. 或点击"取消验证"按钮标记为未验证 - -### 知识库搜索 - -系统使用TF-IDF向量化技术进行知识库搜索: - -1. **向量化**: 将问题和答案转换为向量 -2. **相似度计算**: 计算用户问题与知识库的相似度 -3. **排序返回**: 按相似度排序返回最相关的知识 - ---- - -## 💬 对话系统 - -### 对话流程 - -1. **接收用户消息**: 通过WebSocket或HTTP接收用户输入 -2. **上下文分析**: 分析对话历史和上下文 -3. **知识库搜索**: 搜索相关的知识库内容 -4. **车辆数据查询**: 如果涉及车辆,查询相关车辆数据 -5. **LLM生成回复**: 使用大语言模型生成回复 -6. **回复优化**: 结合知识库和车辆数据优化回复 -7. **返回结果**: 将最终回复返回给用户 - -### 对话特性 - -#### 1. 上下文记忆 -- 维护对话历史 -- 理解上下文关系 -- 支持多轮对话 - -#### 2. 知识库集成 -- 自动搜索相关知识 -- 只使用已验证的知识 -- 结合多个知识条目 - -#### 3. 车辆数据集成 -- 实时查询车辆状态 -- 结合车辆数据提供建议 -- 支持车辆特定问题 - -#### 4. 工单关联 -- 自动创建工单 -- 关联对话和工单 -- 跟踪问题解决进度 - -### 对话API使用 - -#### WebSocket连接 -```javascript -const ws = new WebSocket('ws://localhost:5000/ws'); - -ws.onopen = function() { - console.log('WebSocket连接已建立'); -}; - -ws.onmessage = function(event) { - const data = JSON.parse(event.data); - console.log('收到消息:', data.message); -}; - -// 发送消息 -ws.send(JSON.stringify({ - message: '我的车辆无法启动', - vehicle_id: 'V001' -})); -``` - -#### HTTP接口 -```javascript -fetch('/api/chat/message', { - method: 'POST', - headers: {'Content-Type': 'application/json'}, - body: JSON.stringify({ - message: '我的车辆无法启动', - vehicle_id: 'V001', - user_id: 'user123' - }) -}) -.then(response => response.json()) -.then(data => console.log('回复:', data.response)); -``` - ---- - -## 🎫 工单管理 - -### 工单状态 - -工单有以下状态: - -1. **open**: 新建工单 -2. **in_progress**: 处理中 -3. **pending**: 等待用户反馈 -4. **resolved**: 已解决 -5. **closed**: 已关闭 - -### 工单优先级 - -1. **low**: 低优先级 -2. **medium**: 中等优先级 -3. **high**: 高优先级 -4. **urgent**: 紧急 - -### 工单分类 - -1. **技术问题**: 技术故障和bug -2. **功能请求**: 新功能需求 -3. **账户问题**: 用户账户相关问题 -4. **支付问题**: 支付和财务问题 -5. **其他**: 其他类型问题 - -### 工单操作 - -#### 创建工单 -```javascript -fetch('/api/work-orders', { - method: 'POST', - headers: {'Content-Type': 'application/json'}, - body: JSON.stringify({ - title: '车辆无法远程启动', - description: '用户反馈车辆无法通过APP远程启动', - priority: 'high', - category: '技术问题', - customer_id: 'customer123' - }) -}); -``` - -#### 更新工单状态 -```javascript -fetch('/api/work-orders/123', { - method: 'PUT', - headers: {'Content-Type': 'application/json'}, - body: JSON.stringify({ - status: 'resolved', - resolution: '已修复远程启动功能' - }) -}); -``` - -#### 获取工单列表 -```javascript -fetch('/api/work-orders?page=1&per_page=10') - .then(response => response.json()) - .then(data => console.log('工单列表:', data)); -``` - ---- - -## 📊 分析报告 - -### 分析指标 - -系统提供以下分析指标: - -1. **对话统计**: 对话数量、响应时间、满意度 -2. **知识库使用**: 知识库命中率、热门问题 -3. **工单分析**: 工单数量、解决时间、分类统计 -4. **车辆数据**: 车辆状态分布、故障统计 -5. **用户行为**: 用户活跃度、功能使用情况 - -### 报告生成 - -#### 获取分析报告 -```javascript -fetch('/api/analytics/report?date=2025-09-06') - .then(response => response.json()) - .then(data => console.log('分析报告:', data)); -``` - -#### 获取KPI数据 -```javascript -fetch('/api/analytics/kpi') - .then(response => response.json()) - .then(data => console.log('KPI数据:', data)); -``` - -### 数据可视化 - -Web界面提供多种图表: - -1. **折线图**: 趋势分析 -2. **柱状图**: 分类统计 -3. **饼图**: 比例分析 -4. **仪表盘**: 实时指标 - ---- - -## 🚨 预警系统 - -### 预警类型 - -1. **系统预警**: 系统性能异常 -2. **业务预警**: 业务指标异常 -3. **安全预警**: 安全相关事件 -4. **数据预警**: 数据异常 - -### 预警级别 - -1. **low**: 低级别预警 -2. **medium**: 中等级别预警 -3. **high**: 高级别预警 -4. **critical**: 严重预警 - -### 预警处理 - -#### 获取预警列表 -```javascript -fetch('/api/alerts?status=active') - .then(response => response.json()) - .then(data => console.log('活跃预警:', data)); -``` - -#### 处理预警 -```javascript -fetch('/api/alerts/123/resolve', { - method: 'POST', - headers: {'Content-Type': 'application/json'}, - body: JSON.stringify({ - resolution: '已修复相关问题' - }) -}); -``` - ---- - -## 🔧 故障排除 - -### 常见问题 - -#### 1. 数据库连接失败 -**症状**: 启动时提示数据库连接失败 -**解决方案**: -- 检查数据库配置是否正确 -- 确认数据库服务是否运行 -- 检查网络连接和防火墙设置 - -#### 2. API密钥无效 -**症状**: LLM调用失败 -**解决方案**: -- 检查阿里云千问API密钥是否正确 -- 确认API密钥是否有效且有足够额度 -- 检查网络连接 - -#### 3. 文件上传失败 -**症状**: 文件上传时提示"文件被占用" -**解决方案**: -- 重启系统 -- 检查临时文件目录权限 -- 清理临时文件 - -#### 4. 知识库显示异常 -**症状**: 知识库内容无法正常显示 -**解决方案**: -- 运行数据库初始化脚本 -- 检查数据库表结构 -- 重新加载知识库 - -### 日志查看 - -#### 查看系统日志 -```bash -# Windows -Get-Content logs/tsp_assistant.log -Tail 50 - -# Linux/Mac -tail -50 logs/tsp_assistant.log -``` - -#### 日志级别 -- **DEBUG**: 详细调试信息 -- **INFO**: 一般信息 -- **WARNING**: 警告信息 -- **ERROR**: 错误信息 -- **CRITICAL**: 严重错误 - -### 性能优化 - -#### 1. 数据库优化 -- 定期清理历史数据 -- 添加必要的索引 -- 优化查询语句 - -#### 2. 缓存优化 -- 启用知识库缓存 -- 缓存频繁查询的数据 -- 使用Redis等缓存系统 - -#### 3. 并发优化 -- 调整WebSocket连接数 -- 优化数据库连接池 -- 使用异步处理 - ---- - -## 👨‍💻 开发指南 - -### 项目结构 - -``` -TSP_assistant/ -├── src/ # 源代码目录 -│ ├── agent/ # Agent相关模块 -│ ├── analytics/ # 分析模块 -│ ├── config/ # 配置模块 -│ ├── core/ # 核心模块 -│ ├── dialogue/ # 对话模块 -│ ├── knowledge_base/ # 知识库模块 -│ ├── utils/ # 工具模块 -│ ├── vehicle/ # 车辆数据模块 -│ └── web/ # Web模块 -├── logs/ # 日志目录 -├── data/ # 数据目录 -├── requirements.txt # 依赖包 -├── init_database.py # 数据库初始化 -└── start_dashboard.py # 启动脚本 -``` - -### 开发环境设置 - -#### 1. 克隆项目 -```bash -git clone -cd TSP_assistant -``` - -#### 2. 创建虚拟环境 -```bash -python -m venv venv -source venv/bin/activate # Linux/Mac -# 或 -venv\Scripts\activate # Windows -``` - -#### 3. 安装依赖 -```bash -pip install -r requirements.txt -``` - -#### 4. 配置环境 -```bash -cp src/config/config.py.example src/config/config.py -# 编辑配置文件 -``` - -### 代码规范 - -#### 1. Python代码规范 -- 使用PEP 8代码风格 -- 添加类型注解 -- 编写文档字符串 -- 使用日志记录 - -#### 2. JavaScript代码规范 -- 使用ES6+语法 -- 添加JSDoc注释 -- 使用const/let替代var -- 处理异步操作 - -#### 3. 数据库规范 -- 使用ORM而不是原生SQL -- 添加适当的索引 -- 使用事务处理 -- 处理异常情况 - -### 测试 - -#### 1. 单元测试 -```bash -python -m pytest tests/ -``` - -#### 2. 集成测试 -```bash -python test_new_features.py -``` - -#### 3. 功能测试 -```bash -python comprehensive_frontend_test.py -``` - -### 部署 - -#### 1. 生产环境配置 -- 使用生产数据库 -- 配置HTTPS -- 设置环境变量 -- 启用日志轮转 - -#### 2. Docker部署 -```dockerfile -FROM python:3.9-slim -WORKDIR /app -COPY requirements.txt . -RUN pip install -r requirements.txt -COPY . . -CMD ["python", "start_dashboard.py"] -``` - -#### 3. 监控和运维 -- 设置健康检查 -- 配置监控告警 -- 定期备份数据 -- 性能监控 - ---- - -## 📞 技术支持 - -### 联系方式 - -- **邮箱**: support@example.com -- **电话**: 400-123-4567 -- **在线客服**: 通过系统内置客服功能 - -### 文档更新 - -本文档会定期更新,请关注最新版本。 - -### 反馈建议 - -如果您在使用过程中遇到问题或有改进建议,请通过以下方式反馈: - -1. 通过系统内置反馈功能 -2. 发送邮件到技术支持邮箱 -3. 提交GitHub Issue - ---- - -**版本**: v2.0 -**更新日期**: 2025-09-06 -**维护团队**: TSP智能助手开发团队 diff --git a/comprehensive_frontend_test.py b/comprehensive_frontend_test.py deleted file mode 100644 index 74e4492..0000000 --- a/comprehensive_frontend_test.py +++ /dev/null @@ -1,505 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -TSP智能助手 - 全面前端功能测试脚本 -测试所有前端页面的功能 -""" - -import requests -import json -import time -import os -import tempfile -from datetime import datetime - -class TSPFrontendTester: - """TSP前端功能测试器""" - - def __init__(self, base_url="http://localhost:5000"): - self.base_url = base_url - self.session = requests.Session() - self.test_results = { - "total_tests": 0, - "passed": 0, - "failed": 0, - "errors": [] - } - - def log_test(self, test_name, success, message=""): - """记录测试结果""" - self.test_results["total_tests"] += 1 - if success: - self.test_results["passed"] += 1 - print(f"✅ {test_name}: {message}") - else: - self.test_results["failed"] += 1 - self.test_results["errors"].append(f"{test_name}: {message}") - print(f"❌ {test_name}: {message}") - - def test_server_connection(self): - """测试服务器连接""" - print("\n" + "="*60) - print("🔗 测试服务器连接") - print("="*60) - - try: - response = self.session.get(f"{self.base_url}/") - if response.status_code == 200: - self.log_test("服务器连接", True, "服务器响应正常") - return True - else: - self.log_test("服务器连接", False, f"HTTP {response.status_code}") - return False - except requests.exceptions.ConnectionError: - self.log_test("服务器连接", False, "无法连接到服务器") - return False - except Exception as e: - self.log_test("服务器连接", False, f"连接错误: {e}") - return False - - def test_health_endpoint(self): - """测试健康检查端点""" - print("\n" + "="*60) - print("🏥 测试健康检查") - print("="*60) - - try: - response = self.session.get(f"{self.base_url}/api/health") - if response.status_code == 200: - data = response.json() - self.log_test("健康检查", True, f"状态: {data.get('status', 'unknown')}") - return True - else: - self.log_test("健康检查", False, f"HTTP {response.status_code}") - return False - except Exception as e: - self.log_test("健康检查", False, f"请求错误: {e}") - return False - - def test_agent_functionality(self): - """测试Agent功能""" - print("\n" + "="*60) - print("🤖 测试Agent功能") - print("="*60) - - # 1. 获取Agent状态 - try: - response = self.session.get(f"{self.base_url}/api/agent/status") - if response.status_code == 200: - data = response.json() - if data.get("success"): - self.log_test("获取Agent状态", True, f"状态: {data.get('status', 'unknown')}") - else: - self.log_test("获取Agent状态", False, "返回失败状态") - else: - self.log_test("获取Agent状态", False, f"HTTP {response.status_code}") - except Exception as e: - self.log_test("获取Agent状态", False, f"请求错误: {e}") - - # 2. 切换Agent模式 - try: - response = self.session.post(f"{self.base_url}/api/agent/toggle", - json={"enabled": True}) - if response.status_code == 200: - data = response.json() - if data.get("success"): - self.log_test("切换Agent模式", True, data.get("message", "切换成功")) - else: - self.log_test("切换Agent模式", False, "切换失败") - else: - self.log_test("切换Agent模式", False, f"HTTP {response.status_code}") - except Exception as e: - self.log_test("切换Agent模式", False, f"请求错误: {e}") - - # 3. 启动Agent监控 - try: - response = self.session.post(f"{self.base_url}/api/agent/monitoring/start") - if response.status_code == 200: - data = response.json() - if data.get("success"): - self.log_test("启动Agent监控", True, data.get("message", "启动成功")) - else: - self.log_test("启动Agent监控", False, "启动失败") - else: - self.log_test("启动Agent监控", False, f"HTTP {response.status_code}") - except Exception as e: - self.log_test("启动Agent监控", False, f"请求错误: {e}") - - # 4. 运行主动监控 - try: - response = self.session.post(f"{self.base_url}/api/agent/proactive-monitoring") - if response.status_code == 200: - data = response.json() - if data.get("success"): - actions = data.get("proactive_actions", []) - self.log_test("运行主动监控", True, f"发现 {len(actions)} 个行动机会") - else: - self.log_test("运行主动监控", False, "监控失败") - else: - self.log_test("运行主动监控", False, f"HTTP {response.status_code}") - except Exception as e: - self.log_test("运行主动监控", False, f"请求错误: {e}") - - # 5. 运行智能分析 - try: - response = self.session.post(f"{self.base_url}/api/agent/intelligent-analysis") - if response.status_code == 200: - data = response.json() - if data.get("success"): - self.log_test("运行智能分析", True, "分析完成") - else: - self.log_test("运行智能分析", False, "分析失败") - else: - self.log_test("运行智能分析", False, f"HTTP {response.status_code}") - except Exception as e: - self.log_test("运行智能分析", False, f"请求错误: {e}") - - def test_knowledge_management(self): - """测试知识库管理功能""" - print("\n" + "="*60) - print("📚 测试知识库管理") - print("="*60) - - # 1. 获取知识库列表 - try: - response = self.session.get(f"{self.base_url}/api/knowledge") - if response.status_code == 200: - knowledge = response.json() - self.log_test("获取知识库列表", True, f"共 {len(knowledge)} 条知识") - else: - self.log_test("获取知识库列表", False, f"HTTP {response.status_code}") - except Exception as e: - self.log_test("获取知识库列表", False, f"请求错误: {e}") - - # 2. 添加知识库条目 - test_knowledge = { - "question": f"测试问题 - {datetime.now().strftime('%H:%M:%S')}", - "answer": "这是一个测试答案,用于验证知识库添加功能是否正常工作。", - "category": "技术问题", - "confidence_score": 0.9 - } - - try: - response = self.session.post(f"{self.base_url}/api/knowledge", - json=test_knowledge) - if response.status_code == 200: - data = response.json() - if data.get("success"): - self.log_test("添加知识库条目", True, data.get("message", "添加成功")) - else: - self.log_test("添加知识库条目", False, "添加失败") - else: - self.log_test("添加知识库条目", False, f"HTTP {response.status_code}") - except Exception as e: - self.log_test("添加知识库条目", False, f"请求错误: {e}") - - # 3. 搜索知识库 - try: - response = self.session.get(f"{self.base_url}/api/knowledge/search?q=测试") - if response.status_code == 200: - results = response.json() - self.log_test("搜索知识库", True, f"找到 {len(results)} 条结果") - else: - self.log_test("搜索知识库", False, f"HTTP {response.status_code}") - except Exception as e: - self.log_test("搜索知识库", False, f"请求错误: {e}") - - # 4. 获取知识库统计 - try: - response = self.session.get(f"{self.base_url}/api/knowledge/stats") - if response.status_code == 200: - stats = response.json() - self.log_test("获取知识库统计", True, f"总条目: {stats.get('total_entries', 0)}") - else: - self.log_test("获取知识库统计", False, f"HTTP {response.status_code}") - except Exception as e: - self.log_test("获取知识库统计", False, f"请求错误: {e}") - - def test_file_upload(self): - """测试文件上传功能""" - print("\n" + "="*60) - print("📁 测试文件上传功能") - print("="*60) - - # 创建测试文件 - test_content = """ -TSP智能助手使用指南 - -1. 系统启动 - - 运行 python start_dashboard.py - - 访问 http://localhost:5000 - -2. 主要功能 - - Agent管理:智能助手模式切换 - - 知识库管理:添加、搜索、上传文件 - - 工单管理:创建、跟踪工单 - - 预警管理:系统监控和预警 - -3. 常见问题 - Q: 如何启动Agent模式? - A: 在Agent管理页面点击开关即可启动 - - Q: 如何添加知识库? - A: 可以手动添加或上传文件自动生成 - - Q: 系统支持哪些文件格式? - A: 支持TXT、PDF、DOC、DOCX、MD格式 -""" - - # 创建临时文件 - with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False, encoding='utf-8') as f: - f.write(test_content) - temp_file_path = f.name - - try: - # 上传文件 - with open(temp_file_path, 'rb') as f: - files = {'file': ('test_guide.txt', f, 'text/plain')} - data = { - 'process_method': 'auto', - 'category': '技术问题', - 'confidence_score': 0.8 - } - - response = self.session.post(f"{self.base_url}/api/knowledge/upload", - files=files, data=data) - - if response.status_code == 200: - result = response.json() - if result.get("success"): - self.log_test("文件上传", True, - f"成功生成 {result.get('knowledge_count', 0)} 条知识") - else: - self.log_test("文件上传", False, result.get("error", "上传失败")) - else: - self.log_test("文件上传", False, f"HTTP {response.status_code}") - - except Exception as e: - self.log_test("文件上传", False, f"请求错误: {e}") - - finally: - # 清理临时文件 - try: - os.unlink(temp_file_path) - except: - pass - - def test_work_order_management(self): - """测试工单管理功能""" - print("\n" + "="*60) - print("📋 测试工单管理") - print("="*60) - - # 1. 获取工单列表 - try: - response = self.session.get(f"{self.base_url}/api/workorders") - if response.status_code == 200: - workorders = response.json() - self.log_test("获取工单列表", True, f"共 {len(workorders)} 个工单") - else: - self.log_test("获取工单列表", False, f"HTTP {response.status_code}") - except Exception as e: - self.log_test("获取工单列表", False, f"请求错误: {e}") - - # 2. 创建工单 - test_workorder = { - "title": f"测试工单 - {datetime.now().strftime('%H:%M:%S')}", - "description": "这是一个测试工单,用于验证工单创建功能。", - "priority": "medium", - "category": "技术问题" - } - - try: - response = self.session.post(f"{self.base_url}/api/workorders", - json=test_workorder) - if response.status_code == 200: - data = response.json() - if data.get("success"): - self.log_test("创建工单", True, data.get("message", "创建成功")) - else: - self.log_test("创建工单", False, "创建失败") - else: - self.log_test("创建工单", False, f"HTTP {response.status_code}") - except Exception as e: - self.log_test("创建工单", False, f"请求错误: {e}") - - def test_analytics(self): - """测试数据分析功能""" - print("\n" + "="*60) - print("📊 测试数据分析") - print("="*60) - - try: - response = self.session.get(f"{self.base_url}/api/analytics") - if response.status_code == 200: - analytics = response.json() - self.log_test("获取分析数据", True, "数据获取成功") - else: - self.log_test("获取分析数据", False, f"HTTP {response.status_code}") - except Exception as e: - self.log_test("获取分析数据", False, f"请求错误: {e}") - - def test_system_settings(self): - """测试系统设置功能""" - print("\n" + "="*60) - print("⚙️ 测试系统设置") - print("="*60) - - # 1. 获取系统设置 - try: - response = self.session.get(f"{self.base_url}/api/settings") - if response.status_code == 200: - settings = response.json() - self.log_test("获取系统设置", True, "设置获取成功") - else: - self.log_test("获取系统设置", False, f"HTTP {response.status_code}") - except Exception as e: - self.log_test("获取系统设置", False, f"请求错误: {e}") - - # 2. 获取系统信息 - try: - response = self.session.get(f"{self.base_url}/api/system/info") - if response.status_code == 200: - info = response.json() - self.log_test("获取系统信息", True, f"版本: {info.get('version', 'unknown')}") - else: - self.log_test("获取系统信息", False, f"HTTP {response.status_code}") - except Exception as e: - self.log_test("获取系统信息", False, f"请求错误: {e}") - - def test_chat_functionality(self): - """测试聊天功能""" - print("\n" + "="*60) - print("💬 测试聊天功能") - print("="*60) - - # 1. 创建聊天会话 - try: - response = self.session.post(f"{self.base_url}/api/chat/session") - if response.status_code == 200: - data = response.json() - if data.get("success"): - session_id = data.get("session_id") - self.log_test("创建聊天会话", True, f"会话ID: {session_id}") - - # 2. 发送消息 - test_message = { - "message": "你好,这是一个测试消息", - "session_id": session_id - } - - response = self.session.post(f"{self.base_url}/api/chat/message", - json=test_message) - if response.status_code == 200: - data = response.json() - if data.get("success"): - self.log_test("发送聊天消息", True, "消息发送成功") - else: - self.log_test("发送聊天消息", False, "消息发送失败") - else: - self.log_test("发送聊天消息", False, f"HTTP {response.status_code}") - else: - self.log_test("创建聊天会话", False, "会话创建失败") - else: - self.log_test("创建聊天会话", False, f"HTTP {response.status_code}") - except Exception as e: - self.log_test("创建聊天会话", False, f"请求错误: {e}") - - def test_alert_management(self): - """测试预警管理功能""" - print("\n" + "="*60) - print("🚨 测试预警管理") - print("="*60) - - # 1. 获取预警列表 - try: - response = self.session.get(f"{self.base_url}/api/alerts") - if response.status_code == 200: - alerts = response.json() - self.log_test("获取预警列表", True, f"共 {len(alerts)} 个预警") - else: - self.log_test("获取预警列表", False, f"HTTP {response.status_code}") - except Exception as e: - self.log_test("获取预警列表", False, f"请求错误: {e}") - - # 2. 获取预警规则 - try: - response = self.session.get(f"{self.base_url}/api/alerts/rules") - if response.status_code == 200: - rules = response.json() - self.log_test("获取预警规则", True, f"共 {len(rules)} 条规则") - else: - self.log_test("获取预警规则", False, f"HTTP {response.status_code}") - except Exception as e: - self.log_test("获取预警规则", False, f"请求错误: {e}") - - def run_all_tests(self): - """运行所有测试""" - print("🚀 TSP智能助手 - 全面前端功能测试") - print("="*60) - print(f"测试时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") - print(f"测试目标: {self.base_url}") - - # 基础连接测试 - if not self.test_server_connection(): - print("\n❌ 服务器连接失败,请确保服务已启动") - return - - # 运行所有功能测试 - self.test_health_endpoint() - self.test_agent_functionality() - self.test_knowledge_management() - self.test_file_upload() - self.test_work_order_management() - self.test_analytics() - self.test_system_settings() - self.test_chat_functionality() - self.test_alert_management() - - # 输出测试结果 - self.print_test_summary() - - def print_test_summary(self): - """打印测试总结""" - print("\n" + "="*60) - print("📊 测试结果总结") - print("="*60) - - total = self.test_results["total_tests"] - passed = self.test_results["passed"] - failed = self.test_results["failed"] - - print(f"总测试数: {total}") - print(f"通过: {passed} ✅") - print(f"失败: {failed} ❌") - print(f"成功率: {(passed/total*100):.1f}%" if total > 0 else "成功率: 0%") - - if failed > 0: - print("\n❌ 失败的测试:") - for error in self.test_results["errors"]: - print(f" - {error}") - - print("\n" + "="*60) - if failed == 0: - print("🎉 所有测试通过!系统功能正常") - else: - print("⚠️ 部分测试失败,请检查相关功能") - print("="*60) - -def main(): - """主函数""" - import argparse - - parser = argparse.ArgumentParser(description='TSP智能助手前端功能测试') - parser.add_argument('--url', default='http://localhost:5000', - help='服务器地址 (默认: http://localhost:5000)') - parser.add_argument('--verbose', action='store_true', - help='详细输出') - - args = parser.parse_args() - - tester = TSPFrontendTester(args.url) - tester.run_all_tests() - -if __name__ == "__main__": - main() diff --git a/config/llm_config.py b/config/llm_config.py index 0ede937..cd69255 100644 --- a/config/llm_config.py +++ b/config/llm_config.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ LLM配置文件 - 千问模型配置 @@ -8,10 +7,10 @@ from src.agent.llm_client import LLMConfig # 千问模型配置 QWEN_CONFIG = LLMConfig( - provider="openai", - api_key="sk-your-qwen-api-key-here", # 请替换为您的千问API密钥 + provider="qwen", + api_key="sk-c0dbefa1718d46eaa897199135066f00", # 请替换为您的千问API密钥 base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", - model="qwen-turbo", # 可选: qwen-turbo, qwen-plus, qwen-max + model="qwen-plus-latest", # 可选: qwen-turbo, qwen-plus, qwen-max temperature=0.7, max_tokens=2000 ) diff --git a/create_mysql_db.py b/create_mysql_db.py deleted file mode 100644 index 991ab14..0000000 --- a/create_mysql_db.py +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -MySQL数据库创建脚本 -""" - -import pymysql -import sys - -def create_database(): - """创建MySQL数据库""" - print("=" * 50) - print("MySQL数据库创建") - print("=" * 50) - - try: - # 连接MySQL服务器(不指定数据库) - connection = pymysql.connect( - host='localhost', - user='root', - password='123456', - charset='utf8mb4' - ) - - cursor = connection.cursor() - - # 创建数据库 - database_name = 'tsp_assistant' - cursor.execute(f"CREATE DATABASE IF NOT EXISTS {database_name} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci") - print(f"✓ 数据库 {database_name} 创建成功") - - # 创建用户(可选) - try: - cursor.execute("CREATE USER IF NOT EXISTS 'tsp_user'@'localhost' IDENTIFIED BY 'tsp_password'") - cursor.execute(f"GRANT ALL PRIVILEGES ON {database_name}.* TO 'tsp_user'@'localhost'") - cursor.execute("FLUSH PRIVILEGES") - print("✓ 用户 tsp_user 创建成功") - except Exception as e: - print(f"⚠ 用户创建失败(可能已存在): {e}") - - connection.commit() - cursor.close() - connection.close() - - print("✓ MySQL数据库设置完成") - return True - - except Exception as e: - print(f"✗ MySQL数据库创建失败: {e}") - print("\n请检查:") - print("1. MySQL服务是否已启动") - print("2. 用户名和密码是否正确") - print("3. 是否有创建数据库的权限") - return False - -def test_connection(): - """测试数据库连接""" - print("\n" + "=" * 50) - print("测试数据库连接") - print("=" * 50) - - try: - connection = pymysql.connect( - host='localhost', - user='root', - password='123456', - database='tsp_assistant', - charset='utf8mb4' - ) - - cursor = connection.cursor() - cursor.execute("SELECT VERSION()") - version = cursor.fetchone() - print(f"✓ MySQL连接成功,版本: {version[0]}") - - cursor.close() - connection.close() - return True - - except Exception as e: - print(f"✗ MySQL连接失败: {e}") - return False - -def main(): - """主函数""" - print("TSP助手MySQL数据库设置工具") - print("=" * 50) - - # 创建数据库 - if create_database(): - # 测试连接 - if test_connection(): - print("\n" + "=" * 50) - print("MySQL数据库设置成功!") - print("=" * 50) - print("现在您可以运行以下命令初始化数据库:") - print("python init_database.py") - else: - print("\n" + "=" * 50) - print("数据库连接测试失败!") - print("=" * 50) - else: - print("\n" + "=" * 50) - print("MySQL数据库设置失败!") - print("=" * 50) - -if __name__ == "__main__": - main() diff --git a/data/system_settings.json b/data/system_settings.json new file mode 100644 index 0000000..93ab141 --- /dev/null +++ b/data/system_settings.json @@ -0,0 +1,7 @@ +{ + "api_timeout": 30, + "max_history": 10, + "refresh_interval": 10, + "auto_monitoring": true, + "agent_mode": true +} \ No newline at end of file diff --git a/deploy.py b/deploy.py deleted file mode 100644 index 8fb5bf8..0000000 --- a/deploy.py +++ /dev/null @@ -1,438 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -TSP智能助手部署管理脚本 -支持自动化部署、升级和回滚 -""" - -import os -import sys -import json -import shutil -import subprocess -import argparse -from datetime import datetime -from pathlib import Path -from typing import Dict, List, Optional - -class DeploymentManager: - """部署管理器""" - - def __init__(self, config_file: str = "deploy_config.json"): - self.config_file = config_file - self.config = self._load_config() - self.backup_dir = Path("backups") - self.backup_dir.mkdir(exist_ok=True) - - def _load_config(self) -> Dict: - """加载部署配置""" - if os.path.exists(self.config_file): - try: - with open(self.config_file, 'r', encoding='utf-8') as f: - return json.load(f) - except Exception as e: - print(f"加载配置失败: {e}") - - # 默认配置 - return { - "environment": "production", - "app_name": "tsp_assistant", - "deploy_path": "/opt/tsp_assistant", - "backup_path": "./backups", - "service_name": "tsp_assistant", - "python_path": "python3", - "pip_path": "pip3", - "nginx_config": "/etc/nginx/sites-available/tsp_assistant", - "systemd_service": "/etc/systemd/system/tsp_assistant.service", - "database_backup": True, - "auto_restart": True, - "health_check_url": "http://localhost:5000/api/health" - } - - def _run_command(self, command: str, check: bool = True) -> subprocess.CompletedProcess: - """执行命令""" - print(f"执行命令: {command}") - try: - result = subprocess.run(command, shell=True, check=check, - capture_output=True, text=True) - if result.stdout: - print(f"输出: {result.stdout}") - return result - except subprocess.CalledProcessError as e: - print(f"命令执行失败: {e}") - if e.stderr: - print(f"错误: {e.stderr}") - raise - - def backup_current_deployment(self) -> str: - """备份当前部署""" - timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") - backup_name = f"{self.config['app_name']}_backup_{timestamp}" - backup_path = self.backup_dir / backup_name - - print(f"创建备份: {backup_path}") - - # 备份应用文件 - if os.path.exists(self.config['deploy_path']): - shutil.copytree(self.config['deploy_path'], backup_path) - - # 备份数据库 - if self.config.get('database_backup', True): - self._backup_database(backup_path) - - # 保存备份信息 - backup_info = { - "backup_name": backup_name, - "backup_path": str(backup_path), - "timestamp": timestamp, - "version": self._get_current_version(), - "git_commit": self._get_git_commit() - } - - with open(backup_path / "backup_info.json", 'w') as f: - json.dump(backup_info, f, indent=2) - - print(f"备份完成: {backup_name}") - return backup_name - - def _backup_database(self, backup_path: Path): - """备份数据库""" - try: - # 创建数据库备份目录 - db_backup_dir = backup_path / "database" - db_backup_dir.mkdir(exist_ok=True) - - # 备份SQLite数据库 - db_file = "tsp_assistant.db" - if os.path.exists(db_file): - shutil.copy2(db_file, db_backup_dir / db_file) - print(f"已备份SQLite数据库: {db_file}") - - # 备份MySQL数据库(如果使用) - mysql_config = self._get_mysql_config() - if mysql_config: - dump_file = db_backup_dir / "mysql_dump.sql" - cmd = f"mysqldump -h{mysql_config['host']} -u{mysql_config['user']} -p{mysql_config['password']} {mysql_config['database']} > {dump_file}" - self._run_command(cmd) - print(f"已备份MySQL数据库: {mysql_config['database']}") - - except Exception as e: - print(f"数据库备份失败: {e}") - - def _get_mysql_config(self) -> Optional[Dict]: - """获取MySQL配置""" - try: - from src.config.config import Config - db_url = Config.DATABASE_URL - if db_url.startswith("mysql"): - # 解析MySQL连接字符串 - # mysql+pymysql://user:password@host/database - parts = db_url.split("://")[1].split("@") - user_pass = parts[0].split(":") - host_db = parts[1].split("/") - return { - "user": user_pass[0], - "password": user_pass[1], - "host": host_db[0], - "database": host_db[1].split("?")[0] - } - except: - pass - return None - - def _get_current_version(self) -> str: - """获取当前版本""" - try: - from version import VersionManager - vm = VersionManager() - return vm.get_version() - except: - return "unknown" - - def _get_git_commit(self) -> str: - """获取Git提交哈希""" - try: - result = subprocess.run(['git', 'rev-parse', 'HEAD'], - capture_output=True, text=True) - return result.stdout.strip()[:8] if result.returncode == 0 else "unknown" - except: - return "unknown" - - def deploy(self, source_path: str = ".", force: bool = False) -> bool: - """部署应用""" - try: - print("开始部署...") - - # 检查目标路径 - deploy_path = Path(self.config['deploy_path']) - if deploy_path.exists() and not force: - response = input(f"目标路径 {deploy_path} 已存在,是否继续?(y/N): ") - if response.lower() != 'y': - print("部署取消") - return False - - # 创建备份 - backup_name = self.backup_current_deployment() - - # 停止服务 - if self.config.get('auto_restart', True): - self.stop_service() - - # 部署新版本 - self._deploy_files(source_path, deploy_path) - - # 安装依赖 - self._install_dependencies(deploy_path) - - # 运行数据库迁移 - self._run_database_migrations(deploy_path) - - # 启动服务 - if self.config.get('auto_restart', True): - self.start_service() - - # 健康检查 - if not self._health_check(): - print("健康检查失败,开始回滚...") - self.rollback(backup_name) - return False - - print("部署成功!") - return True - - except Exception as e: - print(f"部署失败: {e}") - return False - - def _deploy_files(self, source_path: str, deploy_path: Path): - """部署文件""" - print(f"部署文件从 {source_path} 到 {deploy_path}") - - # 创建目标目录 - deploy_path.mkdir(parents=True, exist_ok=True) - - # 复制文件 - source = Path(source_path) - for item in source.iterdir(): - if item.name.startswith('.') and item.name not in ['.git', '.env']: - continue - - if item.is_file(): - shutil.copy2(item, deploy_path / item.name) - elif item.is_dir(): - shutil.copytree(item, deploy_path / item.name, dirs_exist_ok=True) - - print("文件部署完成") - - def _install_dependencies(self, deploy_path: Path): - """安装依赖""" - print("安装依赖包...") - - requirements_file = deploy_path / "requirements.txt" - if requirements_file.exists(): - cmd = f"cd {deploy_path} && {self.config['pip_path']} install -r requirements.txt" - self._run_command(cmd) - else: - print("未找到requirements.txt文件") - - def _run_database_migrations(self, deploy_path: Path): - """运行数据库迁移""" - print("运行数据库迁移...") - - try: - # 运行数据库初始化脚本 - init_script = deploy_path / "init_database.py" - if init_script.exists(): - cmd = f"cd {deploy_path} && {self.config['python_path']} init_database.py" - self._run_command(cmd) - except Exception as e: - print(f"数据库迁移失败: {e}") - - def start_service(self): - """启动服务""" - print("启动服务...") - - if self.config.get('service_name'): - try: - self._run_command(f"systemctl start {self.config['service_name']}") - print("服务启动成功") - except: - print("使用systemctl启动失败,尝试直接启动...") - self._start_directly() - else: - self._start_directly() - - def stop_service(self): - """停止服务""" - print("停止服务...") - - if self.config.get('service_name'): - try: - self._run_command(f"systemctl stop {self.config['service_name']}", check=False) - except: - pass - - # 杀死相关进程 - try: - self._run_command("pkill -f 'python.*start_dashboard.py'", check=False) - self._run_command("pkill -f 'python.*app.py'", check=False) - except: - pass - - def _start_directly(self): - """直接启动应用""" - deploy_path = self.config['deploy_path'] - start_script = Path(deploy_path) / "start_dashboard.py" - - if start_script.exists(): - cmd = f"cd {deploy_path} && nohup {self.config['python_path']} start_dashboard.py > logs/deploy.log 2>&1 &" - self._run_command(cmd) - print("应用已启动") - - def _health_check(self) -> bool: - """健康检查""" - print("执行健康检查...") - - try: - import requests - response = requests.get(self.config['health_check_url'], timeout=10) - if response.status_code == 200: - print("健康检查通过") - return True - except Exception as e: - print(f"健康检查失败: {e}") - - return False - - def rollback(self, backup_name: str = None) -> bool: - """回滚到指定备份""" - try: - if backup_name is None: - # 获取最新的备份 - backups = list(self.backup_dir.glob("*backup_*")) - if not backups: - print("没有找到备份") - return False - backup_name = max(backups, key=os.path.getctime).name - - backup_path = self.backup_dir / backup_name - if not backup_path.exists(): - print(f"备份不存在: {backup_name}") - return False - - print(f"回滚到备份: {backup_name}") - - # 停止服务 - self.stop_service() - - # 恢复文件 - deploy_path = Path(self.config['deploy_path']) - if deploy_path.exists(): - shutil.rmtree(deploy_path) - - shutil.copytree(backup_path, deploy_path) - - # 恢复数据库 - self._restore_database(backup_path) - - # 启动服务 - self.start_service() - - print("回滚完成") - return True - - except Exception as e: - print(f"回滚失败: {e}") - return False - - def _restore_database(self, backup_path: Path): - """恢复数据库""" - try: - db_backup_dir = backup_path / "database" - if db_backup_dir.exists(): - # 恢复SQLite数据库 - db_file = db_backup_dir / "tsp_assistant.db" - if db_file.exists(): - shutil.copy2(db_file, "tsp_assistant.db") - print("已恢复SQLite数据库") - - # 恢复MySQL数据库 - mysql_dump = db_backup_dir / "mysql_dump.sql" - if mysql_dump.exists(): - mysql_config = self._get_mysql_config() - if mysql_config: - cmd = f"mysql -h{mysql_config['host']} -u{mysql_config['user']} -p{mysql_config['password']} {mysql_config['database']} < {mysql_dump}" - self._run_command(cmd) - print("已恢复MySQL数据库") - except Exception as e: - print(f"数据库恢复失败: {e}") - - def list_backups(self): - """列出所有备份""" - backups = list(self.backup_dir.glob("*backup_*")) - if not backups: - print("没有找到备份") - return - - print("可用备份:") - for backup in sorted(backups, key=os.path.getctime, reverse=True): - backup_info_file = backup / "backup_info.json" - if backup_info_file.exists(): - try: - with open(backup_info_file, 'r') as f: - info = json.load(f) - print(f" {info['backup_name']} - 版本: {info['version']} - {info['timestamp']}") - except: - print(f" {backup.name}") - else: - print(f" {backup.name}") - - def cleanup_old_backups(self, keep_count: int = 5): - """清理旧备份""" - backups = list(self.backup_dir.glob("*backup_*")) - if len(backups) <= keep_count: - print(f"备份数量({len(backups)})不超过保留数量({keep_count})") - return - - # 按创建时间排序,保留最新的 - backups.sort(key=os.path.getctime, reverse=True) - to_delete = backups[keep_count:] - - for backup in to_delete: - print(f"删除备份: {backup.name}") - shutil.rmtree(backup) - -def main(): - """命令行接口""" - parser = argparse.ArgumentParser(description='TSP智能助手部署管理') - parser.add_argument('action', choices=['deploy', 'rollback', 'backup', 'list-backups', 'cleanup'], - help='要执行的操作') - parser.add_argument('--source', default='.', help='源代码路径') - parser.add_argument('--backup', help='备份名称') - parser.add_argument('--force', action='store_true', help='强制部署') - parser.add_argument('--keep', type=int, default=5, help='保留备份数量') - - args = parser.parse_args() - - dm = DeploymentManager() - - if args.action == 'deploy': - success = dm.deploy(args.source, args.force) - sys.exit(0 if success else 1) - - elif args.action == 'rollback': - success = dm.rollback(args.backup) - sys.exit(0 if success else 1) - - elif args.action == 'backup': - backup_name = dm.backup_current_deployment() - print(f"备份完成: {backup_name}") - - elif args.action == 'list-backups': - dm.list_backups() - - elif args.action == 'cleanup': - dm.cleanup_old_backups(args.keep) - -if __name__ == "__main__": - main() diff --git a/deploy_config.json b/deploy_config.json deleted file mode 100644 index 7390733..0000000 --- a/deploy_config.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "environment": "production", - "app_name": "tsp_assistant", - "deploy_path": "/opt/tsp_assistant", - "backup_path": "./backups", - "service_name": "tsp_assistant", - "python_path": "python3", - "pip_path": "pip3", - "nginx_config": "/etc/nginx/sites-available/tsp_assistant", - "systemd_service": "/etc/systemd/system/tsp_assistant.service", - "database_backup": true, - "auto_restart": true, - "health_check_url": "http://localhost:5000/api/health", - "environments": { - "development": { - "deploy_path": "./dev_deploy", - "service_name": null, - "auto_restart": false, - "health_check_url": "http://localhost:5000/api/health" - }, - "staging": { - "deploy_path": "/opt/tsp_assistant_staging", - "service_name": "tsp_assistant_staging", - "auto_restart": true, - "health_check_url": "http://staging.example.com/api/health" - }, - "production": { - "deploy_path": "/opt/tsp_assistant", - "service_name": "tsp_assistant", - "auto_restart": true, - "health_check_url": "http://production.example.com/api/health" - } - } -} diff --git a/fix_database_schema.py b/fix_database_schema.py deleted file mode 100644 index 592f998..0000000 --- a/fix_database_schema.py +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -数据库架构修复脚本 -添加缺失的字段和修复表结构 -""" - -import sys -import os -from sqlalchemy import text - -# 添加项目根目录到Python路径 -sys.path.append(os.path.dirname(os.path.abspath(__file__))) - -from src.core.database import db_manager -from src.core.models import Base -import logging - -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger(__name__) - -def fix_database_schema(): - """修复数据库架构""" - try: - with db_manager.get_session() as session: - # 检查并添加severity字段到alerts表 - try: - # 检查字段是否存在 - result = session.execute(text(""" - SELECT COUNT(*) as count - FROM information_schema.columns - WHERE table_name = 'alerts' AND column_name = 'severity' - """)) - - if result.fetchone()[0] == 0: - logger.info("添加severity字段到alerts表...") - session.execute(text("ALTER TABLE alerts ADD COLUMN severity VARCHAR(20) DEFAULT 'medium'")) - session.commit() - logger.info("severity字段添加成功") - else: - logger.info("severity字段已存在") - - except Exception as e: - logger.warning(f"添加severity字段失败: {e}") - # 如果是SQLite,尝试不同的方法 - try: - session.execute(text("ALTER TABLE alerts ADD COLUMN severity VARCHAR(20) DEFAULT 'medium'")) - session.commit() - logger.info("severity字段添加成功(SQLite)") - except Exception as e2: - logger.error(f"SQLite添加severity字段也失败: {e2}") - - # 检查并添加is_verified相关字段到knowledge_entries表 - try: - result = session.execute(text(""" - SELECT COUNT(*) as count - FROM information_schema.columns - WHERE table_name = 'knowledge_entries' AND column_name = 'is_verified' - """)) - - if result.fetchone()[0] == 0: - logger.info("添加is_verified字段到knowledge_entries表...") - session.execute(text("ALTER TABLE knowledge_entries ADD COLUMN is_verified BOOLEAN DEFAULT FALSE")) - session.execute(text("ALTER TABLE knowledge_entries ADD COLUMN verified_by VARCHAR(100)")) - session.execute(text("ALTER TABLE knowledge_entries ADD COLUMN verified_at DATETIME")) - session.commit() - logger.info("is_verified相关字段添加成功") - else: - logger.info("is_verified字段已存在") - - except Exception as e: - logger.warning(f"添加is_verified字段失败: {e}") - # SQLite方法 - try: - session.execute(text("ALTER TABLE knowledge_entries ADD COLUMN is_verified BOOLEAN DEFAULT FALSE")) - session.execute(text("ALTER TABLE knowledge_entries ADD COLUMN verified_by VARCHAR(100)")) - session.execute(text("ALTER TABLE knowledge_entries ADD COLUMN verified_at DATETIME")) - session.commit() - logger.info("is_verified相关字段添加成功(SQLite)") - except Exception as e2: - logger.error(f"SQLite添加is_verified字段也失败: {e2}") - - logger.info("数据库架构修复完成") - - except Exception as e: - logger.error(f"数据库架构修复失败: {e}") - raise - -if __name__ == "__main__": - fix_database_schema() diff --git a/init_database.py b/init_database.py index 8a3067b..1a41485 100644 --- a/init_database.py +++ b/init_database.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ TSP助手数据库初始化脚本 - 包含所有数据库操作 @@ -73,7 +73,7 @@ def migrate_database(): is_mysql = 'mysql' in str(db_url) is_sqlite = 'sqlite' in str(db_url) - print(" 📝 检查知识库验证字段...") + print(" 📝 检查知识库验证字段与预警字段...") # 检查is_verified字段是否存在 if is_mysql: @@ -152,6 +152,31 @@ def migrate_database(): print(" ✅ verified_at字段添加成功") else: print(" ✅ verified_at字段已存在") + + # 检查alerts.severity字段是否存在 + if is_mysql: + result = session.execute(text(""" + SELECT COUNT(*) as count + FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'alerts' + AND COLUMN_NAME = 'severity' + """)).fetchone() + else: # SQLite + result = session.execute(text(""" + SELECT COUNT(*) as count + FROM pragma_table_info('alerts') + WHERE name = 'severity' + """)).fetchone() + if result.count == 0: + print(" ➕ 添加alerts.severity字段...") + if is_mysql: + session.execute(text("ALTER TABLE alerts ADD COLUMN severity VARCHAR(20) DEFAULT 'medium'")) + else: + session.execute(text("ALTER TABLE alerts ADD COLUMN severity VARCHAR(20) DEFAULT 'medium'")) + print(" ✅ alerts.severity 字段添加成功") + else: + print(" ✅ alerts.severity 字段已存在") # 检查车辆数据表是否存在 if is_mysql: @@ -183,6 +208,46 @@ def migrate_database(): return True +def reset_database(force: bool = False) -> bool: + """重置数据库:删除并重建所有表,再插入初始数据""" + print("=" * 50) + print("TSP助手数据库重置") + print("=" * 50) + + try: + # 可选确认 + if not force: + try: + confirm = input("⚠️ 警告:此操作将删除所有数据!确定要继续吗?(y/N): ") + if confirm.lower() != 'y': + print("操作已取消") + return False + except Exception: + # 非交互环境下默认取消,建议调用方传入 force=True + print("非交互环境未传入 force=True,已取消") + return False + + # 删除所有表 + Base.metadata.drop_all(bind=db_manager.engine) + print("✓ 数据库表删除成功") + + # 重新创建所有表 + Base.metadata.create_all(bind=db_manager.engine) + print("✓ 数据库表重新创建成功") + + # 迁移补齐新增字段 + migrate_database() + + # 插入初始数据 + insert_initial_data() + + print("✓ 数据库重置完成") + return True + + except Exception as e: + print(f"✗ 数据库重置失败: {e}") + return False + def insert_initial_data(): """插入初始数据""" try: diff --git a/logs/dashboard.log b/logs/dashboard.log deleted file mode 100644 index 4ee8fed..0000000 --- a/logs/dashboard.log +++ /dev/null @@ -1,3676 +0,0 @@ -2025-09-06 17:34:42,187 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 17:34:43,029 - src.core.database - INFO - ݿʼɹ -2025-09-06 17:34:44,184 - src.knowledge_base.knowledge_manager - INFO - سɹ 39 Ŀ -2025-09-06 17:34:44,208 - src.knowledge_base.knowledge_manager - INFO - سɹ 39 Ŀ -2025-09-06 17:34:44,208 - src.main - INFO - TSPֳʼ -2025-09-06 17:34:44,218 - src.knowledge_base.knowledge_manager - INFO - سɹ 39 Ŀ -2025-09-06 17:34:44,266 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://172.20.10.9:5000 -2025-09-06 17:34:44,267 - werkzeug - INFO - Press CTRL+C to quit -2025-09-06 17:34:47,618 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:34:47] "GET / HTTP/1.1" 200 - -2025-09-06 17:34:47,803 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:34:47] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-06 17:34:48,139 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:34:48] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 17:34:48,141 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:34:48] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:34:48,144 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:34:48] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 17:34:48,190 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:34:48] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:34:48,200 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:34:48] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 17:34:48,201 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:34:48] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:34:48,247 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:34:48] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-06 17:34:53,112 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:34:53] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-06 17:34:53,157 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:34:53] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:34:58,136 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:34:58] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-06 17:34:58,155 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:34:58] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:35:01,305 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:01] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:35:03,149 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:03] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:35:05,069 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:05] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:35:08,149 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:08] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:35:13,150 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:35:15,003 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:15] "GET /api/settings HTTP/1.1" 200 - -2025-09-06 17:35:16,165 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 17:35:16,165 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 17:35:16,172 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 17:35:16,180 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 17:35:16,187 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:16] "GET /api/analytics HTTP/1.1" 200 - -2025-09-06 17:35:18,139 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:18] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:35:19,291 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:19] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:35:20,032 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:20] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-06 17:35:22,098 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:22] "POST /api/agent/monitoring/start HTTP/1.1" 200 - -2025-09-06 17:35:23,142 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:23] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:35:28,136 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:28] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-06 17:35:28,148 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:28] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:35:28,242 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:28] "POST /api/agent/proactive-monitoring HTTP/1.1" 200 - -2025-09-06 17:35:31,320 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:31] "POST /api/agent/intelligent-analysis HTTP/1.1" 200 - -2025-09-06 17:35:33,149 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:33] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:35:36,721 - src.dialogue.realtime_chat - INFO - »Ự: session_user_001_1757151336 -2025-09-06 17:35:36,721 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:36] "POST /api/chat/session HTTP/1.1" 200 - -2025-09-06 17:35:38,148 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:38] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:35:43,157 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:43] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:35:48,145 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:48] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:35:50,520 - src.core.llm_client - INFO - APIɹ -2025-09-06 17:35:50,538 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:50] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 17:35:53,148 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:53] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:35:59,095 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:35:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:36:03,142 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:36:03] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:36:09,082 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:36:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:36:14,084 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:36:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:36:19,083 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:36:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:36:24,083 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:36:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:36:29,074 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:36:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:36:34,090 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:36:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:36:38,603 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:36:38] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:36:43,149 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:36:43] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:36:45,045 - src.core.llm_client - INFO - APIɹ -2025-09-06 17:36:45,060 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:36:45] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 17:36:49,086 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:36:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:36:54,102 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:36:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:36:59,091 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:36:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:37:04,091 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:37:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:37:09,094 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:37:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:37:14,086 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:37:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:37:19,095 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:37:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:37:24,099 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:37:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:37:29,089 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:37:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:37:34,098 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:37:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:37:39,105 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:37:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:37:44,100 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:37:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:37:50,611 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:37:50] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:37:52,984 - src.dialogue.realtime_chat - INFO - Ự: session_user_001_1757151336 -2025-09-06 17:37:52,984 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:37:52] "DELETE /api/chat/session/session_user_001_1757151336 HTTP/1.1" 200 - -2025-09-06 17:37:53,159 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:37:53] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:37:58,156 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:37:58] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:38:03,156 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:03] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:38:08,154 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:08] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:38:13,157 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:38:15,989 - src.dialogue.dialogue_manager - INFO - ɹ: WO20250906173815 -2025-09-06 17:38:15,992 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:15] "POST /api/workorders HTTP/1.1" 200 - -2025-09-06 17:38:16,004 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:16] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:38:18,184 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:18] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:38:19,525 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:19] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-06 17:38:21,067 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:21] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 17:38:21,072 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:21] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:38:21,084 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:21] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:38:21,094 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:21] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 17:38:23,157 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:23] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:38:28,144 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:28] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 17:38:28,150 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:28] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:38:28,165 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:28] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:38:28,183 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:28] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 17:38:28,198 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:28] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:38:31,539 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:31] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:38:33,162 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:33] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:38:34,428 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 17:38:34,429 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 17:38:34,438 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 17:38:34,439 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 17:38:34,444 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:34] "GET /api/analytics HTTP/1.1" 200 - -2025-09-06 17:38:35,662 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:35] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:38:35,932 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 17:38:37,460 - __main__ - INFO - ûֶֹͣ -2025-09-06 17:38:38,155 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:38] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:38:42,795 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:42] "GET /api/workorders?status=open HTTP/1.1" 200 - -2025-09-06 17:38:43,153 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:43] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:38:46,004 - src.dialogue.realtime_chat - INFO - »Ự: session_test_user_1757151526 -2025-09-06 17:38:46,005 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:46] "POST /api/chat/session HTTP/1.1" 200 - -2025-09-06 17:38:48,157 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:48] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:38:52,463 - src.core.llm_client - INFO - APIɹ -2025-09-06 17:38:52,485 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:52] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 17:38:53,154 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:53] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:38:54,828 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:54] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:38:58,159 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:38:58] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:39:00,192 - src.core.llm_client - INFO - APIɹ -2025-09-06 17:39:00,208 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:00] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 17:39:03,155 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:03] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:39:07,214 - src.core.llm_client - INFO - APIɹ -2025-09-06 17:39:07,234 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:07] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 17:39:08,162 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:08] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:39:13,155 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:39:14,175 - src.core.llm_client - INFO - APIɹ -2025-09-06 17:39:14,180 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:14] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 17:39:17,204 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:17] "GET /api/chat/history/session_test_user_1757151526 HTTP/1.1" 200 - -2025-09-06 17:39:18,157 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:18] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:39:19,229 - src.dialogue.realtime_chat - INFO - Ự: session_test_user_1757151526 -2025-09-06 17:39:19,230 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:19] "DELETE /api/chat/session/session_test_user_1757151526 HTTP/1.1" 200 - -2025-09-06 17:39:23,151 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:23] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:39:28,161 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:28] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:39:33,152 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:33] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:39:36,098 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:36] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 17:39:36,309 - src.knowledge_base.knowledge_manager - INFO - سɹ 40 Ŀ -2025-09-06 17:39:36,312 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿɹ: Կ޷... -2025-09-06 17:39:36,314 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:36] "POST /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:39:36,326 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:36] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:39:38,153 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:38] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:39:38,979 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:38] "GET / HTTP/1.1" 200 - -2025-09-06 17:39:39,046 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:39] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 17:39:39,188 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:39] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 17:39:39,203 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:39] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:39:39,207 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:39] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:39:39,215 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:39] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 17:39:39,247 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:39] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 17:39:39,251 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:39:40,788 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:40] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:39:44,197 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:39:44,867 - src.dialogue.realtime_chat - INFO - »Ự: session_test_user_1757151584 -2025-09-06 17:39:44,869 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:44] "POST /api/chat/session HTTP/1.1" 200 - -2025-09-06 17:39:50,174 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:50] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:39:52,172 - src.core.llm_client - INFO - APIɹ -2025-09-06 17:39:52,191 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:52] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 17:39:55,092 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:55] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:39:55,879 - src.dialogue.realtime_chat - INFO - »Ự: session_test_user_1757151595 -2025-09-06 17:39:55,879 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:39:55] "POST /api/chat/session HTTP/1.1" 200 - -2025-09-06 17:40:00,093 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:00] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:40:01,606 - src.core.llm_client - INFO - APIɹ -2025-09-06 17:40:01,625 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:01] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 17:40:05,094 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:05] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:40:09,204 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:40:10,290 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:10] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:40:11,926 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:11] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-06 17:40:14,198 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:40:14,436 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:14] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 17:40:14,445 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:14] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:40:14,448 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:14] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:40:14,470 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:14] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 17:40:19,194 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:40:24,195 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:40:24,706 - src.dialogue.realtime_chat - INFO - »Ự: session_user_001_1757151624 -2025-09-06 17:40:24,706 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:24] "POST /api/chat/session HTTP/1.1" 200 - -2025-09-06 17:40:29,236 - src.core.llm_client - INFO - APIɹ -2025-09-06 17:40:29,241 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:29] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 17:40:30,081 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:30] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:40:35,117 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:35] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:40:39,185 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:40:45,086 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:40:45] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:41:16,705 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 17:41:17,465 - src.core.database - INFO - ݿʼɹ -2025-09-06 17:41:18,693 - src.knowledge_base.knowledge_manager - INFO - سɹ 40 Ŀ -2025-09-06 17:41:18,701 - src.knowledge_base.knowledge_manager - INFO - سɹ 40 Ŀ -2025-09-06 17:41:18,702 - src.main - INFO - TSPֳʼ -2025-09-06 17:41:18,710 - src.knowledge_base.knowledge_manager - INFO - سɹ 40 Ŀ -2025-09-06 17:41:18,753 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://172.20.10.9:5000 -2025-09-06 17:41:18,754 - werkzeug - INFO - Press CTRL+C to quit -2025-09-06 17:41:20,096 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:20] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:41:24,176 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:24] "GET / HTTP/1.1" 200 - -2025-09-06 17:41:24,502 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:24] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 17:41:24,558 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:24] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 17:41:24,565 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:24] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:41:24,573 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:24] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 17:41:24,599 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:24] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:41:24,612 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:41:24,620 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:24] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 17:41:25,093 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:25] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:41:28,337 - src.dialogue.realtime_chat - INFO - »Ự: session_user_001_1757151688 -2025-09-06 17:41:28,338 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:28] "POST /api/chat/session HTTP/1.1" 200 - -2025-09-06 17:41:29,559 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:41:30,115 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:30] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:41:33,876 - src.core.llm_client - INFO - APIɹ -2025-09-06 17:41:33,894 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:33] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 17:41:34,583 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:41:35,080 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:35] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:41:39,556 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:41:44,554 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:41:44,782 - src.core.llm_client - INFO - APIɹ -2025-09-06 17:41:44,799 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:44] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 17:41:49,553 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:41:53,295 - src.core.llm_client - INFO - APIɹ -2025-09-06 17:41:53,312 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:53] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 17:41:54,561 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:41:55,787 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:55] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-06 17:41:58,579 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:58] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:41:59,560 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:41:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:42:00,454 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:00] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:42:00,638 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:00] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:42:02,825 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:02] "GET / HTTP/1.1" 200 - -2025-09-06 17:42:02,864 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:02] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 17:42:02,974 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:02] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 17:42:02,980 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:02] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:42:02,988 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:02] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:42:02,988 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:02] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 17:42:02,999 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:02] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 17:42:03,001 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:03] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:42:07,980 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:07] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:42:08,560 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:08] "GET /api/settings HTTP/1.1" 200 - -2025-09-06 17:42:10,103 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:10] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:42:12,982 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:12] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:42:17,462 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:17] "POST /api/settings HTTP/1.1" 200 - -2025-09-06 17:42:17,980 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:17] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:42:19,049 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 17:42:19,049 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 17:42:19,057 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 17:42:19,057 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 17:42:19,063 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:19] "GET /api/analytics HTTP/1.1" 200 - -2025-09-06 17:42:22,591 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:22] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:42:22,979 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:22] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:42:23,573 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:23] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:42:24,362 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:24] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-06 17:42:27,986 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:27] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:42:28,925 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:28] "POST /api/agent/monitoring/stop HTTP/1.1" 200 - -2025-09-06 17:42:29,937 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:29] "POST /api/agent/monitoring/start HTTP/1.1" 200 - -2025-09-06 17:42:32,989 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:32] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:42:38,091 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:42:38] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:51:33,497 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 17:51:34,372 - src.core.database - INFO - ݿʼɹ -2025-09-06 17:51:35,820 - src.knowledge_base.knowledge_manager - INFO - سɹ 40 Ŀ -2025-09-06 17:51:35,830 - src.knowledge_base.knowledge_manager - INFO - سɹ 40 Ŀ -2025-09-06 17:51:35,831 - src.main - INFO - TSPֳʼ -2025-09-06 17:51:35,839 - src.knowledge_base.knowledge_manager - INFO - سɹ 40 Ŀ -2025-09-06 17:51:35,854 - src.knowledge_base.knowledge_manager - INFO - سɹ 40 Ŀ -2025-09-06 17:51:35,855 - src.main - INFO - TSPֳʼ -2025-09-06 17:51:35,855 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-06 17:51:35,855 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-06 17:51:35,855 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-06 17:51:35,857 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-06 17:51:35,857 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-06 17:51:35,857 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-06 17:51:35,857 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-06 17:51:35,857 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-06 17:51:35,857 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-06 17:51:35,858 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-06 17:51:35,858 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-06 17:51:35,858 - src.agent.agent_core - INFO - Agentijʼ -2025-09-06 17:51:35,859 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-06 17:51:35,867 - src.knowledge_base.knowledge_manager - INFO - سɹ 40 Ŀ -2025-09-06 17:51:35,933 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://172.20.10.9:5000 -2025-09-06 17:51:35,933 - werkzeug - INFO - Press CTRL+C to quit -2025-09-06 17:51:38,101 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:38] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:51:39,651 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:39] "GET / HTTP/1.1" 200 - -2025-09-06 17:51:39,956 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:39] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-06 17:51:40,031 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:40] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 17:51:40,036 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:40] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:51:40,056 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:40] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 17:51:40,073 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:40] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:51:40,106 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:40] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:51:40,168 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:40] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 17:51:42,642 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:42] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 17:51:43,086 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:43] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:51:45,036 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:45] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:51:45,779 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:45] "POST /api/agent/monitoring/start HTTP/1.1" 500 - -2025-09-06 17:51:48,012 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:48] "POST /api/agent/monitoring/start HTTP/1.1" 500 - -2025-09-06 17:51:48,094 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:48] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:51:48,575 - src.agent_assistant - ERROR - ʧ: maximum recursion depth exceeded while calling a Python object -2025-09-06 17:51:48,575 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:48] "POST /api/agent/proactive-monitoring HTTP/1.1" 200 - -2025-09-06 17:51:50,018 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:50] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 17:51:50,032 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:50] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:51:50,072 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:50] "POST /api/agent/monitoring/start HTTP/1.1" 500 - -2025-09-06 17:51:51,260 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:51] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:51:51,935 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:51] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:51:53,087 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:53] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:51:53,973 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 17:51:53,973 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 17:51:53,979 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 17:51:53,980 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 17:51:53,988 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:53] "GET /api/analytics HTTP/1.1" 200 - -2025-09-06 17:51:54,410 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:54] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:51:55,028 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:51:55] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:52:00,027 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:00] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:52:01,242 - src.knowledge_base.knowledge_manager - INFO - سɹ 41 Ŀ -2025-09-06 17:52:01,244 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿɹ: 123... -2025-09-06 17:52:01,244 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:01] "POST /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:52:01,253 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:01] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:52:04,282 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:04] "GET / HTTP/1.1" 200 - -2025-09-06 17:52:04,337 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:04] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 17:52:04,458 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:04] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 17:52:04,464 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:04] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:52:04,476 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:04] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:52:04,477 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:04] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 17:52:04,483 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:04] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:52:04,503 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:04] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 17:52:04,512 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:52:05,194 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:05] "GET / HTTP/1.1" 200 - -2025-09-06 17:52:05,239 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:05] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 17:52:05,370 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:05] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 17:52:05,373 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:05] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:52:05,382 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:05] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 17:52:05,385 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:05] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:52:05,389 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:05] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:52:05,407 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:05] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 17:52:05,409 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:05] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:52:05,871 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:05] "GET / HTTP/1.1" 200 - -2025-09-06 17:52:05,915 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:05] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 17:52:06,003 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:06] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 17:52:06,007 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:06] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:52:06,016 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:06] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 17:52:06,033 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:06] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 17:52:06,039 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:06] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:52:06,040 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:06] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:52:06,059 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:06] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:52:10,093 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:10] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:52:10,109 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:10] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:52:11,012 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:11] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:52:16,012 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:16] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:52:21,009 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:21] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:52:26,007 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:26] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:52:31,082 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:31] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:52:36,085 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:36] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:52:41,094 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:41] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:52:46,010 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:46] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:52:48,809 - src.core.llm_client - INFO - APIɹ -2025-09-06 17:52:48,810 - src.agent_assistant - ERROR - ļʧ: 'question' -2025-09-06 17:52:48,811 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:48] "POST /api/knowledge/upload HTTP/1.1" 500 - -2025-09-06 17:52:51,008 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:51] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:52:56,010 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:56] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:52:58,161 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:58] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:52:59,176 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:59] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:52:59,767 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:52:59] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:53:00,652 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:00] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:53:01,008 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:01] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:53:01,079 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:01] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:53:01,546 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:01] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:53:03,168 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:03] "GET / HTTP/1.1" 200 - -2025-09-06 17:53:03,216 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:03] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 17:53:03,322 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:03] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 17:53:03,330 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:03] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:53:03,338 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:03] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 17:53:03,349 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:03] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:53:03,353 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:03] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:53:03,370 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:03] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:53:03,373 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:03] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 17:53:03,819 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:03] "GET / HTTP/1.1" 200 - -2025-09-06 17:53:03,861 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:03] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 17:53:03,958 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:03] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 17:53:03,966 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:03] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:53:03,975 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:03] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 17:53:03,976 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:03] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:53:03,981 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:03] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:53:04,009 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 17:53:04,011 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:53:04,074 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET / HTTP/1.1" 200 - -2025-09-06 17:53:04,125 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 17:53:04,211 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 17:53:04,214 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:53:04,225 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:53:04,227 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 17:53:04,245 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:53:04,254 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 17:53:04,265 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:53:04,758 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET / HTTP/1.1" 200 - -2025-09-06 17:53:04,809 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 17:53:04,888 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 17:53:04,892 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 17:53:04,903 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 17:53:04,912 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 17:53:04,919 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 17:53:04,925 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 17:53:04,932 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:53:09,899 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:53:10,089 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:10] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:53:10,106 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:10] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:53:14,898 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:53:20,084 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:20] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:53:25,107 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:25] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:53:30,085 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:30] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:53:35,087 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:35] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:53:40,089 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:40] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:53:45,083 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:45] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:53:46,819 - src.core.llm_client - ERROR - APIʱ -2025-09-06 17:53:46,820 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:46] "POST /api/knowledge/upload HTTP/1.1" 500 - -2025-09-06 17:53:49,894 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:53:54,901 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:53:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:54:00,093 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:54:00] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:54:05,091 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:54:05] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:54:10,093 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:54:10] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:54:10,110 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:54:10] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:54:10,132 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:54:10] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:54:15,083 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:54:15] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:54:20,087 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:54:20] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:54:25,085 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:54:25] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:54:30,086 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:54:30] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:54:35,084 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:54:35] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:54:40,082 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:54:40] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:54:45,088 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:54:45] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:54:50,084 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:54:50] "GET /api/health HTTP/1.1" 200 - -2025-09-06 17:54:55,082 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 17:54:55] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:05:22,095 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 18:05:23,206 - src.core.database - INFO - ݿʼɹ -2025-09-06 18:05:24,910 - src.knowledge_base.knowledge_manager - INFO - سɹ 41 Ŀ -2025-09-06 18:05:24,922 - src.knowledge_base.knowledge_manager - INFO - سɹ 41 Ŀ -2025-09-06 18:05:24,924 - src.main - INFO - TSPֳʼ -2025-09-06 18:05:24,935 - src.knowledge_base.knowledge_manager - INFO - سɹ 41 Ŀ -2025-09-06 18:05:24,951 - src.knowledge_base.knowledge_manager - INFO - سɹ 41 Ŀ -2025-09-06 18:05:24,952 - src.main - INFO - TSPֳʼ -2025-09-06 18:05:24,952 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-06 18:05:24,952 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-06 18:05:24,952 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-06 18:05:24,954 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-06 18:05:24,954 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-06 18:05:24,954 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-06 18:05:24,954 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-06 18:05:24,954 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-06 18:05:24,954 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-06 18:05:24,956 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-06 18:05:24,956 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-06 18:05:24,956 - src.agent.agent_core - INFO - Agentijʼ -2025-09-06 18:05:24,957 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-06 18:05:24,971 - src.knowledge_base.knowledge_manager - INFO - سɹ 41 Ŀ -2025-09-06 18:05:25,035 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://172.20.10.9:5000 -2025-09-06 18:05:25,037 - werkzeug - INFO - Press CTRL+C to quit -2025-09-06 18:05:29,921 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:29] "GET / HTTP/1.1" 200 - -2025-09-06 18:05:30,131 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:30] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 18:05:30,277 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:30] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 18:05:30,283 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:30] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:05:30,305 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:30] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 18:05:30,322 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:30] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:05:30,335 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:30] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 18:05:30,349 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:30] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:05:30,353 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:30] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:05:30,361 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:30] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 18:05:30,361 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:30] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:05:30,383 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:30] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 18:05:35,288 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:35] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:05:37,844 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:37] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 18:05:40,266 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:40] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 18:05:40,283 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:40] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:05:41,087 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:41] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:05:43,797 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:43] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 18:05:45,290 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:45] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:05:50,288 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:50] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:05:55,279 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:05:55] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:06:00,280 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:06:00] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:06:05,280 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:06:05] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:06:11,097 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:06:11] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:06:11,395 - src.core.llm_client - INFO - APIɹ -2025-09-06 18:06:11,396 - src.agent_assistant - ERROR - ļʧ: 'question' -2025-09-06 18:06:11,396 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:06:11] "POST /api/knowledge/upload HTTP/1.1" 200 - -2025-09-06 18:06:16,103 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:06:16] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:06:21,095 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:06:21] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:06:26,090 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:06:26] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:06:31,101 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:06:31] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:06:36,088 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:06:36] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:06:41,091 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:06:41] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:06:46,103 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:06:46] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:06:51,113 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:06:51] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:06:56,098 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:06:56] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:07:01,091 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:07:01] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:07:06,086 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:07:06] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:07:10,291 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:07:10] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:07:16,130 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:07:16] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:07:21,086 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:07:21] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:07:26,082 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:07:26] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:07:31,092 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:07:31] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:07:36,086 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:07:36] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:07:41,081 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:07:41] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:07:46,086 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:07:46] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:07:51,102 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:07:51] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:07:56,089 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:07:56] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:08:01,082 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:08:01] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:08:06,091 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:08:06] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:08:11,103 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:08:11] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:08:16,094 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:08:16] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:09:10,095 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:09:10] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:10:04,786 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:10:05,287 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:05] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:10:11,100 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:11] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:10:14,605 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:14] "GET / HTTP/1.1" 200 - -2025-09-06 18:10:14,649 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:14] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 18:10:14,777 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:14] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 18:10:14,784 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:14] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:10:14,791 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:14] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:10:14,794 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:14] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 18:10:14,801 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:14] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 18:10:14,811 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:14] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 18:10:14,814 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:10:19,789 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:10:22,179 - src.knowledge_base.knowledge_manager - INFO - سɹ 42 Ŀ -2025-09-06 18:10:22,180 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿɹ: 12... -2025-09-06 18:10:22,181 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:22] "POST /api/knowledge HTTP/1.1" 200 - -2025-09-06 18:10:22,189 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:22] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 18:10:24,266 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:24] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 18:10:24,271 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:24] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:10:24,277 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:24] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:10:24,287 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:24] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 18:10:24,776 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:24] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 18:10:24,781 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:24] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:10:24,787 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:24] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:10:24,797 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:24] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 18:10:24,809 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:10:27,696 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:27] "GET / HTTP/1.1" 200 - -2025-09-06 18:10:27,738 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:27] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 18:10:27,833 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:27] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 18:10:27,837 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:27] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:10:27,846 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:27] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 18:10:27,850 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:27] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:10:27,851 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:27] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 18:10:27,857 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:27] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:10:27,866 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:27] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:10:27,868 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:27] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 18:10:27,878 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:27] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:10:27,882 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:27] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 18:10:28,322 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:28] "GET / HTTP/1.1" 200 - -2025-09-06 18:10:28,365 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:28] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 18:10:28,465 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:28] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 18:10:28,471 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:28] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:10:28,473 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:28] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:10:28,481 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:28] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 18:10:28,488 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:28] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 18:10:28,498 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:28] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:10:28,504 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:28] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:10:28,507 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:28] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 18:10:28,509 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:28] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:10:28,539 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:28] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 18:10:28,895 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:28] "GET / HTTP/1.1" 200 - -2025-09-06 18:10:28,936 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:28] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 18:10:29,042 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:29] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 18:10:29,044 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:29] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:10:29,048 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:29] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:10:29,053 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:29] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 18:10:29,070 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:29] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 18:10:29,076 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:29] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 18:10:29,076 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:29] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:10:29,083 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:29] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:10:29,094 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:10:29,096 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:29] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 18:10:29,927 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:29] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 18:10:30,511 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:30] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:10:31,754 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:31] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 18:10:32,232 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:32] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 18:10:32,822 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 18:10:32,823 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 18:10:32,834 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 18:10:32,835 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 18:10:32,839 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:32] "GET /api/analytics HTTP/1.1" 200 - -2025-09-06 18:10:33,643 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:33] "GET /api/settings HTTP/1.1" 200 - -2025-09-06 18:10:34,054 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:10:34,761 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 18:10:34,761 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 18:10:34,768 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 18:10:34,769 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 18:10:34,773 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:34] "GET /api/analytics HTTP/1.1" 200 - -2025-09-06 18:10:37,963 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:37] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 18:10:37,968 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:37] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:10:37,972 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:37] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:10:37,981 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:37] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 18:10:39,045 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:39] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 18:10:39,048 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:39] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:10:39,062 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:39] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:10:39,066 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:39] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 18:10:39,078 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:10:40,447 - src.dialogue.realtime_chat - INFO - »Ự: session_user_001_1757153440 -2025-09-06 18:10:40,447 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:40] "POST /api/chat/session HTTP/1.1" 200 - -2025-09-06 18:10:44,048 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:10:45,434 - src.core.llm_client - INFO - APIɹ -2025-09-06 18:10:45,441 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:45] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 18:10:49,050 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:10:54,048 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:10:59,052 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:10:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:11:04,051 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:11:04,955 - src.core.llm_client - INFO - APIɹ -2025-09-06 18:11:04,959 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:04] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 18:11:09,048 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:11:10,204 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:10] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 18:11:11,223 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:11] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:11:12,293 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:12] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 18:11:12,803 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:12] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:11:14,048 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:11:16,704 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:16] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:11:18,709 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 18:11:18,709 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 18:11:18,714 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 18:11:18,714 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 18:11:18,717 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:18] "GET /api/analytics HTTP/1.1" 200 - -2025-09-06 18:11:19,048 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:11:20,119 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:20] "GET /api/settings HTTP/1.1" 200 - -2025-09-06 18:11:20,708 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 18:11:20,708 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 18:11:20,714 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 18:11:20,714 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 18:11:20,717 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:20] "GET /api/analytics HTTP/1.1" 200 - -2025-09-06 18:11:24,048 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:11:25,554 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:25] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 18:11:25,557 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:25] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:11:25,563 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:25] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:11:25,574 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:25] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 18:11:26,734 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:26] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 18:11:26,739 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:26] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:11:26,739 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:26] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:11:26,751 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:26] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 18:11:29,040 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:29] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 18:11:29,045 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:29] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 18:11:29,053 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:29] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:11:29,063 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:29] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 18:11:29,069 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:11:34,050 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:11:34,835 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:34] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 18:11:39,050 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:11:42,698 - src.core.llm_client - INFO - APIɹ -2025-09-06 18:11:42,715 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:42] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 18:11:44,049 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:11:49,048 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:11:54,052 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:11:56,958 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:56] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:11:57,379 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:57] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 18:11:59,045 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:11:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:12:04,049 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:12:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:12:09,047 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:12:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:12:14,047 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:12:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:12:17,663 - src.core.llm_client - INFO - APIɹ -2025-09-06 18:12:17,663 - src.agent_assistant - ERROR - ļʧ: 'question' -2025-09-06 18:12:17,665 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:12:17] "POST /api/knowledge/upload HTTP/1.1" 200 - -2025-09-06 18:12:19,055 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:12:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:12:24,056 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:12:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:12:29,094 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:12:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:12:34,098 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:12:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:12:39,074 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:12:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:12:44,091 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:12:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:12:49,089 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:12:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:12:54,077 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:12:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:12:59,082 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:12:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:13:04,069 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:13:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:13:09,080 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:13:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:13:14,069 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:13:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:13:19,081 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:13:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:13:24,080 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:13:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:14:10,087 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:10] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:14:44,991 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:14:49,049 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:14:49,844 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:49] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:14:53,410 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:53] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:14:54,053 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:14:57,294 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:57] "POST /api/alerts/4/resolve HTTP/1.1" 200 - -2025-09-06 18:14:57,302 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:57] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:14:57,882 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:57] "POST /api/alerts/5/resolve HTTP/1.1" 200 - -2025-09-06 18:14:57,892 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:57] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:14:58,213 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:58] "POST /api/alerts/6/resolve HTTP/1.1" 200 - -2025-09-06 18:14:58,222 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:58] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:14:58,412 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:58] "POST /api/alerts/1/resolve HTTP/1.1" 200 - -2025-09-06 18:14:58,420 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:58] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:14:58,597 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:58] "POST /api/alerts/2/resolve HTTP/1.1" 200 - -2025-09-06 18:14:58,605 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:58] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:14:58,771 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:58] "POST /api/alerts/3/resolve HTTP/1.1" 200 - -2025-09-06 18:14:58,779 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:58] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:14:59,052 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:59] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:14:59,063 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:14:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:15:01,530 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:15:01] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:15:01,896 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:15:01] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:15:02,089 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:15:02] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 18:15:03,291 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:15:03] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-06 18:15:04,050 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:15:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:15:09,052 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:15:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:15:14,049 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:15:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:15:19,053 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:15:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:15:24,046 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:15:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:15:29,047 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:15:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:15:34,044 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:15:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:15:39,044 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:15:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:15:44,047 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:15:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:15:44,266 - src.core.llm_client - INFO - APIɹ -2025-09-06 18:15:44,267 - src.agent_assistant - ERROR - ļʧ: 'question' -2025-09-06 18:15:44,267 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:15:44] "POST /api/knowledge/upload HTTP/1.1" 200 - -2025-09-06 18:15:49,060 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:15:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:15:54,057 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:15:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:15:59,057 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:15:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:16:04,045 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:16:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:16:09,060 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:16:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:16:14,060 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:16:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:16:19,083 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:16:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:16:24,082 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:16:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:16:29,076 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:16:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:16:34,072 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:16:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:16:39,070 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:16:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:16:44,076 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:16:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:16:49,085 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:16:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:16:54,036 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:16:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:16:59,059 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:16:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:17:01,528 - src.core.llm_client - INFO - APIɹ -2025-09-06 18:17:01,544 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:17:01] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 18:17:04,048 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:17:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:17:09,046 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:17:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:17:14,059 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:17:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:17:19,047 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:17:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:17:22,974 - src.core.llm_client - INFO - APIɹ -2025-09-06 18:17:22,977 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:17:22] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 18:17:24,045 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:17:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:17:29,055 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:17:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:17:34,049 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:17:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:17:39,059 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:17:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:17:44,056 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:17:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:17:49,052 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:17:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:17:54,051 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:17:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:17:59,047 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:17:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:18:04,053 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:18:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:18:09,053 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:18:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:18:14,059 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:18:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:18:19,051 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:18:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:18:24,048 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:18:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:18:29,052 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:18:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:18:34,047 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:18:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:18:39,055 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:18:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:18:44,047 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:18:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:18:49,045 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:18:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:18:54,055 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:18:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:18:59,052 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:18:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:19:04,048 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:19:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:19:09,047 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:19:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:19:14,047 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:19:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:19:19,060 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:19:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:19:24,060 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:19:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:19:29,050 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:19:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:19:34,054 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:19:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:19:39,053 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:19:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:19:44,045 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:19:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:19:49,047 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:19:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:19:54,057 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:19:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:19:59,059 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:19:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:20:04,059 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:20:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:20:09,059 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:20:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:20:14,047 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:20:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:20:19,060 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:20:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:20:24,058 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:20:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:20:29,046 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:20:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:20:34,055 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:20:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:20:39,048 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:20:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:20:44,054 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:20:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:20:49,050 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:20:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:20:54,044 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:20:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:20:59,051 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:20:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:21:04,045 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:21:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:21:09,051 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:21:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:21:14,045 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:21:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:21:19,091 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:21:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 18:21:24,084 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 18:21:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:04:18,814 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 20:04:19,813 - src.core.database - INFO - ݿʼɹ -2025-09-06 20:04:21,365 - src.core.database - ERROR - ݿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:21,365 - src.knowledge_base.knowledge_manager - ERROR - ʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:21,372 - src.core.database - ERROR - ݿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:21,373 - src.knowledge_base.knowledge_manager - ERROR - ʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:21,373 - src.main - INFO - TSPֳʼ -2025-09-06 20:04:21,373 - src.core.database - ERROR - ݿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:21,373 - src.knowledge_base.knowledge_manager - ERROR - ʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:21,373 - src.core.database - ERROR - ݿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:21,373 - src.knowledge_base.knowledge_manager - ERROR - ʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:21,373 - src.main - INFO - TSPֳʼ -2025-09-06 20:04:21,373 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-06 20:04:21,373 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-06 20:04:21,373 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-06 20:04:21,377 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-06 20:04:21,377 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-06 20:04:21,377 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-06 20:04:21,377 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-06 20:04:21,377 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-06 20:04:21,377 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-06 20:04:21,379 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-06 20:04:21,379 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-06 20:04:21,379 - src.agent.agent_core - INFO - Agentijʼ -2025-09-06 20:04:21,379 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-06 20:04:21,381 - src.core.database - ERROR - ݿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:21,381 - src.knowledge_base.knowledge_manager - ERROR - ʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:21,430 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.238:5000 -2025-09-06 20:04:21,431 - werkzeug - INFO - Press CTRL+C to quit -2025-09-06 20:04:24,092 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:04:26,406 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:26] "GET / HTTP/1.1" 200 - -2025-09-06 20:04:26,583 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:26] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-06 20:04:26,744 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:26] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 20:04:26,747 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:26] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 20:04:26,754 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:26] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 20:04:26,767 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:26] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 20:04:26,768 - src.core.database - ERROR - ݿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:26,769 - src.knowledge_base.knowledge_manager - ERROR - ȡ֪ʶͳʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:26,770 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:26] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 20:04:26,782 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:26] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:04:29,134 - src.core.database - ERROR - ݿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:29,134 - src.knowledge_base.knowledge_manager - ERROR - ȡ֪ʶĿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:29,134 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:29] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:04:31,042 - src.core.database - ERROR - ݿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:31,042 - src.knowledge_base.knowledge_manager - ERROR - ȡ֪ʶĿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:31,042 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:31] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:04:31,759 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:31] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:04:32,610 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:32] "GET / HTTP/1.1" 200 - -2025-09-06 20:04:32,653 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:32] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 20:04:32,750 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:32] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 20:04:32,753 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:32] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 20:04:32,765 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:32] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 20:04:32,765 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:32] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 20:04:32,766 - src.core.database - ERROR - ݿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:32,776 - src.core.database - ERROR - ݿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:32,786 - src.knowledge_base.knowledge_manager - ERROR - ȡ֪ʶͳʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:32,789 - src.knowledge_base.knowledge_manager - ERROR - ȡ֪ʶĿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:32,797 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:32] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 20:04:32,799 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:32] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:04:32,805 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:32] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:04:33,316 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:33] "GET / HTTP/1.1" 200 - -2025-09-06 20:04:33,356 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:33] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 20:04:33,459 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:33] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 20:04:33,464 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:33] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 20:04:33,474 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:33] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 20:04:33,475 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:33] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 20:04:33,475 - src.core.database - ERROR - ݿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:33,486 - src.core.database - ERROR - ݿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:33,492 - src.knowledge_base.knowledge_manager - ERROR - ȡ֪ʶͳʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:33,494 - src.knowledge_base.knowledge_manager - ERROR - ȡ֪ʶĿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:33,498 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:33] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 20:04:33,500 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:33] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:04:33,505 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:33] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:04:34,385 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:34] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 20:04:35,367 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:35] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 20:04:37,055 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:37] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 20:04:38,467 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:38] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:04:39,792 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:39] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 20:04:41,236 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:41] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 20:04:41,917 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:41] "POST /api/agent/monitoring/start HTTP/1.1" 500 - -2025-09-06 20:04:43,461 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:43] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 20:04:43,479 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:43] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:04:43,772 - src.core.database - ERROR - ݿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:43,772 - src.knowledge_base.knowledge_manager - ERROR - ȡ֪ʶĿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:43,772 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:43] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:04:48,463 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:48] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:04:50,005 - src.core.database - ERROR - ݿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'is_verified' in 'field list'") -[SQL: INSERT INTO knowledge_entries (question, answer, category, confidence_score, usage_count, created_at, updated_at, is_active, is_verified, verified_by, verified_at, vector_embedding) VALUES (%(question)s, %(answer)s, %(category)s, %(confidence_score)s, %(usage_count)s, %(created_at)s, %(updated_at)s, %(is_active)s, %(is_verified)s, %(verified_by)s, %(verified_at)s, %(vector_embedding)s)] -[parameters: {'question': '123', 'answer': '321', 'category': '', 'confidence_score': 0.0, 'usage_count': 0, 'created_at': datetime.datetime(2025, 9, 6, 20, 4, 50, 5238), 'updated_at': datetime.datetime(2025, 9, 6, 20, 4, 50, 5238), 'is_active': 1, 'is_verified': 0, 'verified_by': None, 'verified_at': None, 'vector_embedding': None}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:50,005 - src.knowledge_base.knowledge_manager - ERROR - ֪ʶĿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'is_verified' in 'field list'") -[SQL: INSERT INTO knowledge_entries (question, answer, category, confidence_score, usage_count, created_at, updated_at, is_active, is_verified, verified_by, verified_at, vector_embedding) VALUES (%(question)s, %(answer)s, %(category)s, %(confidence_score)s, %(usage_count)s, %(created_at)s, %(updated_at)s, %(is_active)s, %(is_verified)s, %(verified_by)s, %(verified_at)s, %(vector_embedding)s)] -[parameters: {'question': '123', 'answer': '321', 'category': '', 'confidence_score': 0.0, 'usage_count': 0, 'created_at': datetime.datetime(2025, 9, 6, 20, 4, 50, 5238), 'updated_at': datetime.datetime(2025, 9, 6, 20, 4, 50, 5238), 'is_active': 1, 'is_verified': 0, 'verified_by': None, 'verified_at': None, 'vector_embedding': None}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:50,005 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:50] "POST /api/knowledge HTTP/1.1" 200 - -2025-09-06 20:04:53,467 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:53] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:04:59,230 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:04:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:05:04,226 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:05:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:05:09,227 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:05:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:05:14,227 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:05:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:05:19,239 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:05:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:05:24,228 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:05:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:05:28,469 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:05:28] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 20:05:28,482 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:05:28] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:05:30,081 - src.dialogue.realtime_chat - INFO - »Ự: session_user_001_1757160330 -2025-09-06 20:05:30,081 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:05:30] "POST /api/chat/session HTTP/1.1" 200 - -2025-09-06 20:05:32,565 - src.core.database - ERROR - ݿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true AND knowledge_entries.is_verified = true] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:05:32,565 - src.knowledge_base.knowledge_manager - ERROR - ֪ʶʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true AND knowledge_entries.is_verified = true] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:05:33,462 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:05:33] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:05:37,281 - src.core.llm_client - INFO - APIɹ -2025-09-06 20:05:37,300 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:05:37] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 20:05:38,463 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:05:38] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:05:40,958 - src.core.database - ERROR - ݿʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true AND knowledge_entries.is_verified = true] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:05:40,958 - src.knowledge_base.knowledge_manager - ERROR - ֪ʶʧ: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_active = true AND knowledge_entries.is_verified = true] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:05:43,476 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:05:43] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:05:48,467 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:05:48] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:05:53,356 - src.core.llm_client - INFO - APIɹ -2025-09-06 20:05:53,373 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:05:53] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 20:05:54,234 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:05:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:05:59,231 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:05:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:06:04,238 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:06:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:06:09,234 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:06:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:06:14,233 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:06:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:06:19,227 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:06:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:06:23,463 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:06:23] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:06:29,230 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:06:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:06:34,236 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:06:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:06:39,238 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:06:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:06:44,235 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:06:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:06:49,240 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:06:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:06:54,231 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:06:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:06:59,236 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:06:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:07:04,239 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:07:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:07:09,237 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:07:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:07:14,233 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:07:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:07:19,241 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:07:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:07:24,235 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:07:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:08:03,851 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:08:03] "GET /api/knowledge?page=1&per_page=5 HTTP/1.1" 200 - -2025-09-06 20:08:05,910 - src.knowledge_base.knowledge_manager - INFO - سɹ 43 Ŀ -2025-09-06 20:08:05,911 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿɹ: ֤ - β¹ܣ... -2025-09-06 20:08:05,911 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:08:05] "POST /api/knowledge HTTP/1.1" 200 - -2025-09-06 20:08:07,931 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:08:07] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:08:09,978 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿ֤ɹ: 43 -2025-09-06 20:08:09,978 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:08:09] "POST /api/knowledge/verify/43 HTTP/1.1" 200 - -2025-09-06 20:08:12,004 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:08:12] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:08:13,243 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:08:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:08:14,040 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V001 - location -2025-09-06 20:08:14,043 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V001 - status -2025-09-06 20:08:14,049 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V001 - battery -2025-09-06 20:08:14,053 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V001 - engine -2025-09-06 20:08:14,056 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V002 - location -2025-09-06 20:08:14,057 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V002 - status -2025-09-06 20:08:14,064 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V002 - fault -2025-09-06 20:08:14,064 - src.vehicle.vehicle_data_manager - INFO - ʾӳɹ -2025-09-06 20:08:14,064 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:08:14] "POST /api/vehicle/init-sample-data HTTP/1.1" 200 - -2025-09-06 20:08:16,084 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:08:16] "GET /api/vehicle/data?vehicle_id=V001&limit=5 HTTP/1.1" 200 - -2025-09-06 20:08:18,120 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:08:18] "GET /api/vehicle/data/V001/latest HTTP/1.1" 200 - -2025-09-06 20:08:20,152 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:08:20] "GET /api/vehicle/data/V001/summary HTTP/1.1" 200 - -2025-09-06 20:08:35,859 - src.core.llm_client - INFO - APIɹ -2025-09-06 20:08:35,861 - src.agent_assistant - ERROR - ļʧ: 'question' -2025-09-06 20:08:35,862 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:08:35] "POST /api/knowledge/upload HTTP/1.1" 200 - -2025-09-06 20:09:13,263 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:09:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:10:13,241 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:10:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:10:42,789 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:10:42] "GET /api/knowledge?page=1&per_page=5 HTTP/1.1" 200 - -2025-09-06 20:10:44,824 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-06 20:10:44,824 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿɹ: ֤ - β¹ܣ... -2025-09-06 20:10:44,828 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:10:44] "POST /api/knowledge HTTP/1.1" 200 - -2025-09-06 20:10:46,856 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:10:46] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:10:48,878 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿ֤ɹ: 48 -2025-09-06 20:10:48,878 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:10:48] "POST /api/knowledge/verify/48 HTTP/1.1" 200 - -2025-09-06 20:10:50,911 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:10:50] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:10:52,948 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V001 - location -2025-09-06 20:10:52,948 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V001 - status -2025-09-06 20:10:52,948 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V001 - battery -2025-09-06 20:10:52,957 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V001 - engine -2025-09-06 20:10:52,957 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V002 - location -2025-09-06 20:10:52,957 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V002 - status -2025-09-06 20:10:52,964 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V002 - fault -2025-09-06 20:10:52,964 - src.vehicle.vehicle_data_manager - INFO - ʾӳɹ -2025-09-06 20:10:52,964 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:10:52] "POST /api/vehicle/init-sample-data HTTP/1.1" 200 - -2025-09-06 20:10:55,014 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:10:55] "GET /api/vehicle/data?vehicle_id=V001&limit=5 HTTP/1.1" 200 - -2025-09-06 20:10:57,060 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:10:57] "GET /api/vehicle/data/V001/latest HTTP/1.1" 200 - -2025-09-06 20:10:59,104 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:10:59] "GET /api/vehicle/data/V001/summary HTTP/1.1" 200 - -2025-09-06 20:11:13,245 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:11:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:11:20,389 - src.core.llm_client - INFO - APIɹ -2025-09-06 20:11:20,390 - src.agent_assistant - ERROR - ļʧ: 'question' -2025-09-06 20:11:20,390 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:11:20] "POST /api/knowledge/upload HTTP/1.1" 200 - -2025-09-06 20:11:57,501 - src.core.llm_client - INFO - APIɹ -2025-09-06 20:11:57,502 - src.agent_assistant - ERROR - ļʧ: 'question' -2025-09-06 20:11:57,503 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:11:57] "POST /api/knowledge/upload HTTP/1.1" 200 - -2025-09-06 20:12:13,234 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:12:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:12:30,730 - src.core.llm_client - INFO - APIɹ -2025-09-06 20:12:30,731 - src.agent_assistant - ERROR - ļʧ: 'question' -2025-09-06 20:12:30,733 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:12:30] "POST /api/knowledge/upload HTTP/1.1" 200 - -2025-09-06 20:12:54,623 - src.core.llm_client - INFO - APIɹ -2025-09-06 20:12:54,624 - src.agent_assistant - ERROR - ļʧ: 'question' -2025-09-06 20:12:54,626 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:12:54] "POST /api/knowledge/upload HTTP/1.1" 200 - -2025-09-06 20:13:13,245 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:13:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:13:21,021 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:13:21] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:13:23,494 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:13:23] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:13:29,251 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:13:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:13:30,289 - src.core.llm_client - INFO - APIɹ -2025-09-06 20:13:30,290 - src.agent_assistant - ERROR - ļʧ: 'question' -2025-09-06 20:13:30,291 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:13:30] "POST /api/knowledge/upload HTTP/1.1" 200 - -2025-09-06 20:13:34,236 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:13:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:13:39,245 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:13:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:13:44,254 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:13:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:13:49,291 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:13:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:13:54,256 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:13:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:13:59,254 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:13:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:14:04,239 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:14:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:14:09,237 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:14:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:14:14,253 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:14:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:14:19,238 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:14:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:14:24,248 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:14:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:15:13,253 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:15:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:15:30,383 - src.core.llm_client - INFO - APIɹ -2025-09-06 20:15:30,384 - src.agent_assistant - ERROR - ļʧ: 'question' -2025-09-06 20:15:30,385 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:15:30] "POST /api/knowledge/upload HTTP/1.1" 200 - -2025-09-06 20:15:55,532 - src.core.llm_client - INFO - APIɹ -2025-09-06 20:15:55,534 - src.agent_assistant - ERROR - ļʧ: 'question' -2025-09-06 20:15:55,534 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:15:55] "POST /api/knowledge/upload HTTP/1.1" 200 - -2025-09-06 20:16:13,232 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:16:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:16:28,124 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:16:28] "GET /api/knowledge?page=1&per_page=100 HTTP/1.1" 200 - -2025-09-06 20:17:13,255 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:17:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:18:13,265 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:18:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:19:13,255 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:19:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:20:13,255 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:20:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:21:13,245 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:21:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:22:13,256 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:22:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:23:13,355 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:23:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:23:33,715 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 20:23:35,076 - src.core.database - INFO - ݿʼɹ -2025-09-06 20:23:37,192 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-06 20:23:37,204 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-06 20:23:37,206 - src.main - INFO - TSPֳʼ -2025-09-06 20:23:37,217 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-06 20:23:37,233 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-06 20:23:37,234 - src.main - INFO - TSPֳʼ -2025-09-06 20:23:37,234 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-06 20:23:37,234 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-06 20:23:37,234 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-06 20:23:37,237 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-06 20:23:37,237 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-06 20:23:37,237 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-06 20:23:37,237 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-06 20:23:37,237 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-06 20:23:37,237 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-06 20:23:37,237 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-06 20:23:37,239 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-06 20:23:37,239 - src.agent.agent_core - INFO - Agentijʼ -2025-09-06 20:23:37,239 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-06 20:23:37,253 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-06 20:23:37,308 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.238:5000 -2025-09-06 20:23:37,308 - werkzeug - INFO - Press CTRL+C to quit -2025-09-06 20:23:48,768 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:23:48] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:23:49,916 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:23:49] "GET / HTTP/1.1" 200 - -2025-09-06 20:23:50,189 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:23:50] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 20:23:50,579 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:23:50] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 20:23:50,596 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:23:50] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 20:23:50,611 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:23:50] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 20:23:50,633 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:23:50] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 20:23:50,640 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:23:50] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:23:50,664 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:23:50] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 20:23:54,777 - src.dialogue.realtime_chat - INFO - »Ự: session_user_001_1757161434 -2025-09-06 20:23:54,778 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:23:54] "POST /api/chat/session HTTP/1.1" 200 - -2025-09-06 20:23:55,578 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:23:55] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:23:59,722 - src.core.llm_client - INFO - APIɹ -2025-09-06 20:23:59,749 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:23:59] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-06 20:24:00,575 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:00] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:24:01,905 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:01] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 20:24:02,768 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:02] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 20:24:03,582 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:03] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 20:24:05,582 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:05] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:24:10,573 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:10] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:24:15,297 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:15] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 20:24:15,570 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:15] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:24:15,820 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:15] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 20:24:16,114 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:16] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 20:24:16,287 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:16] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 20:24:17,479 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 20:24:17,481 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 20:24:17,495 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 20:24:17,496 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 20:24:17,504 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:17] "GET /api/analytics HTTP/1.1" 200 - -2025-09-06 20:24:20,591 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:20] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:24:20,992 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:20] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 20:24:21,785 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:21] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 20:24:22,687 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:22] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 20:24:23,501 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:23] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:24:25,575 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:25] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:24:27,352 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿȡ֤ɹ: 41 -2025-09-06 20:24:27,352 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:27] "POST /api/knowledge/unverify/41 HTTP/1.1" 200 - -2025-09-06 20:24:27,374 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:27] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:24:28,842 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿȡ֤ɹ: 42 -2025-09-06 20:24:28,843 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:28] "POST /api/knowledge/unverify/42 HTTP/1.1" 200 - -2025-09-06 20:24:28,862 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:28] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:24:30,178 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:30] "DELETE /api/knowledge/delete/42 HTTP/1.1" 500 - -2025-09-06 20:24:30,578 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:30] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:24:32,661 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:32] "DELETE /api/knowledge/delete/41 HTTP/1.1" 500 - -2025-09-06 20:24:35,579 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:35] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:24:41,241 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:41] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:24:46,245 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:46] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:24:51,232 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:51] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:24:56,254 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:24:56] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:25:01,237 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:01] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:25:04,507 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿȡ֤ɹ: 43 -2025-09-06 20:25:04,507 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:04] "POST /api/knowledge/unverify/43 HTTP/1.1" 200 - -2025-09-06 20:25:04,532 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:04] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:25:05,376 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿ֤ɹ: 43 -2025-09-06 20:25:05,376 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:05] "POST /api/knowledge/verify/43 HTTP/1.1" 200 - -2025-09-06 20:25:05,395 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:05] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:25:05,574 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:05] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:25:09,509 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:09] "DELETE /api/knowledge/delete/48 HTTP/1.1" 500 - -2025-09-06 20:25:10,585 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:10] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:25:12,026 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:12] "GET /api/knowledge?page=2&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:25:15,588 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:15] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:25:16,404 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:16] "GET /api/knowledge?page=3&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:25:19,403 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:19] "GET /api/knowledge?page=5&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:25:20,586 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:20] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:25:22,425 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:22] "GET /api/knowledge?page=4&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:25:25,571 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:25] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:25:26,059 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:26] "GET /api/knowledge?page=2&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:25:28,662 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:28] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:25:30,596 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:30] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:25:35,566 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:35] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:25:41,237 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:41] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:25:46,236 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:46] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:25:51,260 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:51] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:25:56,235 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:25:56] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:26:01,237 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:26:01] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:26:06,242 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:26:06] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:26:11,243 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:26:11] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:26:16,243 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:26:16] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:26:21,250 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:26:21] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:26:26,244 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:26:26] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:26:31,244 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:26:31] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:26:36,239 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:26:36] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:27:13,253 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:27:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:27:15,689 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:27:15] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:27:20,586 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:27:20] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:27:23,023 - src.knowledge_base.knowledge_manager - INFO - سɹ 49 Ŀ -2025-09-06 20:27:23,025 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿɹ: 123... -2025-09-06 20:27:23,025 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:27:23] "POST /api/knowledge HTTP/1.1" 200 - -2025-09-06 20:27:23,054 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:27:23] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:27:26,012 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:27:26] "DELETE /api/knowledge/delete/49 HTTP/1.1" 500 - -2025-09-06 20:27:26,074 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:27:26] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:27:28,349 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿ֤ɹ: 49 -2025-09-06 20:27:28,349 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:27:28] "POST /api/knowledge/verify/49 HTTP/1.1" 200 - -2025-09-06 20:27:28,363 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:27:28] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:27:31,236 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:27:31] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:27:36,252 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:27:36] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:27:41,247 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:27:41] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:27:46,227 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:27:46] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:27:51,238 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:27:51] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:27:56,264 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:27:56] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:28:01,248 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:01] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:28:06,236 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:06] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:28:11,239 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:11] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:28:16,236 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:16] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:28:18,704 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:18] "GET / HTTP/1.1" 200 - -2025-09-06 20:28:18,798 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:18] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 20:28:18,969 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:18] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 20:28:18,974 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:18] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 20:28:18,977 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:18] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 20:28:19,034 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:19] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 20:28:19,036 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:28:19,064 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:19] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 20:28:19,077 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:19] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:28:24,227 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:28:29,249 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:28:34,248 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:28:38,960 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:38] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:28:41,857 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:41] "GET /api/knowledge?page=1&per_page=5 HTTP/1.1" 200 - -2025-09-06 20:28:43,892 - src.knowledge_base.knowledge_manager - INFO - سɹ 50 Ŀ -2025-09-06 20:28:43,893 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿɹ: ֤ - β¹ܣ... -2025-09-06 20:28:43,894 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:43] "POST /api/knowledge HTTP/1.1" 200 - -2025-09-06 20:28:44,241 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:28:45,925 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:45] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:28:47,966 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿ֤ɹ: 50 -2025-09-06 20:28:47,967 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:47] "POST /api/knowledge/verify/50 HTTP/1.1" 200 - -2025-09-06 20:28:49,237 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:28:50,004 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:50] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:28:52,043 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V001 - location -2025-09-06 20:28:52,045 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V001 - status -2025-09-06 20:28:52,050 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V001 - battery -2025-09-06 20:28:52,053 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V001 - engine -2025-09-06 20:28:52,055 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V002 - location -2025-09-06 20:28:52,057 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V002 - status -2025-09-06 20:28:52,059 - src.vehicle.vehicle_data_manager - INFO - ӳݳɹ: V002 - fault -2025-09-06 20:28:52,060 - src.vehicle.vehicle_data_manager - INFO - ʾӳɹ -2025-09-06 20:28:52,060 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:52] "POST /api/vehicle/init-sample-data HTTP/1.1" 200 - -2025-09-06 20:28:54,092 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:54] "GET /api/vehicle/data?vehicle_id=V001&limit=5 HTTP/1.1" 200 - -2025-09-06 20:28:54,226 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:28:56,133 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:56] "GET /api/vehicle/data/V001/latest HTTP/1.1" 200 - -2025-09-06 20:28:58,169 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:58] "GET /api/vehicle/data/V001/summary HTTP/1.1" 200 - -2025-09-06 20:28:59,235 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:28:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:29:04,227 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:29:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:29:07,163 - src.core.llm_client - INFO - APIɹ -2025-09-06 20:29:07,164 - src.agent_assistant - INFO - LLMӦ: [ - { - "question": "ԶҪЩ", - "answer": "ԶҪ1. P 2. ɲ 3. 4. ص㡣", - "category": "Զ̿", - "confidence_score": 0.95 - }, - { - "question": "ͨAPPԶ", - "answer": "ͨAPPԶIJ£1. APP 2. Զť 3. ȷǷ 4. ȴɡ", - "category": "APP", - "confidence_score": 0.9 - }, - { - "question": "ԶҪעʲô", - "answer": "Զע⣺10ҪɲԶϨڲκ⣬뼰ʱϵͷѰ", - "category": "", - "confi... -2025-09-06 20:29:07,165 - src.agent_assistant - INFO - ɹJSONȡ 4 ֪ʶ -2025-09-06 20:29:07,165 - src.agent_assistant - INFO - Ŀ 0 ֤ͨ: ԶҪЩ... -2025-09-06 20:29:07,165 - src.agent_assistant - INFO - Ŀ 1 ֤ͨ: ͨAPPԶ... -2025-09-06 20:29:07,165 - src.agent_assistant - INFO - Ŀ 2 ֤ͨ: ԶҪעʲô... -2025-09-06 20:29:07,165 - src.agent_assistant - INFO - Ŀ 3 ֤ͨ: ΪʲôԶʧܣܵԭЩ... -2025-09-06 20:29:07,165 - src.agent_assistant - INFO - ֪ʶĿ 1: ԶҪЩ... -2025-09-06 20:29:07,174 - src.knowledge_base.knowledge_manager - INFO - سɹ 51 Ŀ -2025-09-06 20:29:07,175 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿɹ: ԶҪЩ... -2025-09-06 20:29:07,175 - src.agent_assistant - INFO - ֪ʶĿ 1 ɹ -2025-09-06 20:29:07,175 - src.agent_assistant - INFO - ֪ʶĿ 2: ͨAPPԶ... -2025-09-06 20:29:07,184 - src.knowledge_base.knowledge_manager - INFO - سɹ 52 Ŀ -2025-09-06 20:29:07,185 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿɹ: ͨAPPԶ... -2025-09-06 20:29:07,185 - src.agent_assistant - INFO - ֪ʶĿ 2 ɹ -2025-09-06 20:29:07,186 - src.agent_assistant - INFO - ֪ʶĿ 3: ԶҪעʲô... -2025-09-06 20:29:07,195 - src.knowledge_base.knowledge_manager - INFO - سɹ 53 Ŀ -2025-09-06 20:29:07,196 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿɹ: ԶҪעʲô... -2025-09-06 20:29:07,196 - src.agent_assistant - INFO - ֪ʶĿ 3 ɹ -2025-09-06 20:29:07,196 - src.agent_assistant - INFO - ֪ʶĿ 4: ΪʲôԶʧܣܵԭЩ... -2025-09-06 20:29:07,205 - src.knowledge_base.knowledge_manager - INFO - سɹ 54 Ŀ -2025-09-06 20:29:07,206 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿɹ: ΪʲôԶʧܣܵԭЩ... -2025-09-06 20:29:07,206 - src.agent_assistant - INFO - ֪ʶĿ 4 ɹ -2025-09-06 20:29:07,208 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:29:07] "POST /api/knowledge/upload HTTP/1.1" 200 - -2025-09-06 20:29:09,230 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:29:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:29:14,238 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:29:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:29:19,234 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:29:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:29:24,238 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:29:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:29:29,235 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:29:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:29:34,248 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:29:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:29:39,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:29:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:30:04,056 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:30:04] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 20:30:06,093 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:30:06] "GET /api/knowledge?page=1&per_page=5 HTTP/1.1" 200 - -2025-09-06 20:30:08,134 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:30:08] "POST /api/knowledge/add HTTP/1.1" 404 - -2025-09-06 20:30:10,184 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:30:10] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 20:30:13,247 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:30:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:30:25,258 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:30:25] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 20:30:27,302 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:30:27] "GET /api/knowledge?page=1&per_page=5 HTTP/1.1" 200 - -2025-09-06 20:30:29,351 - src.knowledge_base.knowledge_manager - INFO - سɹ 55 Ŀ -2025-09-06 20:30:29,352 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿɹ: ɾ - һĿ... -2025-09-06 20:30:29,353 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:30:29] "POST /api/knowledge HTTP/1.1" 200 - -2025-09-06 20:30:31,454 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:30:31] "GET /api/knowledge?page=1&per_page=100 HTTP/1.1" 200 - -2025-09-06 20:30:33,489 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:30:33] "DELETE /api/knowledge/delete/55 HTTP/1.1" 500 - -2025-09-06 20:30:35,523 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:30:35] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 20:31:13,235 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:31:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:31:27,916 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:31:27] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:31:29,228 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:31:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:31:34,232 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:31:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:31:39,235 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:31:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:31:44,256 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:31:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:31:49,228 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:31:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:31:54,239 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:31:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:31:59,227 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:31:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:32:04,233 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:32:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:32:09,241 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:32:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:32:14,244 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:32:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:32:19,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:32:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:32:24,235 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:32:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:33:13,253 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:33:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:34:13,234 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:34:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:35:13,236 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:35:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:35:58,350 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:35:58] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:35:58,963 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:35:58] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:36:04,253 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:36:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:36:09,002 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:36:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:36:14,232 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:36:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:36:19,243 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:36:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:36:24,242 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:36:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:36:29,233 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:36:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:36:31,705 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:36:31] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 20:36:33,746 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:36:33] "GET /api/knowledge?page=1&per_page=5 HTTP/1.1" 200 - -2025-09-06 20:36:34,235 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:36:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:36:35,803 - src.knowledge_base.knowledge_manager - INFO - سɹ 56 Ŀ -2025-09-06 20:36:35,804 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿɹ: ɾ - һĿ... -2025-09-06 20:36:35,805 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:36:35] "POST /api/knowledge HTTP/1.1" 200 - -2025-09-06 20:36:37,858 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:36:37] "GET /api/knowledge?page=1&per_page=100 HTTP/1.1" 200 - -2025-09-06 20:36:39,240 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:36:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:36:39,896 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:36:39] "DELETE /api/knowledge/delete/56 HTTP/1.1" 500 - -2025-09-06 20:36:41,929 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:36:41] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 20:36:44,233 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:36:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:36:49,238 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:36:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:36:54,250 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:36:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:36:59,281 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:36:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:37:04,146 - src.knowledge_base.knowledge_manager - INFO - سɹ 57 Ŀ -2025-09-06 20:37:04,147 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿɹ: APIɾ - һĿ... -2025-09-06 20:37:04,148 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:37:04] "POST /api/knowledge HTTP/1.1" 200 - -2025-09-06 20:37:04,243 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:37:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:37:06,181 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:37:06] "GET /api/knowledge?page=1&per_page=100 HTTP/1.1" 200 - -2025-09-06 20:37:08,214 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:37:08] "DELETE /api/knowledge/delete/57 HTTP/1.1" 500 - -2025-09-06 20:37:09,241 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:37:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:37:29,425 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 20:37:30,415 - src.core.database - INFO - ݿʼɹ -2025-09-06 20:37:30,906 - src.knowledge_base.knowledge_manager - INFO - سɹ 58 Ŀ -2025-09-06 20:37:30,908 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿɹ: APIɾ - һĿ... -2025-09-06 20:37:30,909 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:37:30] "POST /api/knowledge HTTP/1.1" 200 - -2025-09-06 20:37:31,941 - src.knowledge_base.knowledge_manager - INFO - سɹ 58 Ŀ -2025-09-06 20:37:31,950 - src.knowledge_base.knowledge_manager - INFO - سɹ 58 Ŀ -2025-09-06 20:37:31,952 - src.main - INFO - TSPֳʼ -2025-09-06 20:37:31,963 - src.knowledge_base.knowledge_manager - INFO - سɹ 58 Ŀ -2025-09-06 20:37:31,973 - src.knowledge_base.knowledge_manager - INFO - سɹ 58 Ŀ -2025-09-06 20:37:31,975 - src.main - INFO - TSPֳʼ -2025-09-06 20:37:31,975 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-06 20:37:31,975 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-06 20:37:31,976 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-06 20:37:31,976 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-06 20:37:31,976 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-06 20:37:31,976 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-06 20:37:31,976 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-06 20:37:31,977 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-06 20:37:31,977 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-06 20:37:31,977 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-06 20:37:31,977 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-06 20:37:31,977 - src.agent.agent_core - INFO - Agentijʼ -2025-09-06 20:37:31,978 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-06 20:37:31,988 - src.knowledge_base.knowledge_manager - INFO - سɹ 58 Ŀ -2025-09-06 20:37:32,039 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.238:5000 -2025-09-06 20:37:32,039 - werkzeug - INFO - Press CTRL+C to quit -2025-09-06 20:37:32,945 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:37:32] "GET /api/knowledge?page=1&per_page=100 HTTP/1.1" 200 - -2025-09-06 20:37:34,981 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:37:34] "DELETE /api/knowledge/delete/58 HTTP/1.1" 500 - -2025-09-06 20:37:46,749 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:37:46] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:37:49,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:37:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:37:54,234 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:37:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:37:59,244 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:37:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:38:04,241 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:38:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:38:09,236 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:38:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:38:14,389 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:38:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:38:19,257 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:38:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:38:24,241 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:38:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:38:29,241 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:38:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:38:34,243 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:38:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:38:39,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:38:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:38:44,237 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:38:44] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:38:49,233 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:38:49] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:38:54,227 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:38:54] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:38:59,228 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:38:59] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:39:04,235 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:39:04] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:39:09,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:39:09] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:39:14,238 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:39:14] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:39:19,241 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:39:19] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:39:24,231 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:39:24] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:39:29,236 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:39:29] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:39:34,232 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:39:34] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:39:39,240 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:39:39] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:40:13,245 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:40:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:41:13,269 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:41:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:50:02,293 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 20:50:03,145 - src.core.database - INFO - ݿʼɹ -2025-09-06 20:50:04,533 - src.knowledge_base.knowledge_manager - INFO - سɹ 58 Ŀ -2025-09-06 20:50:04,542 - src.knowledge_base.knowledge_manager - INFO - سɹ 58 Ŀ -2025-09-06 20:50:04,544 - src.main - INFO - TSPֳʼ -2025-09-06 20:50:04,554 - src.knowledge_base.knowledge_manager - INFO - سɹ 58 Ŀ -2025-09-06 20:50:04,564 - src.knowledge_base.knowledge_manager - INFO - سɹ 58 Ŀ -2025-09-06 20:50:04,566 - src.main - INFO - TSPֳʼ -2025-09-06 20:50:04,566 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-06 20:50:04,566 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-06 20:50:04,566 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-06 20:50:04,566 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-06 20:50:04,566 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-06 20:50:04,567 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-06 20:50:04,567 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-06 20:50:04,567 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-06 20:50:04,567 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-06 20:50:04,568 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-06 20:50:04,568 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-06 20:50:04,568 - src.agent.agent_core - INFO - Agentijʼ -2025-09-06 20:50:04,568 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-06 20:50:04,577 - src.knowledge_base.knowledge_manager - INFO - سɹ 58 Ŀ -2025-09-06 20:50:04,623 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.238:5000 -2025-09-06 20:50:04,629 - werkzeug - INFO - Press CTRL+C to quit -2025-09-06 20:50:06,037 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:06] "GET / HTTP/1.1" 200 - -2025-09-06 20:50:06,270 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:06] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-06 20:50:06,567 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:06] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:50:06,603 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:06] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 20:50:06,653 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:06] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 20:50:06,705 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:06] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 20:50:06,735 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:06] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 20:50:06,764 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:06] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 20:50:06,777 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:06] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:50:11,478 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:11] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:50:13,240 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:50:14,378 - src.knowledge_base.knowledge_manager - INFO - سɹ 57 Ŀ -2025-09-06 20:50:14,378 - src.knowledge_base.knowledge_manager - INFO - ɾ֪ʶĿɹ: 58 -2025-09-06 20:50:14,380 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:14] "DELETE /api/knowledge/delete/58 HTTP/1.1" 200 - -2025-09-06 20:50:14,398 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:14] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:50:17,036 - src.knowledge_base.knowledge_manager - INFO - سɹ 56 Ŀ -2025-09-06 20:50:17,041 - src.knowledge_base.knowledge_manager - INFO - ɾ֪ʶĿɹ: 57 -2025-09-06 20:50:17,042 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:17] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:50:17,043 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:17] "DELETE /api/knowledge/delete/57 HTTP/1.1" 200 - -2025-09-06 20:50:17,065 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:17] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:50:18,829 - src.knowledge_base.knowledge_manager - INFO - سɹ 55 Ŀ -2025-09-06 20:50:18,830 - src.knowledge_base.knowledge_manager - INFO - ɾ֪ʶĿɹ: 56 -2025-09-06 20:50:18,831 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:18] "DELETE /api/knowledge/delete/56 HTTP/1.1" 200 - -2025-09-06 20:50:18,845 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:18] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:50:20,708 - src.knowledge_base.knowledge_manager - INFO - سɹ 54 Ŀ -2025-09-06 20:50:20,712 - src.knowledge_base.knowledge_manager - INFO - ɾ֪ʶĿɹ: 55 -2025-09-06 20:50:20,713 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:20] "DELETE /api/knowledge/delete/55 HTTP/1.1" 200 - -2025-09-06 20:50:20,728 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:20] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:50:21,476 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:21] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:50:23,290 - src.knowledge_base.knowledge_manager - INFO - سɹ 53 Ŀ -2025-09-06 20:50:23,290 - src.knowledge_base.knowledge_manager - INFO - ɾ֪ʶĿɹ: 49 -2025-09-06 20:50:23,293 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:23] "DELETE /api/knowledge/delete/49 HTTP/1.1" 200 - -2025-09-06 20:50:23,305 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:23] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:50:25,380 - src.knowledge_base.knowledge_manager - INFO - سɹ 52 Ŀ -2025-09-06 20:50:25,380 - src.knowledge_base.knowledge_manager - INFO - ɾ֪ʶĿɹ: 48 -2025-09-06 20:50:25,382 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:25] "DELETE /api/knowledge/delete/48 HTTP/1.1" 200 - -2025-09-06 20:50:25,396 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:25] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:50:26,642 - src.knowledge_base.knowledge_manager - INFO - سɹ 51 Ŀ -2025-09-06 20:50:26,643 - src.knowledge_base.knowledge_manager - INFO - ɾ֪ʶĿɹ: 50 -2025-09-06 20:50:26,648 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:26] "DELETE /api/knowledge/delete/50 HTTP/1.1" 200 - -2025-09-06 20:50:26,652 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:26] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:50:26,669 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:26] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:50:31,475 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:31] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:50:36,482 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:36] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:50:38,199 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:38] "GET /api/knowledge/search?q= HTTP/1.1" 200 - -2025-09-06 20:50:40,530 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:40] "GET /api/knowledge/search?q= HTTP/1.1" 200 - -2025-09-06 20:50:41,472 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:41] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:50:42,592 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:42] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:50:46,611 - src.knowledge_base.knowledge_manager - INFO - سɹ 50 Ŀ -2025-09-06 20:50:46,613 - src.knowledge_base.knowledge_manager - INFO - ɾ֪ʶĿɹ: 43 -2025-09-06 20:50:46,615 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:46] "DELETE /api/knowledge/delete/43 HTTP/1.1" 200 - -2025-09-06 20:50:46,624 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:46] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:50:46,636 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:46] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:50:48,416 - src.knowledge_base.knowledge_manager - INFO - سɹ 49 Ŀ -2025-09-06 20:50:48,416 - src.knowledge_base.knowledge_manager - INFO - ɾ֪ʶĿɹ: 42 -2025-09-06 20:50:48,416 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:48] "DELETE /api/knowledge/delete/42 HTTP/1.1" 200 - -2025-09-06 20:50:48,434 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:48] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:50:50,665 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-06 20:50:50,668 - src.knowledge_base.knowledge_manager - INFO - ɾ֪ʶĿɹ: 41 -2025-09-06 20:50:50,669 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:50] "DELETE /api/knowledge/delete/41 HTTP/1.1" 200 - -2025-09-06 20:50:50,685 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:50] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:50:51,469 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:51] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:50:52,227 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:52] "GET /api/knowledge?page=3&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:50:55,239 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:55] "GET /api/knowledge?page=5&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:50:56,473 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:50:56] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:51:00,004 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 20:51:00,007 - src.knowledge_base.knowledge_manager - INFO - ɾ֪ʶĿɹ: 7 -2025-09-06 20:51:00,009 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:51:00] "DELETE /api/knowledge/delete/7 HTTP/1.1" 200 - -2025-09-06 20:51:00,026 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:51:00] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 20:51:01,471 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:51:01] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:51:06,476 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:51:06] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:51:06,899 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:51:06] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 20:51:08,717 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:51:08] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 20:51:11,473 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:51:11] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:51:13,228 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:51:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:51:16,028 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:51:16] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 20:51:16,031 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:51:16] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 20:51:16,040 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:51:16] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 20:51:16,048 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:51:16] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 20:51:16,468 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:51:16] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 20:51:16,471 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:51:16] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 20:51:16,479 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:51:16] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 20:51:16,501 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:51:16] "GET /api/health HTTP/1.1" 200 - -2025-09-06 20:51:16,503 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:51:16] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 20:51:21,475 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 20:51:21] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:08:43,412 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 21:08:44,446 - src.core.database - INFO - ݿʼɹ -2025-09-06 21:08:46,308 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 21:08:46,317 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 21:08:46,319 - src.main - INFO - TSPֳʼ -2025-09-06 21:08:46,329 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 21:08:46,342 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 21:08:46,346 - src.main - INFO - TSPֳʼ -2025-09-06 21:08:46,347 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-06 21:08:46,347 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-06 21:08:46,347 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-06 21:08:46,347 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-06 21:08:46,347 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-06 21:08:46,348 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-06 21:08:46,348 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-06 21:08:46,349 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-06 21:08:46,349 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-06 21:08:46,349 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-06 21:08:46,350 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-06 21:08:46,350 - src.agent.agent_core - INFO - Agentijʼ -2025-09-06 21:08:46,350 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-06 21:08:46,363 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 21:08:46,427 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.238:5000 -2025-09-06 21:08:46,427 - werkzeug - INFO - Press CTRL+C to quit -2025-09-06 21:08:46,518 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:46] "GET / HTTP/1.1" 200 - -2025-09-06 21:08:46,719 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:46] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 21:08:47,025 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:47] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:08:47,034 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:47] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:08:47,048 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:47] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 21:08:47,071 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:47] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:08:47,082 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:47] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:08:47,089 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:47] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:08:47,095 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:47] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:08:47,100 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:47] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:08:47,100 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:47] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:08:47,120 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:47] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:08:48,710 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:48] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:08:52,041 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:52] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:08:54,926 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:54] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 21:08:55,926 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:55] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:08:56,496 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:56] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 21:08:57,029 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:57] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:08:57,202 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:57] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:08:58,549 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:08:58] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:09:02,029 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:02] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:09:07,035 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:07] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:09:07,624 - src.dialogue.dialogue_manager - INFO - ɹ: WO20250906210907 -2025-09-06 21:09:07,624 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:07] "POST /api/workorders HTTP/1.1" 200 - -2025-09-06 21:09:07,633 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:07] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:09:09,900 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:09] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:09:10,851 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:10] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:09:11,274 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:11] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:09:11,482 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:11] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:09:11,665 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:11] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:09:11,834 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:11] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:09:12,028 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:12] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:09:12,040 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:12] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:09:12,200 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:12] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:09:13,057 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:13] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 21:09:14,061 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:14] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:09:14,648 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:14] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 21:09:15,221 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:15] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 21:09:15,695 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:15] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:09:16,554 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 21:09:16,554 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 21:09:16,561 - src.core.database - ERROR - ݿʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 21:09:16,561 - src.analytics.analytics_manager - ERROR - ÿշʧ: 'severity' is an invalid keyword argument for Alert -2025-09-06 21:09:16,566 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:16] "GET /api/analytics HTTP/1.1" 200 - -2025-09-06 21:09:17,027 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:17] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:09:17,603 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:17] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:09:18,084 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:18] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 21:09:18,820 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:18] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:09:22,032 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:22] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:09:27,029 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:27] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:09:28,155 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:28] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 21:09:28,793 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:28] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:09:29,686 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:29] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 21:09:30,827 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:30] "POST /api/agent/monitoring/start HTTP/1.1" 500 - -2025-09-06 21:09:32,032 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:32] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:09:37,225 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:37] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 21:09:37,237 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:37] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:09:42,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:42] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:09:47,222 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:47] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 21:09:47,233 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:47] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:09:52,231 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:52] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:09:55,367 - src.agent_assistant - ERROR - ֹͣʧ: 'TSPAgentAssistant' object has no attribute 'stop_agent_monitoring' -2025-09-06 21:09:55,368 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:55] "POST /api/agent/monitoring/stop HTTP/1.1" 200 - -2025-09-06 21:09:55,941 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:55] "POST /api/agent/intelligent-analysis HTTP/1.1" 200 - -2025-09-06 21:09:56,907 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:56] "POST /api/agent/proactive-monitoring HTTP/1.1" 200 - -2025-09-06 21:09:57,021 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:57] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 21:09:57,043 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:57] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:09:58,990 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:09:58] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:10:02,031 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:02] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:10:07,223 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:07] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:10:07,235 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:07] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:10:12,241 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:12] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:10:14,811 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:14] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:10:14,817 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:14] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:10:14,823 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:14] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:10:14,833 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:14] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:10:17,024 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:17] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:10:17,029 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:17] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:10:17,036 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:17] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:10:17,048 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:17] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:10:17,049 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:17] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:10:22,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:22] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:10:27,221 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:27] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:10:27,223 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:27] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:10:27,231 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:27] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:10:27,239 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:27] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:10:27,256 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:27] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:10:32,232 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:32] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:10:37,228 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:37] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:10:37,234 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:37] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:10:37,239 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:37] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:10:37,255 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:37] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:10:37,262 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:37] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:10:42,238 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:42] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:10:47,224 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:47] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:10:47,231 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:47] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:10:47,241 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:47] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:10:47,252 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:47] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:10:47,266 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:47] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:10:52,245 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:52] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:10:57,233 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:57] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:10:57,233 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:57] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:10:57,241 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:57] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:10:57,257 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:57] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:10:57,268 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:10:57] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:11:02,249 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:11:02] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:11:07,226 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:11:07] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:11:07,228 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:11:07] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:11:07,243 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:11:07] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:11:07,254 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:11:07] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:11:07,268 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:11:07] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:11:12,243 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:11:12] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:11:17,222 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:11:17] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:11:17,227 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:11:17] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:11:17,235 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:11:17] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:11:17,244 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:11:17] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:11:17,247 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:11:17] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:12:13,238 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:12:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:12:13,248 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:12:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:12:13,256 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:12:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:12:13,268 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:12:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:12:13,275 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:12:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:13:13,243 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:13:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:13:13,254 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:13:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:13:13,254 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:13:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:13:13,280 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:13:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:13:13,288 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:13:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:14:13,241 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:14:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:14:13,243 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:14:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:14:13,256 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:14:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:14:13,268 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:14:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:14:13,288 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:14:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:15:13,238 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:15:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:15:13,240 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:15:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:15:13,249 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:15:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:15:13,268 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:15:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:15:13,282 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:15:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:16:10,551 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:16:10] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-06 21:16:12,589 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:16:12] "POST /api/agent/monitoring/start HTTP/1.1" 500 - -2025-09-06 21:16:13,235 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:16:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:16:13,241 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:16:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:16:13,249 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:16:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:16:13,265 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:16:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:16:13,273 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:16:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:16:14,620 - src.dialogue.dialogue_manager - INFO - ɹ: WO20250906211614 -2025-09-06 21:16:14,622 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:16:14] "POST /api/workorders HTTP/1.1" 200 - -2025-09-06 21:16:16,653 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:16:16] "POST /api/alerts HTTP/1.1" 405 - -2025-09-06 21:16:18,673 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:16:18] "GET /api/system/resources HTTP/1.1" 404 - -2025-09-06 21:16:20,717 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:16:20] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:16:22,744 - src.agent_assistant - ERROR - ֹͣʧ: 'TSPAgentAssistant' object has no attribute 'stop_agent_monitoring' -2025-09-06 21:16:22,746 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:16:22] "POST /api/agent/monitoring/stop HTTP/1.1" 200 - -2025-09-06 21:17:13,239 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:17:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:17:13,253 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:17:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:17:13,260 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:17:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:17:13,283 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:17:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:17:13,284 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:17:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:18:13,235 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:18:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:18:13,247 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:18:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:18:13,258 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:18:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:18:13,278 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:18:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:18:13,287 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:18:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:19:13,235 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:19:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:19:13,242 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:19:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:19:13,257 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:19:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:19:13,275 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:19:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:19:13,277 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:19:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:20:13,244 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:20:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:20:13,251 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:20:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:20:13,265 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:20:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:20:13,275 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:20:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:20:13,290 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:20:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:21:13,230 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:21:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:21:13,240 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:21:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:21:13,256 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:21:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:21:13,271 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:21:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:21:13,275 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:21:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:22:13,234 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:22:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:22:13,238 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:22:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:22:13,246 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:22:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:22:13,258 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:22:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:22:13,272 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:22:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:23:13,223 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:23:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:23:13,231 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:23:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:23:13,238 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:23:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:23:13,248 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:23:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:23:13,255 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:23:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:24:13,234 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:24:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:24:13,237 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:24:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:24:13,248 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:24:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:24:13,255 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:24:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:24:13,261 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:24:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:25:13,224 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:25:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:25:13,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:25:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:25:13,234 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:25:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:25:13,243 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:25:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:25:13,247 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:25:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:26:13,232 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:26:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:26:13,237 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:26:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:26:13,240 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:26:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:26:13,254 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:26:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:26:13,259 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:26:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:27:13,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:27:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:27:13,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:27:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:27:13,237 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:27:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:27:13,245 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:27:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:27:13,250 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:27:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:28:13,225 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:28:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:28:13,230 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:28:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:28:13,237 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:28:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:28:13,248 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:28:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:28:13,251 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:28:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:29:13,225 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:29:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:29:13,231 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:29:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:29:13,232 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:29:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:29:13,244 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:29:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:29:13,251 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:29:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:30:13,226 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:30:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:30:13,226 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:30:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:30:13,234 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:30:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:30:13,241 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:30:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:30:13,246 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:30:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:31:13,226 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:31:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:31:13,230 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:31:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:31:13,233 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:31:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:31:13,247 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:31:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:31:13,250 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:31:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:32:13,224 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:32:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:32:13,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:32:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:32:13,236 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:32:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:32:13,247 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:32:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:32:13,249 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:32:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:33:13,221 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:33:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:33:13,225 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:33:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:33:13,227 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:33:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:33:13,239 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:33:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:33:13,243 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:33:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:34:13,226 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:34:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:34:13,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:34:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:34:13,230 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:34:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:34:13,242 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:34:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:34:13,247 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:34:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:35:13,228 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:35:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:35:13,228 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:35:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:35:13,239 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:35:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:35:13,249 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:35:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:35:13,258 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:35:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:36:13,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:36:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:36:13,230 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:36:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:36:13,240 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:36:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:36:13,244 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:36:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:36:13,255 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:36:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:37:13,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:37:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:37:13,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:37:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:37:13,236 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:37:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:37:13,249 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:37:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:37:13,260 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:37:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:38:13,230 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:38:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:38:13,231 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:38:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:38:13,237 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:38:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:38:13,246 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:38:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:38:13,253 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:38:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:39:13,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:39:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:39:13,230 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:39:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:39:13,242 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:39:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:39:13,248 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:39:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:39:13,258 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:39:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:40:13,240 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:40:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:40:13,245 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:40:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:40:13,248 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:40:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:40:13,257 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:40:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:40:13,266 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:40:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 21:41:13,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:41:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 21:41:13,233 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:41:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 21:41:13,240 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:41:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 21:41:13,249 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:41:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 21:41:13,254 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 21:41:13] "GET /api/health HTTP/1.1" 200 - -2025-09-06 22:16:54,437 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 22:16:55,191 - src.core.database - INFO - ݿʼɹ -2025-09-06 22:16:56,482 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:16:56,500 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:16:56,501 - src.main - INFO - TSPֳʼ -2025-09-06 22:16:56,511 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:16:56,517 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:16:56,523 - src.main - INFO - TSPֳʼ -2025-09-06 22:16:56,524 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-06 22:16:56,524 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-06 22:16:56,524 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-06 22:16:56,525 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-06 22:16:56,525 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-06 22:16:56,525 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-06 22:16:56,526 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-06 22:16:56,526 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-06 22:16:56,526 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-06 22:16:56,526 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-06 22:16:56,526 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-06 22:16:56,526 - src.agent.agent_core - INFO - Agentijʼ -2025-09-06 22:16:56,526 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-06 22:16:56,538 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:16:56,584 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.238:5000 -2025-09-06 22:16:56,584 - werkzeug - INFO - Press CTRL+C to quit -2025-09-06 22:16:57,303 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:16:57] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 22:16:57,316 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:16:57] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 22:16:57,335 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:16:57] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 22:16:57,345 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:16:57] "GET /api/health HTTP/1.1" 200 - -2025-09-06 22:16:57,373 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:16:57] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 22:16:59,388 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:16:59] "GET / HTTP/1.1" 200 - -2025-09-06 22:16:59,535 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:16:59] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-06 22:17:13,127 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:17:13] "GET / HTTP/1.1" 200 - -2025-09-06 22:17:13,216 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:17:13] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 22:17:44,451 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:17:44] "GET / HTTP/1.1" 200 - -2025-09-06 22:17:44,508 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:17:44] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 22:17:49,344 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:17:49] "GET / HTTP/1.1" 200 - -2025-09-06 22:17:49,379 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:17:49] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 22:17:50,281 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:17:50] "GET / HTTP/1.1" 200 - -2025-09-06 22:17:50,317 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:17:50] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 22:18:35,833 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:18:35] "GET / HTTP/1.1" 200 - -2025-09-06 22:18:35,883 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:18:35] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 22:18:36,951 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:18:36] "GET / HTTP/1.1" 200 - -2025-09-06 22:18:36,980 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:18:36] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-06 22:18:50,155 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 22:18:50,857 - src.core.database - INFO - ݿʼɹ -2025-09-06 22:18:52,029 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:18:52,038 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:18:52,038 - src.main - INFO - TSPֳʼ -2025-09-06 22:18:52,049 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:18:52,056 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:18:52,056 - src.main - INFO - TSPֳʼ -2025-09-06 22:18:52,060 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-06 22:18:52,060 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-06 22:18:52,060 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-06 22:18:52,060 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-06 22:18:52,060 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-06 22:18:52,060 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-06 22:18:52,060 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-06 22:18:52,061 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-06 22:18:52,061 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-06 22:18:52,061 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-06 22:18:52,062 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-06 22:18:52,062 - src.agent.agent_core - INFO - Agentijʼ -2025-09-06 22:18:52,062 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-06 22:18:52,068 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:18:52,110 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.238:5000 -2025-09-06 22:18:52,110 - werkzeug - INFO - Press CTRL+C to quit -2025-09-06 22:18:57,194 - werkzeug - INFO - 192.168.1.238 - - [06/Sep/2025 22:18:57] "GET / HTTP/1.1" 200 - -2025-09-06 22:18:57,437 - werkzeug - INFO - 192.168.1.238 - - [06/Sep/2025 22:18:57] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-06 22:19:02,099 - werkzeug - INFO - 192.168.1.238 - - [06/Sep/2025 22:19:02] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-06 22:22:38,296 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 22:22:39,240 - src.core.database - INFO - ݿʼɹ -2025-09-06 22:22:40,171 - __main__ - INFO - ûֶֹͣ -2025-09-06 22:22:56,839 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 22:22:57,752 - src.core.database - INFO - ݿʼɹ -2025-09-06 22:22:59,150 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:22:59,165 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:22:59,167 - src.main - INFO - TSPֳʼ -2025-09-06 22:22:59,175 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:22:59,185 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:22:59,187 - src.main - INFO - TSPֳʼ -2025-09-06 22:22:59,188 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-06 22:22:59,188 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-06 22:22:59,188 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-06 22:22:59,188 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-06 22:22:59,188 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-06 22:22:59,188 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-06 22:22:59,188 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-06 22:22:59,188 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-06 22:22:59,188 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-06 22:22:59,189 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-06 22:22:59,189 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-06 22:22:59,189 - src.agent.agent_core - INFO - Agentijʼ -2025-09-06 22:22:59,189 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-06 22:22:59,198 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:22:59,327 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.238:5000 -2025-09-06 22:22:59,327 - werkzeug - INFO - Press CTRL+C to quit -2025-09-06 22:23:01,667 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:23:01] "GET / HTTP/1.1" 200 - -2025-09-06 22:23:01,920 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:23:01] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-06 22:23:42,252 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 22:23:43,323 - src.core.database - INFO - ݿʼɹ -2025-09-06 22:23:44,668 - __main__ - INFO - ûֶֹͣ -2025-09-06 22:24:16,513 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 22:24:17,261 - src.core.database - INFO - ݿʼɹ -2025-09-06 22:24:18,527 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:24:18,527 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:24:18,527 - src.main - INFO - TSPֳʼ -2025-09-06 22:24:18,547 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:24:18,556 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:24:18,557 - src.main - INFO - TSPֳʼ -2025-09-06 22:24:18,557 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-06 22:24:18,558 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-06 22:24:18,558 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-06 22:24:18,558 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-06 22:24:18,558 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-06 22:24:18,558 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-06 22:24:18,558 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-06 22:24:18,559 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-06 22:24:18,559 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-06 22:24:18,559 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-06 22:24:18,559 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-06 22:24:18,559 - src.agent.agent_core - INFO - Agentijʼ -2025-09-06 22:24:18,560 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-06 22:24:18,568 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:24:18,617 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.238:5000 -2025-09-06 22:24:18,618 - werkzeug - INFO - Press CTRL+C to quit -2025-09-06 22:24:20,281 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:24:20] "GET / HTTP/1.1" 200 - -2025-09-06 22:24:20,510 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:24:20] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-06 22:24:57,424 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 22:24:58,514 - src.core.database - INFO - ݿʼɹ -2025-09-06 22:24:59,949 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:24:59,962 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:24:59,963 - src.main - INFO - TSPֳʼ -2025-09-06 22:24:59,974 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:24:59,984 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:24:59,989 - src.main - INFO - TSPֳʼ -2025-09-06 22:24:59,989 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-06 22:24:59,989 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-06 22:24:59,989 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-06 22:24:59,989 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-06 22:24:59,989 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-06 22:24:59,989 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-06 22:24:59,990 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-06 22:24:59,990 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-06 22:24:59,990 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-06 22:24:59,990 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-06 22:24:59,990 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-06 22:24:59,991 - src.agent.agent_core - INFO - Agentijʼ -2025-09-06 22:24:59,991 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-06 22:24:59,998 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:25:00,055 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.238:5000 -2025-09-06 22:25:00,057 - werkzeug - INFO - Press CTRL+C to quit -2025-09-06 22:25:30,612 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 22:25:31,625 - src.core.database - INFO - ݿʼɹ -2025-09-06 22:25:33,421 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:25:33,429 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:25:33,431 - src.main - INFO - TSPֳʼ -2025-09-06 22:25:33,441 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:25:33,453 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:25:33,454 - src.main - INFO - TSPֳʼ -2025-09-06 22:25:33,455 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-06 22:25:33,455 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-06 22:25:33,455 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-06 22:25:33,455 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-06 22:25:33,456 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-06 22:25:33,457 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-06 22:25:33,457 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-06 22:25:33,457 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-06 22:25:33,457 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-06 22:25:33,457 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-06 22:25:33,457 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-06 22:25:33,457 - src.agent.agent_core - INFO - Agentijʼ -2025-09-06 22:25:33,457 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-06 22:25:33,469 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:25:33,525 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.238:5000 -2025-09-06 22:25:33,525 - werkzeug - INFO - Press CTRL+C to quit -2025-09-06 22:25:43,889 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:25:43] "GET / HTTP/1.1" 200 - -2025-09-06 22:25:44,326 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:25:44] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-06 22:26:45,599 - werkzeug - INFO - 192.168.1.238 - - [06/Sep/2025 22:26:45] "GET / HTTP/1.1" 200 - -2025-09-06 22:26:45,712 - werkzeug - INFO - 192.168.1.238 - - [06/Sep/2025 22:26:45] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-06 22:27:18,412 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 22:27:19,619 - src.core.database - INFO - ݿʼɹ -2025-09-06 22:27:21,185 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:27:21,196 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:27:21,198 - src.main - INFO - TSPֳʼ -2025-09-06 22:27:21,206 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:27:21,216 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:27:21,217 - src.main - INFO - TSPֳʼ -2025-09-06 22:27:21,218 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-06 22:27:21,218 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-06 22:27:21,218 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-06 22:27:21,218 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-06 22:27:21,218 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-06 22:27:21,218 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-06 22:27:21,219 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-06 22:27:21,219 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-06 22:27:21,219 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-06 22:27:21,219 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-06 22:27:21,219 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-06 22:27:21,219 - src.agent.agent_core - INFO - Agentijʼ -2025-09-06 22:27:21,219 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-06 22:27:21,228 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:27:21,266 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.238:5000 -2025-09-06 22:27:21,268 - werkzeug - INFO - Press CTRL+C to quit -2025-09-06 22:29:26,254 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-06 22:29:27,085 - src.core.database - INFO - ݿʼɹ -2025-09-06 22:29:28,297 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:29:28,306 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:29:28,307 - src.main - INFO - TSPֳʼ -2025-09-06 22:29:28,318 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:29:28,329 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:29:28,330 - src.main - INFO - TSPֳʼ -2025-09-06 22:29:28,331 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-06 22:29:28,331 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-06 22:29:28,331 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-06 22:29:28,331 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-06 22:29:28,331 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-06 22:29:28,331 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-06 22:29:28,331 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-06 22:29:28,332 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-06 22:29:28,332 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-06 22:29:28,332 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-06 22:29:28,332 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-06 22:29:28,332 - src.agent.agent_core - INFO - Agentijʼ -2025-09-06 22:29:28,333 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-06 22:29:28,341 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-06 22:29:28,384 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.238:5000 -2025-09-06 22:29:28,430 - werkzeug - INFO - Press CTRL+C to quit -2025-09-06 22:29:29,797 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:29] "GET / HTTP/1.1" 200 - -2025-09-06 22:29:30,063 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:30] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-06 22:29:30,102 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:30] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 22:29:30,122 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:30] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 22:29:30,143 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:30] "GET /api/system/info HTTP/1.1" 200 - -2025-09-06 22:29:30,190 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:30] "GET /api/health HTTP/1.1" 200 - -2025-09-06 22:29:30,191 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:30] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 22:29:30,195 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:30] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 22:29:33,150 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:33] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-06 22:29:35,095 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:35] "GET /api/health HTTP/1.1" 200 - -2025-09-06 22:29:35,906 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:35] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 22:29:40,091 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:40] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 22:29:40,101 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:40] "GET /api/health HTTP/1.1" 200 - -2025-09-06 22:29:43,604 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:43] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 22:29:44,717 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:44] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 22:29:45,094 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:45] "GET /api/health HTTP/1.1" 200 - -2025-09-06 22:29:45,896 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:45] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-06 22:29:47,395 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:47] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 22:29:47,400 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:47] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 22:29:47,407 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:47] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 22:29:47,412 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:47] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 22:29:50,093 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:50] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-06 22:29:50,099 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:50] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 22:29:50,104 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:50] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 22:29:50,121 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:50] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-06 22:29:50,127 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:50] "GET /api/health HTTP/1.1" 200 - -2025-09-06 22:29:55,112 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:55] "GET /api/health HTTP/1.1" 200 - -2025-09-06 22:29:55,271 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:55] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-06 22:29:58,782 - src.analytics.monitor_service - INFO - ط -2025-09-06 22:29:58,782 - src.main - INFO - ط -2025-09-06 22:29:58,789 - src.agent_assistant - INFO - ѭ -2025-09-06 22:29:58,789 - src.agent_assistant - INFO - -2025-09-06 22:29:58,789 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:29:58] "POST /api/agent/monitoring/start HTTP/1.1" 200 - -2025-09-06 22:29:58,844 - src.analytics.monitor_service - INFO - 4 Ԥ -2025-09-06 22:29:58,844 - src.analytics.monitor_service - WARNING - Ԥ: ûȽϵ: 0.00 (ֵ: 0.6) -2025-09-06 22:29:58,844 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': 'ûȽϵ: 0.00 (ֵ: 0.6)', 'timestamp': '2025-09-06T22:29:58.815509', 'rule_name': 'Ԥ'} -2025-09-06 22:29:58,844 - src.analytics.monitor_service - WARNING - Ԥ: ûȽϵ: 0.00 (ֵ: 0.6) -2025-09-06 22:29:58,844 - src.analytics.monitor_service - WARNING - Ԥ: ֪ʶʽϵ: 0.10 (ֵ: 0.5) -2025-09-06 22:29:58,844 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': '֪ʶʽϵ: 0.10 (ֵ: 0.5)', 'timestamp': '2025-09-06T22:29:58.823503', 'rule_name': '֪ʶԤ'} -2025-09-06 22:29:58,844 - src.analytics.monitor_service - WARNING - Ԥ: ֪ʶʽϵ: 0.10 (ֵ: 0.5) -2025-09-06 22:29:58,844 - src.analytics.monitor_service - WARNING - Ԥ: ϵͳڴʹʹ: 83.3% (ֵ: 80.0%) -2025-09-06 22:29:58,844 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': 'ϵͳڴʹʹ: 83.3% (ֵ: 80.0%)', 'timestamp': '2025-09-06T22:29:58.837243', 'rule_name': 'ڴʹԤ'} -2025-09-06 22:29:58,844 - src.analytics.monitor_service - WARNING - Ԥ: ϵͳڴʹʹ: 83.3% (ֵ: 80.0%) -2025-09-06 22:29:58,844 - src.analytics.monitor_service - WARNING - Ԥ: ûԻжʹ: 0.49 (ֵ: 0.3) -2025-09-06 22:29:58,844 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': 'ûԻжʹ: 0.49 (ֵ: 0.3)', 'timestamp': '2025-09-06T22:29:58.844198', 'rule_name': 'ԻжԤ'} -2025-09-06 22:29:58,844 - src.analytics.monitor_service - WARNING - Ԥ: ûԻжʹ: 0.49 (ֵ: 0.3) -2025-09-06 22:30:00,087 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:00] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-06 22:30:00,107 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:00] "GET /api/health HTTP/1.1" 200 - -2025-09-06 22:30:02,558 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:02] "POST /api/agent/proactive-monitoring HTTP/1.1" 200 - -2025-09-06 22:30:04,307 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:04] "POST /api/agent/intelligent-analysis HTTP/1.1" 200 - -2025-09-06 22:30:05,101 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:05] "GET /api/health HTTP/1.1" 200 - -2025-09-06 22:30:07,590 - src.analytics.monitor_service - INFO - ط -2025-09-06 22:30:07,590 - src.main - INFO - ط -2025-09-06 22:30:07,597 - src.agent_assistant - INFO - ѭ -2025-09-06 22:30:07,597 - src.agent_assistant - INFO - -2025-09-06 22:30:07,597 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:07] "POST /api/agent/monitoring/start HTTP/1.1" 200 - -2025-09-06 22:30:09,982 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:09] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 22:30:10,084 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:10] "GET /api/alerts HTTP/1.1" 200 - -2025-09-06 22:30:10,105 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:10] "GET /api/health HTTP/1.1" 200 - -2025-09-06 22:30:11,656 - src.analytics.monitor_service - INFO - طֹͣ -2025-09-06 22:30:11,657 - src.main - INFO - طֹͣ -2025-09-06 22:30:11,657 - src.agent_assistant - INFO - ѭֹͣ -2025-09-06 22:30:11,657 - src.agent_assistant - INFO - ֹͣ -2025-09-06 22:30:11,657 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:11] "POST /api/agent/monitoring/stop HTTP/1.1" 200 - -2025-09-06 22:30:14,907 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:14] "GET /api/analytics HTTP/1.1" 200 - -2025-09-06 22:30:15,094 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:15] "GET /api/health HTTP/1.1" 200 - -2025-09-06 22:30:15,579 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:15] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 22:30:16,441 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:16] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 22:30:17,154 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:17] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 22:30:17,815 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:17] "GET /api/analytics HTTP/1.1" 200 - -2025-09-06 22:30:20,098 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:20] "GET /api/health HTTP/1.1" 200 - -2025-09-06 22:30:21,270 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:21] "GET /api/settings HTTP/1.1" 200 - -2025-09-06 22:30:24,451 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:24] "GET /api/workorders HTTP/1.1" 200 - -2025-09-06 22:30:25,101 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:25] "GET /api/health HTTP/1.1" 200 - -2025-09-06 22:30:25,665 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:25] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-06 22:30:30,230 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:30] "GET /api/health HTTP/1.1" 200 - -2025-09-06 22:30:35,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:35] "GET /api/health HTTP/1.1" 200 - -2025-09-06 22:30:40,229 - werkzeug - INFO - 127.0.0.1 - - [06/Sep/2025 22:30:40] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:28:54,352 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-08 14:28:55,955 - src.core.database - INFO - ݿʼɹ -2025-09-08 14:28:58,692 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-08 14:28:58,699 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-08 14:28:58,706 - src.main - INFO - TSPֳʼ -2025-09-08 14:28:58,716 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-08 14:28:58,731 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-08 14:28:58,733 - src.main - INFO - TSPֳʼ -2025-09-08 14:28:58,733 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-08 14:28:58,733 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-08 14:28:58,733 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-08 14:28:58,733 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-08 14:28:58,733 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-08 14:28:58,733 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-08 14:28:58,733 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-08 14:28:58,733 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-08 14:28:58,733 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-08 14:28:58,733 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-08 14:28:58,733 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-08 14:28:58,733 - src.agent.agent_core - INFO - Agentijʼ -2025-09-08 14:28:58,733 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-08 14:28:58,751 - src.knowledge_base.knowledge_manager - INFO - سɹ 47 Ŀ -2025-09-08 14:28:58,815 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.26.238:5000 -2025-09-08 14:28:58,815 - werkzeug - INFO - Press CTRL+C to quit -2025-09-08 14:29:01,397 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:01] "GET / HTTP/1.1" 200 - -2025-09-08 14:29:01,985 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:01] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-08 14:29:05,014 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:05] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-08 14:29:05,019 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:05] "GET /api/workorders HTTP/1.1" 200 - -2025-09-08 14:29:05,042 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:05] "GET /api/system/info HTTP/1.1" 200 - -2025-09-08 14:29:05,049 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:05] "GET /api/alerts HTTP/1.1" 200 - -2025-09-08 14:29:05,091 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:05] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:29:05,098 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:05] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-08 14:29:05,465 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:05] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-08 14:29:10,040 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:10] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:29:10,251 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:10] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-08 14:29:15,005 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:15] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-08 14:29:15,032 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:15] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:29:20,029 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:20] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:29:24,191 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:24] "GET /api/alerts HTTP/1.1" 200 - -2025-09-08 14:29:25,057 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:25] "GET /api/alerts HTTP/1.1" 200 - -2025-09-08 14:29:25,092 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:25] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:29:30,635 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:30] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:29:35,015 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:35] "GET /api/alerts HTTP/1.1" 200 - -2025-09-08 14:29:35,026 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:35] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:29:35,443 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:35] "POST /api/alerts/9/resolve HTTP/1.1" 200 - -2025-09-08 14:29:35,456 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:35] "GET /api/alerts HTTP/1.1" 200 - -2025-09-08 14:29:37,859 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:37] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-08 14:29:40,025 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:40] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:29:45,020 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:45] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:29:50,054 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:50] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:29:55,063 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:29:55] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:30:00,096 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:00] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:30:05,074 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:05] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:30:10,027 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:10] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:30:15,072 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:15] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:30:20,059 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:20] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:30:25,059 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:25] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:30:29,055 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-08 14:30:29,055 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿɹ: ԶʾԶ״̬... -2025-09-08 14:30:29,055 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:29] "POST /api/knowledge HTTP/1.1" 200 - -2025-09-08 14:30:29,081 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:29] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-08 14:30:30,053 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:30] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:30:34,087 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:34] "GET /api/workorders HTTP/1.1" 200 - -2025-09-08 14:30:34,609 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:34] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-08 14:30:35,020 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:35] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:30:35,532 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:35] "GET /api/alerts HTTP/1.1" 200 - -2025-09-08 14:30:37,471 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:37] "GET /api/alerts HTTP/1.1" 200 - -2025-09-08 14:30:38,160 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:38] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-08 14:30:38,883 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:38] "GET /api/alerts HTTP/1.1" 200 - -2025-09-08 14:30:39,245 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:39] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-08 14:30:40,037 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:40] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:30:42,679 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿ֤ɹ: 61 -2025-09-08 14:30:42,679 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:42] "POST /api/knowledge/verify/61 HTTP/1.1" 200 - -2025-09-08 14:30:42,693 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:42] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-08 14:30:45,018 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:45] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:30:50,023 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:50] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:30:55,042 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:30:55] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:31:00,024 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:31:00] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:31:05,021 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:31:05] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:31:10,026 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:31:10] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:31:15,016 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:31:15] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:31:20,026 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:31:20] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:31:25,019 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:31:25] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:31:30,023 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:31:30] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:31:35,062 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:31:35] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:31:40,039 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:31:40] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:31:45,025 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:31:45] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:31:50,056 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:31:50] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:31:55,051 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:31:55] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:32:00,063 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:32:00] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:32:05,040 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:32:05] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:32:10,060 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:32:10] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:32:15,032 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:32:15] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:32:20,026 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:32:20] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:32:25,048 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:32:25] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:32:30,024 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:32:30] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:32:35,052 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:32:35] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:32:40,023 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:32:40] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:32:45,025 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:32:45] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:32:50,019 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:32:50] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:32:55,013 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:32:55] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:33:00,025 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:33:00] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:33:05,050 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:33:05] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:33:10,042 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:33:10] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:33:15,052 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:33:15] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:33:20,064 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:33:20] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:33:25,012 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:33:25] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:33:30,051 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:33:30] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:33:35,014 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:33:35] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:33:40,053 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:33:40] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:33:45,050 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:33:45] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:33:50,055 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:33:50] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:33:55,019 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:33:55] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:34:00,030 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:34:00] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:34:05,030 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:34:05] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:34:10,023 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:34:10] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:34:15,030 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:34:15] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:34:20,084 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:34:20] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:34:25,168 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:34:25] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:34:30,111 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:34:30] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:34:35,261 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:34:35] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:34:40,085 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:34:40] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:34:45,105 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:34:45] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:34:50,085 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:34:50] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:34:55,086 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:34:55] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:35:00,092 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:35:00] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:35:05,086 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:35:05] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:35:10,104 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:35:10] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:35:15,088 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:35:15] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:35:31,095 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:35:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:36:31,125 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:36:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:37:31,118 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:37:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:38:31,108 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:38:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:39:31,096 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:39:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:40:31,109 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:40:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:41:31,086 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:41:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:42:31,095 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:42:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:43:31,091 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:43:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:44:31,085 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:44:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:49:04,418 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:49:04] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:49:31,091 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:49:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:50:31,125 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:50:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:51:31,093 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:51:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 14:52:31,083 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 14:52:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:11:36,665 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:11:36] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:11:40,067 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:11:40] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:11:45,105 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:11:45] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:11:50,103 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:11:50] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:11:55,125 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:11:55] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:12:00,136 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:12:00] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:12:05,121 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:12:05] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:12:10,113 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:12:10] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:12:15,111 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:12:15] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:12:20,115 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:12:20] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:12:25,114 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:12:25] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:12:30,118 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:12:30] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:12:35,129 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:12:35] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:12:40,098 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:12:40] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:13:31,126 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:13:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:13:57,459 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:13:57] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:14:00,063 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:14:00] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:14:05,101 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:14:05] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:14:10,094 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:14:10] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:14:15,093 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:14:15] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:14:20,085 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:14:20] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:14:25,103 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:14:25] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:14:30,098 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:14:30] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:14:35,107 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:14:35] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:14:40,084 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:14:40] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:14:45,085 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:14:45] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:14:50,093 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:14:50] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:14:55,097 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:14:55] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:15:00,105 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:15:00] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:15:31,092 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:15:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:16:31,107 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:16:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:17:31,104 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:17:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:18:31,114 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:18:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:19:31,097 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:19:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:20:31,084 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:20:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:21:31,105 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:21:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:22:31,101 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:22:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:23:31,108 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:23:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:24:31,102 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:24:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:25:31,094 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:25:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:26:31,092 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:26:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:27:31,139 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:27:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:28:31,130 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:28:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:29:31,187 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:29:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:30:31,159 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:30:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:31:31,136 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:31:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:32:31,146 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:32:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:33:31,133 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:33:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:35:40,176 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:35:40] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:36:31,097 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:36:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:37:31,132 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:37:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:38:31,102 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:38:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:39:31,100 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:39:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:40:31,116 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:40:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:41:31,099 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:41:31] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:43:00,051 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:43:00] "GET /api/health HTTP/1.1" 200 - -2025-09-08 15:43:31,110 - werkzeug - INFO - 127.0.0.1 - - [08/Sep/2025 15:43:31] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:36:01,003 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-10 22:36:02,691 - src.core.database - INFO - ݿʼɹ -2025-09-10 22:36:05,024 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 22:36:05,034 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 22:36:05,035 - src.main - INFO - TSPֳʼ -2025-09-10 22:36:05,044 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 22:36:05,051 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 22:36:05,052 - src.main - INFO - TSPֳʼ -2025-09-10 22:36:05,052 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-10 22:36:05,052 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-10 22:36:05,053 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-10 22:36:05,053 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-10 22:36:05,053 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-10 22:36:05,053 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-10 22:36:05,053 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-10 22:36:05,053 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-10 22:36:05,053 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-10 22:36:05,053 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-10 22:36:05,054 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-10 22:36:05,054 - src.agent.agent_core - INFO - Agentijʼ -2025-09-10 22:36:05,054 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-10 22:36:05,063 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 22:36:05,142 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.26.238:5000 -2025-09-10 22:36:05,143 - werkzeug - INFO - Press CTRL+C to quit -2025-09-10 22:36:05,179 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 22:36:05,183 - src.web.websocket_server - INFO - WebSocket: ws://localhost:8765 -2025-09-10 22:36:05,188 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-10 22:36:05,189 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-10 22:36:11,102 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:11] "GET / HTTP/1.1" 200 - -2025-09-10 22:36:11,437 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:11] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-10 22:36:13,910 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:13] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:36:14,178 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:14] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-10 22:36:14,179 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:14] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:36:14,194 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:14] "GET /api/system/info HTTP/1.1" 200 - -2025-09-10 22:36:14,214 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:14] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-10 22:36:14,214 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:14] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:36:14,274 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:14] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-10 22:36:16,244 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:16] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 22:36:17,442 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:17] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:36:18,891 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:18] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:36:19,231 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:19] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-10 22:36:23,885 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:23] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:36:24,491 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿȡ֤ɹ: 61 -2025-09-10 22:36:24,492 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:24] "POST /api/knowledge/unverify/61 HTTP/1.1" 200 - -2025-09-10 22:36:24,721 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:24] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-10 22:36:25,932 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿ֤ɹ: 61 -2025-09-10 22:36:25,933 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:25] "POST /api/knowledge/verify/61 HTTP/1.1" 200 - -2025-09-10 22:36:26,245 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:26] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-10 22:36:27,241 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿ֤ɹ: 51 -2025-09-10 22:36:27,242 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:27] "POST /api/knowledge/verify/51 HTTP/1.1" 200 - -2025-09-10 22:36:27,565 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:27] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-10 22:36:28,405 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿ֤ɹ: 52 -2025-09-10 22:36:28,406 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:28] "POST /api/knowledge/verify/52 HTTP/1.1" 200 - -2025-09-10 22:36:28,726 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:28] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-10 22:36:29,000 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:29] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:36:29,824 - src.knowledge_base.knowledge_manager - INFO - ֪ʶĿ֤ɹ: 53 -2025-09-10 22:36:29,825 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:29] "POST /api/knowledge/verify/53 HTTP/1.1" 200 - -2025-09-10 22:36:30,137 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:30] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-10 22:36:31,290 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:31] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:36:33,343 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:33] "GET /api/workorders/1 HTTP/1.1" 200 - -2025-09-10 22:36:33,886 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:33] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:36:39,194 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:39] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:36:42,193 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:42] "GET /api/workorders/1 HTTP/1.1" 200 - -2025-09-10 22:36:44,196 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:44] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:36:47,972 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:47] "GET /api/analytics HTTP/1.1" 200 - -2025-09-10 22:36:49,206 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:49] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:36:50,882 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:50] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 22:36:53,493 - src.analytics.monitor_service - INFO - ط -2025-09-10 22:36:53,494 - src.main - INFO - ط -2025-09-10 22:36:53,495 - src.agent.auto_monitor - INFO - Զѭ -2025-09-10 22:36:53,495 - src.agent.auto_monitor - INFO - Զط -2025-09-10 22:36:53,496 - src.agent.auto_monitor - INFO - ִе 1 Զؼ -2025-09-10 22:36:53,496 - src.agent_assistant - INFO - -2025-09-10 22:36:53,497 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:53] "POST /api/agent/monitoring/start HTTP/1.1" 200 - -2025-09-10 22:36:53,535 - src.agent.auto_monitor - INFO - ж: alert_overflow - ԾԤ: 17 -2025-09-10 22:36:53,536 - src.agent.auto_monitor - INFO - ж¼: {"timestamp": "2025-09-10T22:36:53.536449", "action_type": "alert_overflow", "priority": "high", "description": "ԾԤ: 17", "action": "Ԥ", "data": {"alert_count": 17}} -2025-09-10 22:36:53,537 - src.agent.auto_monitor - INFO - Ԥ -2025-09-10 22:36:53,537 - src.agent.auto_monitor - ERROR - 鹤ѹʧ: 'TSPAgentAssistant' object has no attribute 'get_workorders' -2025-09-10 22:36:53,552 - src.analytics.monitor_service - INFO - 3 Ԥ -2025-09-10 22:36:53,552 - src.analytics.monitor_service - WARNING - Ԥ: ûȽϵ: 0.00 (ֵ: 0.6) -2025-09-10 22:36:53,552 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': 'ûȽϵ: 0.00 (ֵ: 0.6)', 'timestamp': '2025-09-10T22:36:53.511361', 'rule_name': 'Ԥ'} -2025-09-10 22:36:53,552 - src.analytics.monitor_service - WARNING - Ԥ: ûȽϵ: 0.00 (ֵ: 0.6) -2025-09-10 22:36:53,553 - src.analytics.monitor_service - WARNING - Ԥ: ֪ʶʽϵ: 0.00 (ֵ: 0.5) -2025-09-10 22:36:53,553 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': '֪ʶʽϵ: 0.00 (ֵ: 0.5)', 'timestamp': '2025-09-10T22:36:53.530414', 'rule_name': '֪ʶԤ'} -2025-09-10 22:36:53,553 - src.analytics.monitor_service - WARNING - Ԥ: ֪ʶʽϵ: 0.00 (ֵ: 0.5) -2025-09-10 22:36:53,553 - src.analytics.monitor_service - WARNING - Ԥ: ϵͳڴʹʹ: 84.1% (ֵ: 80.0%) -2025-09-10 22:36:53,553 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': 'ϵͳڴʹʹ: 84.1% (ֵ: 80.0%)', 'timestamp': '2025-09-10T22:36:53.547594', 'rule_name': 'ڴʹԤ'} -2025-09-10 22:36:53,553 - src.analytics.monitor_service - WARNING - Ԥ: ϵͳڴʹʹ: 84.1% (ֵ: 80.0%) -2025-09-10 22:36:53,883 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:53] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:36:54,183 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:54] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 22:36:56,413 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:56] "POST /api/agent/intelligent-analysis HTTP/1.1" 200 - -2025-09-10 22:36:56,674 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:56] "POST /api/agent/intelligent-analysis HTTP/1.1" 200 - -2025-09-10 22:36:57,922 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:57] "GET /api/settings HTTP/1.1" 200 - -2025-09-10 22:36:59,189 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:36:59] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:37:01,829 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:37:01] "GET /api/analytics HTTP/1.1" 200 - -2025-09-10 22:37:04,190 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:37:04] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:37:06,201 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:37:06] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:37:09,191 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:37:09] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:37:13,890 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:37:13] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:37:19,202 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:37:19] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:37:24,094 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:37:24] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:37:29,212 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:37:29] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:37:33,893 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:37:33] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:37:39,396 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:37:39] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:37:44,082 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:37:44] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:37:49,393 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:37:49] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:37:54,090 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:37:54] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:37:59,400 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:37:59] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:38:00,132 - websockets.server - INFO - connection rejected (426 Upgrade Required) -2025-09-10 22:38:00,134 - websockets.server - INFO - connection closed -2025-09-10 22:38:00,275 - websockets.server - INFO - connection rejected (426 Upgrade Required) -2025-09-10 22:38:00,278 - websockets.server - INFO - connection closed -2025-09-10 22:38:04,090 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:38:04] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:38:09,402 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:38:09] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:38:14,090 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:38:14] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:38:19,407 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:38:19] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:38:24,096 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:38:24] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:38:29,408 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:38:29] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:38:34,088 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:38:34] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:38:39,208 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:38:39] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:38:44,132 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:38:44] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:38:49,414 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:38:49] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:38:54,096 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:38:54] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:38:59,406 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:38:59] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:39:04,090 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:39:04] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:39:09,415 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:39:09] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:39:14,092 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:39:14] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:39:19,399 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:39:19] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:39:24,094 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:39:24] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:39:29,416 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:39:29] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:39:34,095 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:39:34] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:39:39,412 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:39:39] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:40:00,101 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:40:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:40:15,161 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:40:15] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:40:16,829 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:40:16] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 22:40:18,698 - src.dialogue.realtime_chat - INFO - »Ự: session_user_001_1757515218 -2025-09-10 22:40:18,701 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:40:18] "POST /api/chat/session HTTP/1.1" 200 - -2025-09-10 22:40:18,978 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:40:18] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:40:23,139 - src.core.llm_client - INFO - APIɹ -2025-09-10 22:40:23,153 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:40:23] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-10 22:40:24,227 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:40:24] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:40:27,306 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:40:27] "GET /chat HTTP/1.1" 200 - -2025-09-10 22:40:27,662 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:40:27] "GET /static/js/chat.js HTTP/1.1" 304 - -2025-09-10 22:40:28,607 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:40:28] "GET /chat HTTP/1.1" 200 - -2025-09-10 22:40:28,707 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:40:28] "GET /static/js/chat.js HTTP/1.1" 304 - -2025-09-10 22:40:29,107 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:40:29] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:40:29,939 - websockets.server - INFO - connection open -2025-09-10 22:40:29,940 - src.web.websocket_server - INFO - ͻ: ('::1', 13772, 0, 0) -2025-09-10 22:40:29,950 - src.dialogue.realtime_chat - INFO - »Ự: session_user_001_1757515229 -2025-09-10 22:40:34,452 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:40:34] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:40:36,817 - src.core.llm_client - INFO - APIɹ -2025-09-10 22:40:39,107 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:40:39] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:40:44,499 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:40:44] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:40:49,125 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:40:49] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:40:53,654 - src.analytics.monitor_service - INFO - 1 Ԥ -2025-09-10 22:40:53,654 - src.analytics.monitor_service - WARNING - Ԥ: ûԻжʹ: 0.50 (ֵ: 0.3) -2025-09-10 22:40:53,655 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': 'ûԻжʹ: 0.50 (ֵ: 0.3)', 'timestamp': '2025-09-10T22:40:53.647669', 'rule_name': 'ԻжԤ'} -2025-09-10 22:40:53,655 - src.analytics.monitor_service - WARNING - Ԥ: ûԻжʹ: 0.50 (ֵ: 0.3) -2025-09-10 22:40:54,415 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:40:54] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:40:59,100 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:40:59] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:41:04,419 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:04] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:41:09,114 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:09] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:41:14,426 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:14] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:41:19,097 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:19] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:41:24,420 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:24] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:41:24,657 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:24] "GET / HTTP/1.1" 200 - -2025-09-10 22:41:24,820 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:24] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-10 22:41:25,212 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:25] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:41:25,489 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:25] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-10 22:41:25,496 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:25] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:41:25,514 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:25] "GET /api/system/info HTTP/1.1" 200 - -2025-09-10 22:41:25,525 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:25] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:41:25,544 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:25] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-10 22:41:27,055 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:27] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-10 22:41:27,845 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:27] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:41:30,494 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:30] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:41:30,803 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:30] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:41:33,174 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:33] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:41:35,180 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:35] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:41:36,624 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:36] "GET /api/workorders?status=open HTTP/1.1" 200 - -2025-09-10 22:41:40,186 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:40] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:41:40,467 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:40] "GET /api/workorders?status=open HTTP/1.1" 200 - -2025-09-10 22:41:46,429 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:46] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:41:51,114 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:51] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:41:53,547 - src.agent.auto_monitor - INFO - ִе 2 Զؼ -2025-09-10 22:41:53,562 - src.agent.auto_monitor - INFO - ж: alert_overflow - ԾԤ: 23 -2025-09-10 22:41:53,563 - src.agent.auto_monitor - INFO - ж¼: {"timestamp": "2025-09-10T22:41:53.563228", "action_type": "alert_overflow", "priority": "high", "description": "ԾԤ: 23", "action": "Ԥ", "data": {"alert_count": 23}} -2025-09-10 22:41:53,563 - src.agent.auto_monitor - INFO - Ԥ -2025-09-10 22:41:53,563 - src.agent.auto_monitor - ERROR - 鹤ѹʧ: 'TSPAgentAssistant' object has no attribute 'get_workorders' -2025-09-10 22:41:56,425 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:41:56] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:00,154 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:01,436 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:01] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:03,671 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:03] "GET /alerts HTTP/1.1" 200 - -2025-09-10 22:42:04,020 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:04] "GET /static/css/style.css HTTP/1.1" 200 - -2025-09-10 22:42:04,268 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:04] "GET /static/js/app.js HTTP/1.1" 200 - -2025-09-10 22:42:04,686 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:04] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:42:04,694 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:04] "GET /api/rules HTTP/1.1" 200 - -2025-09-10 22:42:04,708 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:04] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:04,778 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:04] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:42:05,290 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:05] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:09,677 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:09] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:09,698 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:09] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:42:11,120 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:11] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:14,696 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:14] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:42:14,702 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:14] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:42:14,704 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:14] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:16,132 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:16] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:18,012 - src.analytics.monitor_service - INFO - ط -2025-09-10 22:42:18,014 - src.main - INFO - ط -2025-09-10 22:42:18,015 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:18] "POST /api/monitor/start HTTP/1.1" 200 - -2025-09-10 22:42:18,120 - src.analytics.monitor_service - INFO - 4 Ԥ -2025-09-10 22:42:18,120 - src.analytics.monitor_service - WARNING - Ԥ: ûȽϵ: 0.00 (ֵ: 0.6) -2025-09-10 22:42:18,120 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': 'ûȽϵ: 0.00 (ֵ: 0.6)', 'timestamp': '2025-09-10T22:42:18.022114', 'rule_name': 'Ԥ'} -2025-09-10 22:42:18,120 - src.analytics.monitor_service - WARNING - Ԥ: ûȽϵ: 0.00 (ֵ: 0.6) -2025-09-10 22:42:18,121 - src.analytics.monitor_service - WARNING - Ԥ: ֪ʶʽϵ: 0.00 (ֵ: 0.5) -2025-09-10 22:42:18,122 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': '֪ʶʽϵ: 0.00 (ֵ: 0.5)', 'timestamp': '2025-09-10T22:42:18.067562', 'rule_name': '֪ʶԤ'} -2025-09-10 22:42:18,123 - src.analytics.monitor_service - WARNING - Ԥ: ֪ʶʽϵ: 0.00 (ֵ: 0.5) -2025-09-10 22:42:18,124 - src.analytics.monitor_service - WARNING - Ԥ: ϵͳڴʹʹ: 84.8% (ֵ: 80.0%) -2025-09-10 22:42:18,126 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': 'ϵͳڴʹʹ: 84.8% (ֵ: 80.0%)', 'timestamp': '2025-09-10T22:42:18.101003', 'rule_name': 'ڴʹԤ'} -2025-09-10 22:42:18,126 - src.analytics.monitor_service - WARNING - Ԥ: ϵͳڴʹʹ: 84.8% (ֵ: 80.0%) -2025-09-10 22:42:18,126 - src.analytics.monitor_service - WARNING - Ԥ: ûԻжʹ: 0.50 (ֵ: 0.3) -2025-09-10 22:42:18,127 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': 'ûԻжʹ: 0.50 (ֵ: 0.3)', 'timestamp': '2025-09-10T22:42:18.113652', 'rule_name': 'ԻжԤ'} -2025-09-10 22:42:18,128 - src.analytics.monitor_service - WARNING - Ԥ: ûԻжʹ: 0.50 (ֵ: 0.3) -2025-09-10 22:42:18,301 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:18] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:42:19,365 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:19] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:19,707 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:19] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:42:21,434 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:21] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:24,428 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:24] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:24,666 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:24] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:42:24,742 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:24] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:42:26,444 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:26] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:29,367 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:29] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:29,756 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:29] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:42:30,765 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:30] "POST /api/alerts/31/resolve HTTP/1.1" 200 - -2025-09-10 22:42:31,001 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:31] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:42:31,128 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:31] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:34,349 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:34] "POST /api/alerts/33/resolve HTTP/1.1" 200 - -2025-09-10 22:42:34,620 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:34] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:34,655 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:34] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:42:34,680 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:34] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:42:34,698 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:34] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:42:35,190 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:35] "POST /api/alerts/34/resolve HTTP/1.1" 200 - -2025-09-10 22:42:35,444 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:35] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:42:36,175 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:36] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:38,558 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:38] "POST /api/alerts/32/resolve HTTP/1.1" 200 - -2025-09-10 22:42:38,807 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:38] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:42:39,363 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:39] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:39,782 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:39] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:42:41,434 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:41] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:44,345 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:44] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:44,694 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:44] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:42:44,728 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:44] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:42:50,442 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:50] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:50,444 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:50] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:42:55,110 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:55] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:42:55,424 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:55] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:42:55,445 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:42:55] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:43:00,459 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:00,465 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:43:00,704 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:00,816 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:05,135 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:05] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:05,468 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:05] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:43:05,781 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:05] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:43:05,831 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:05] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:06,519 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:06] "GET /api/workorders?status=open HTTP/1.1" 200 - -2025-09-10 22:43:08,243 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:08] "GET / HTTP/1.1" 200 - -2025-09-10 22:43:08,556 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:08] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-10 22:43:09,054 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:09] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-10 22:43:09,074 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:09] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:43:09,082 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:09] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:43:09,107 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:09] "GET /api/system/info HTTP/1.1" 200 - -2025-09-10 22:43:09,177 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:09] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-10 22:43:09,183 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:09] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:09,395 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:09] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:43:10,471 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:10] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:10,486 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:10] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:43:13,766 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:13] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:14,401 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:14] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:43:15,159 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:15] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:15,417 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:15] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:43:15,444 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:15] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:43:19,414 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:19] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:19,860 - src.dialogue.realtime_chat - INFO - Ự: session_user_001_1757515229 -2025-09-10 22:43:20,114 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:20] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:20,429 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:20] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:43:24,414 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:24] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:25,116 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:25] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:25,429 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:25] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:43:25,509 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:25] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:43:28,069 - src.web.websocket_server - INFO - ͻ˶Ͽ: ('::1', 13772, 0, 0) -2025-09-10 22:43:28,069 - websockets.server - INFO - connection closed -2025-09-10 22:43:29,200 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:29] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:29,839 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:29] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 22:43:30,439 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:30] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:30,447 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:30] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:43:33,774 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:33] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:35,439 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:35] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:43:35,464 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:35] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:35,493 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:35] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:43:37,106 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:37] "POST /api/agent/intelligent-analysis HTTP/1.1" 200 - -2025-09-10 22:43:39,048 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:39] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 22:43:39,055 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:39] "POST /api/agent/proactive-monitoring HTTP/1.1" 200 - -2025-09-10 22:43:39,102 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:39] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:40,119 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:40] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:40,439 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:40] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:43:42,340 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:42] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:43:43,756 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:43] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:45,311 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:45] "GET /api/workorders/1 HTTP/1.1" 200 - -2025-09-10 22:43:45,445 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:45] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:43:45,478 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:45] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:45,498 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:45] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:43:46,459 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:46] "GET /api/workorders/1 HTTP/1.1" 200 - -2025-09-10 22:43:48,756 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:48] "GET /api/workorders/1 HTTP/1.1" 200 - -2025-09-10 22:43:49,048 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:49] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:50,111 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:50] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:50,415 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:50] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:43:54,487 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:54] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:55,128 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:55] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:43:55,419 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:55] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:43:55,453 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:55] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:43:59,408 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:43:59] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:44:00,109 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:44:00,420 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:44:00,457 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:44:04,413 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:04] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:44:05,113 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:05] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:44:05,403 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:05] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:44:05,422 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:05] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:44:09,415 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:09] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:44:10,114 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:10] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:44:10,421 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:10] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:44:14,411 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:14] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:44:15,109 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:15] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:44:15,416 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:15] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:44:15,418 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:15] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:44:19,418 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:19] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:44:20,101 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:20] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:44:20,428 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:20] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:44:24,406 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:24] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:44:25,113 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:25] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:44:25,405 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:25] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:44:25,422 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:25] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:44:29,416 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:29] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:44:34,091 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:34] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:44:39,421 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:39] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:44:44,099 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:44] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:44:49,422 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:44:49] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:45:00,123 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:45:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:45:00,419 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:45:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:45:00,437 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:45:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:45:00,474 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:45:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:45:00,823 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:45:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:46:00,401 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:46:00,412 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:46:00,413 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:46:00,671 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:46:00,734 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:46:20,637 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-10 22:46:21,476 - src.core.database - INFO - ݿʼɹ -2025-09-10 22:46:22,871 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 22:46:22,880 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 22:46:22,881 - src.main - INFO - TSPֳʼ -2025-09-10 22:46:22,891 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 22:46:22,900 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 22:46:22,902 - src.main - INFO - TSPֳʼ -2025-09-10 22:46:22,902 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-10 22:46:22,902 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-10 22:46:22,903 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-10 22:46:22,903 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-10 22:46:22,903 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-10 22:46:22,903 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-10 22:46:22,904 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-10 22:46:22,904 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-10 22:46:22,904 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-10 22:46:22,905 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-10 22:46:22,905 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-10 22:46:22,905 - src.agent.agent_core - INFO - Agentijʼ -2025-09-10 22:46:22,905 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-10 22:46:22,916 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 22:46:22,978 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.26.238:5000 -2025-09-10 22:46:22,978 - werkzeug - INFO - Press CTRL+C to quit -2025-09-10 22:46:23,004 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 22:46:23,006 - src.web.websocket_server - INFO - WebSocket: ws://localhost:8765 -2025-09-10 22:46:23,011 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-10 22:46:23,011 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-10 22:46:28,171 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:28] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:46:28,747 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:28] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:46:34,394 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:34] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:46:35,437 - websockets.server - INFO - connection rejected (200 OK) -2025-09-10 22:46:35,438 - websockets.server - INFO - connection closed -2025-09-10 22:46:35,608 - websockets.server - INFO - connection rejected (200 OK) -2025-09-10 22:46:35,624 - websockets.server - INFO - connection closed -2025-09-10 22:46:39,083 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:39] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:46:44,408 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:44] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:46:46,320 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:46] "GET / HTTP/1.1" 200 - -2025-09-10 22:46:46,613 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:46] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-10 22:46:47,410 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:47] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-10 22:46:47,417 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:47] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:46:47,420 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:47] "GET /api/system/info HTTP/1.1" 200 - -2025-09-10 22:46:47,456 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:47] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:46:47,466 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:47] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:46:47,477 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:47] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-10 22:46:47,539 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:47] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-10 22:46:49,088 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:49] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:46:52,419 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:52] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:46:54,406 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:54] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:46:55,108 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:55] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:46:56,537 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:56] "GET /api/workorders/1 HTTP/1.1" 200 - -2025-09-10 22:46:57,437 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:57] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:46:59,087 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:46:59] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:00,403 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:47:00,432 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:00,437 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:47:00,655 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:02,410 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:02] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:04,092 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:04] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:06,352 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:06] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:47:07,413 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:07] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:09,004 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:09] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-10 22:47:09,389 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:09] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:12,411 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:12] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:13,324 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:47:14,093 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:14] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:16,978 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:16] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-10 22:47:17,417 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:17] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:17,776 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:17] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:47:18,450 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:18] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-10 22:47:19,406 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:19] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:21,975 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:21] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 22:47:22,412 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:22] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:24,097 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:24] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:24,696 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:24] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-10 22:47:24,702 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:24] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:47:24,709 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:24] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:47:24,723 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:24] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-10 22:47:25,262 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:25] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:47:25,706 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:25] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:47:26,507 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:26] "GET /api/analytics HTTP/1.1" 200 - -2025-09-10 22:47:27,043 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:27] "GET /api/settings HTTP/1.1" 200 - -2025-09-10 22:47:27,415 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:27] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:29,439 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:29] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:33,085 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:33] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:38,088 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:38] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:43,094 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:43] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:48,086 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:48] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:53,083 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:53] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:47:58,090 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:47:58] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:48:00,097 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:48:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:48:00,388 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:48:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:48:00,399 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:48:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:48:00,415 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:48:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:48:00,736 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:48:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:48:03,102 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:48:03] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:48:08,096 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:48:08] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:48:13,093 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:48:13] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:48:18,095 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:48:18] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:48:23,102 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:48:23] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:48:28,106 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:48:28] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:49:00,160 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:49:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:49:00,452 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:49:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:49:00,454 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:49:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:49:00,477 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:49:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:49:00,692 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:49:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:49:00,798 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:49:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:50:00,136 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:50:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:50:00,143 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:50:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:50:00,413 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:50:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:50:00,442 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:50:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:50:00,477 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:50:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:50:00,834 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:50:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:51:00,112 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:51:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:51:00,432 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:51:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:51:00,455 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:51:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:51:00,458 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:51:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:51:00,675 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:51:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:51:00,800 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:51:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:52:00,123 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:52:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:52:00,125 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:52:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:52:00,410 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:52:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:52:00,426 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:52:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:52:00,453 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:52:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:52:00,784 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:52:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:52:24,642 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:52:24] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:52:25,904 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:52:25] "GET /api/analytics HTTP/1.1" 200 - -2025-09-10 22:52:27,456 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:52:27] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:52:33,108 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:52:33] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:52:38,104 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:52:38] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:52:43,103 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:52:43] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:52:48,102 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:52:48] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:52:53,106 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:52:53] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:52:58,092 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:52:58] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:53:00,415 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:53:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:53:00,442 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:53:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:53:00,445 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:53:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:53:00,684 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:53:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:53:00,772 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:53:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:53:03,104 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:53:03] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:53:08,108 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:53:08] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:53:13,096 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:53:13] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:53:18,104 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:53:18] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:53:23,095 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:53:23] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:53:28,116 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:53:28] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:54:00,125 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:54:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:54:00,146 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:54:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:54:00,435 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:54:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:54:00,474 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:54:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:54:00,488 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:54:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:54:00,829 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:54:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:55:00,142 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:55:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:55:00,443 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:55:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:55:00,455 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:55:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:55:00,474 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:55:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:55:00,719 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:55:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:55:00,782 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:55:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:55:48,827 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:55:48] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:55:53,096 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:55:53] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:55:58,093 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:55:58] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:56:00,098 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:56:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:56:00,400 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:56:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:56:00,413 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:56:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:56:00,424 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:56:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:56:00,753 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:56:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:56:03,091 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:56:03] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:56:08,102 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:56:08] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:56:13,088 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:56:13] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:56:18,095 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:56:18] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:56:23,098 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:56:23] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:56:28,099 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:56:28] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:56:33,088 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:56:33] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:56:38,090 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:56:38] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:56:43,089 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:56:43] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:56:48,095 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:56:48] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:57:00,107 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:57:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:57:00,425 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:57:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:57:00,437 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:57:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:57:00,463 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:57:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:57:00,684 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:57:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:57:00,770 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:57:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:58:03,303 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-10 22:58:05,745 - src.core.database - INFO - ݿʼɹ -2025-09-10 22:58:07,461 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 22:58:07,470 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 22:58:07,471 - src.main - INFO - TSPֳʼ -2025-09-10 22:58:07,480 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 22:58:07,492 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 22:58:07,494 - src.main - INFO - TSPֳʼ -2025-09-10 22:58:07,494 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-10 22:58:07,495 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-10 22:58:07,495 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-10 22:58:07,495 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-10 22:58:07,495 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-10 22:58:07,495 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-10 22:58:07,495 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-10 22:58:07,495 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-10 22:58:07,496 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-10 22:58:07,496 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-10 22:58:07,496 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-10 22:58:07,496 - src.agent.agent_core - INFO - Agentijʼ -2025-09-10 22:58:07,496 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-10 22:58:07,507 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 22:58:07,570 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.26.238:5000 -2025-09-10 22:58:07,571 - werkzeug - INFO - Press CTRL+C to quit -2025-09-10 22:58:07,597 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 22:58:07,599 - src.web.websocket_server - INFO - WebSocket: ws://localhost:8765 -2025-09-10 22:58:07,603 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-10 22:58:07,604 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-10 22:58:20,916 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:20] "GET / HTTP/1.1" 200 - -2025-09-10 22:58:21,166 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:21] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-10 22:58:21,410 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:21] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-10 22:58:21,417 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:21] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:58:21,439 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:21] "GET /api/system/info HTTP/1.1" 200 - -2025-09-10 22:58:21,463 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:21] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:58:21,495 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:21] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-10 22:58:21,520 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:21] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:58:21,608 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:21] "GET /api/analytics HTTP/1.1" 200 - -2025-09-10 22:58:22,927 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:22] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 22:58:26,415 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:26] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:58:29,362 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:29] "GET /api/workorders/import/template HTTP/1.1" 200 - -2025-09-10 22:58:29,371 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:29] "GET /uploads/workorder_template.xlsx HTTP/1.1" 404 - -2025-09-10 22:58:31,416 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:31] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:58:32,421 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:32] "GET /uploads/workorder_template.xlsx HTTP/1.1" 404 - -2025-09-10 22:58:36,414 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:36] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:58:41,419 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:41] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:58:46,421 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:46] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:58:51,415 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:51] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:58:55,684 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:55] "POST /api/workorders/import HTTP/1.1" 400 - -2025-09-10 22:58:56,415 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:58:56] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:59:00,120 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:59:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:59:00,121 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:59:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:59:00,402 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:59:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 22:59:00,417 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:59:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 22:59:00,442 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:59:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:59:00,772 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:59:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:59:01,512 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:59:01] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:59:07,096 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:59:07] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:59:12,110 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:59:12] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:59:17,088 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:59:17] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:59:22,098 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:59:22] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:59:27,119 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:59:27] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:59:32,117 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:59:32] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:59:37,121 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:59:37] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:59:42,099 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:59:42] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:59:47,104 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:59:47] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:59:52,107 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:59:52] "GET /api/health HTTP/1.1" 200 - -2025-09-10 22:59:57,109 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 22:59:57] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:00:00,130 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:00:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:00:00,429 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:00:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:00:00,458 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:00:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:00:00,462 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:00:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:00:00,690 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:00:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:00:00,797 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:00:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:00:02,113 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:00:02] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:01:00,135 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:01:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:01:00,183 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:01:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:01:00,469 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:01:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:01:00,471 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:01:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:01:00,480 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:01:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:01:00,708 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:01:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:01:00,819 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:01:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:02:00,134 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:02:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:02:00,142 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:02:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:02:00,184 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:02:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:02:00,413 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:02:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:02:00,440 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:02:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:02:00,475 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:02:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:02:00,809 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:02:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:03:00,120 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:03:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:03:00,161 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:03:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:03:00,427 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:03:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:03:00,467 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:03:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:03:00,473 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:03:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:03:00,683 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:03:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:03:00,811 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:03:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:04:00,125 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:04:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:04:00,144 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:04:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:04:00,189 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:04:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:04:00,428 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:04:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:04:00,446 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:04:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:04:00,469 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:04:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:04:00,800 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:04:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:05:00,134 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:05:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:05:00,177 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:05:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:05:00,429 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:05:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:05:00,462 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:05:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:05:00,472 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:05:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:05:00,701 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:05:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:05:00,806 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:05:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:06:00,145 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:06:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:06:00,157 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:06:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:06:00,201 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:06:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:06:00,417 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:06:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:06:00,442 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:06:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:06:00,497 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:06:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:06:00,828 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:06:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:07:00,131 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:07:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:07:00,176 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:07:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:07:00,426 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:07:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:07:00,452 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:07:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:07:00,458 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:07:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:07:00,681 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:07:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:07:00,793 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:07:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:08:00,141 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:08:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:08:00,143 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:08:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:08:00,196 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:08:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:08:00,436 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:08:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:08:00,455 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:08:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:08:00,496 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:08:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:08:00,849 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:08:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:09:00,123 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:09:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:09:00,160 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:09:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:09:00,425 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:09:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:09:00,446 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:09:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:09:00,448 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:09:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:09:00,700 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:09:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:09:00,781 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:09:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:10:00,136 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:10:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:10:00,138 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:10:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:10:00,171 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:10:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:10:00,418 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:10:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:10:00,427 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:10:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:10:00,468 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:10:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:10:00,794 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:10:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:11:00,124 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:11:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:11:00,157 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:11:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:11:00,416 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:11:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:11:00,421 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:11:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:11:00,432 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:11:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:11:00,688 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:11:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:11:00,767 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:11:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:12:00,137 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:12:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:12:00,154 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:12:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:12:00,189 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:12:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:12:00,413 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:12:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:12:00,423 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:12:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:12:00,465 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:12:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:12:00,779 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:12:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:13:00,119 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:13:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:13:00,160 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:13:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:13:00,431 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:13:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:13:00,451 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:13:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:13:00,452 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:13:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:13:00,688 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:13:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:13:00,788 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:13:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:13:32,703 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:13:32] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:13:37,091 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:13:37] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:13:42,093 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:13:42] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:13:47,095 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:13:47] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:13:52,093 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:13:52] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:13:57,088 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:13:57] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:14:00,102 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:14:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:14:00,105 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:14:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:14:00,391 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:14:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:14:00,401 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:14:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:14:00,428 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:14:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:14:00,746 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:14:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:14:02,084 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:14:02] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:14:07,085 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:14:07] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:14:12,089 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:14:12] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:14:17,094 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:14:17] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:14:22,105 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:14:22] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:14:27,094 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:14:27] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:14:32,096 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:14:32] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:15:49,165 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-10 23:15:51,033 - src.core.database - INFO - ݿʼɹ -2025-09-10 23:15:52,585 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 23:15:52,596 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 23:15:52,598 - src.main - INFO - TSPֳʼ -2025-09-10 23:15:52,612 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 23:15:52,627 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 23:15:52,631 - src.main - INFO - TSPֳʼ -2025-09-10 23:15:52,631 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-10 23:15:52,631 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-10 23:15:52,632 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-10 23:15:52,632 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-10 23:15:52,632 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-10 23:15:52,632 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-10 23:15:52,632 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-10 23:15:52,633 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-10 23:15:52,633 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-10 23:15:52,633 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-10 23:15:52,634 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-10 23:15:52,634 - src.agent.agent_core - INFO - Agentijʼ -2025-09-10 23:15:52,634 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-10 23:15:52,648 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 23:15:52,740 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.26.238:5000 -2025-09-10 23:15:52,740 - werkzeug - INFO - Press CTRL+C to quit -2025-09-10 23:15:52,763 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 23:15:52,765 - src.web.websocket_server - INFO - WebSocket: ws://localhost:8765 -2025-09-10 23:15:52,768 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-10 23:15:52,768 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-10 23:15:54,110 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:15:54] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:15:54,122 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:15:54] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:15:54,123 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:15:54] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:15:54,361 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:15:54] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:15:54,639 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:15:54] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:15:54,650 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:15:54] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:15:55,030 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:15:55] "GET /alerts HTTP/1.1" 200 - -2025-09-10 23:15:55,332 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:15:55] "GET /static/css/style.css HTTP/1.1" 304 - -2025-09-10 23:15:55,379 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:15:55] "GET /static/js/app.js HTTP/1.1" 304 - -2025-09-10 23:15:55,703 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:15:55] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:15:55,706 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:15:55] "GET /api/rules HTTP/1.1" 200 - -2025-09-10 23:15:55,713 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:15:55] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:15:55,731 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:15:55] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:15:57,901 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:15:57] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:15:59,057 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:15:59] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:00,103 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:00,104 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:00,145 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:00,843 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:00] "GET / HTTP/1.1" 200 - -2025-09-10 23:16:00,894 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:00] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-10 23:16:01,099 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:01] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:01,398 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:01] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:16:02,439 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:02] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-10 23:16:02,440 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:02] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 23:16:02,445 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:02] "GET /api/system/info HTTP/1.1" 200 - -2025-09-10 23:16:02,468 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:02] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:16:02,491 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:02] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-10 23:16:02,501 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:02] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:02,750 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:02] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 23:16:04,785 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:04] "GET /api/analytics HTTP/1.1" 200 - -2025-09-10 23:16:05,043 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:05] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-10 23:16:06,099 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:06] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:06,414 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:06] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:16:06,433 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:06] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:16:07,457 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:07] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:10,098 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:10] "GET / HTTP/1.1" 200 - -2025-09-10 23:16:10,402 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:10] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-10 23:16:10,735 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:10] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 23:16:10,736 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:10] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-10 23:16:10,743 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:10] "GET /api/system/info HTTP/1.1" 200 - -2025-09-10 23:16:10,752 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:10] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:16:10,760 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:10] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-10 23:16:10,774 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:10] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:11,047 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:11] "GET /api/analytics HTTP/1.1" 200 - -2025-09-10 23:16:11,363 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:11] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-10 23:16:11,433 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:11] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:16:11,435 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:11] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:15,435 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:15] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:16,405 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:16] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:16:16,434 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:16] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:16,435 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:16] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:16:21,103 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:21] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:21,424 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:21] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:16:21,424 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:21] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:26,396 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:26] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:16:26,415 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:26] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:16:26,417 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:26] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:26,665 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:26] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:31,079 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:31] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:31,429 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:31] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:31,430 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:31] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:16:36,114 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:36] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:36,408 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:36] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:16:36,422 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:36] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:16:36,444 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:36] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:41,418 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:41] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:16:41,420 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:41] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:41,673 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:41] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:46,098 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:46] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:46,392 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:46] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:16:46,413 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:46] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:16:46,439 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:46] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:51,422 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:51] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:51,431 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:51] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:16:51,671 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:51] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:56,103 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:56] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:16:56,399 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:56] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:16:56,419 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:56] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:16:56,449 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:16:56] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:17:00,113 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:17:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:17:00,139 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:17:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:17:00,444 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:17:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:17:01,100 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:17:01] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:17:06,519 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:17:06] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:17:11,092 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:17:11] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:17:16,413 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:17:16] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:18:00,133 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:18:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:18:00,157 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:18:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:18:00,205 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:18:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:18:00,436 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:18:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:18:00,477 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:18:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:18:00,491 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:18:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:18:00,821 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:18:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:19:00,139 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:19:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:19:00,178 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:19:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:19:00,431 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:19:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:19:00,432 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:19:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:19:00,441 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:19:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:19:00,708 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:19:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:19:00,756 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:19:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:19:39,697 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:19:39] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:19:40,789 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:19:40] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:19:46,105 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:19:46] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:19:51,423 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:19:51] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:19:52,745 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:19:52] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:19:56,109 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:19:56] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:19:57,090 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:19:57] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:00,112 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:00,419 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:20:00,479 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:00,500 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:20:00,694 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:01,099 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:01] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:02,097 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:02] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:06,416 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:06] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:07,093 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:07] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:11,083 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:11] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:12,088 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:12] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:16,414 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:16] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:17,104 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:17] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:22,750 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-10 23:20:24,447 - src.core.database - INFO - ݿʼɹ -2025-09-10 23:20:25,501 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 23:20:25,511 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 23:20:25,513 - src.main - INFO - TSPֳʼ -2025-09-10 23:20:25,526 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 23:20:25,540 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 23:20:25,542 - src.main - INFO - TSPֳʼ -2025-09-10 23:20:25,542 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-10 23:20:25,542 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-10 23:20:25,542 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-10 23:20:25,543 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-10 23:20:25,543 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-10 23:20:25,543 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-10 23:20:25,543 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-10 23:20:25,543 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-10 23:20:25,544 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-10 23:20:25,544 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-10 23:20:25,544 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-10 23:20:25,544 - src.agent.agent_core - INFO - Agentijʼ -2025-09-10 23:20:25,544 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-10 23:20:25,558 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 23:20:25,639 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.26.238:5000 -2025-09-10 23:20:25,640 - werkzeug - INFO - Press CTRL+C to quit -2025-09-10 23:20:25,665 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 23:20:25,668 - src.web.websocket_server - INFO - WebSocket: ws://localhost:8765 -2025-09-10 23:20:25,672 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-10 23:20:25,673 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-10 23:20:26,418 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:26] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:27,087 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:27] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:30,622 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:30] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:31,085 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:31] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:32,091 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:32] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:33,090 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:33] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:20:33,103 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:33] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:33,112 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:33] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:33,113 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:33] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:20:35,431 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:35] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:35,854 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:35] "GET / HTTP/1.1" 200 - -2025-09-10 23:20:35,908 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:35] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-10 23:20:36,124 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:36] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:36,404 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:36] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:20:36,417 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:36] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:20:36,831 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:36] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-10 23:20:36,835 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:36] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 23:20:36,844 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:36] "GET /api/system/info HTTP/1.1" 200 - -2025-09-10 23:20:36,865 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:36] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:20:36,882 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:36] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-10 23:20:36,903 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:36] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:37,097 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:37] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:37,147 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:37] "GET /api/analytics HTTP/1.1" 200 - -2025-09-10 23:20:37,463 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:37] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-10 23:20:38,091 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:38] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:41,084 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:41] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:41,400 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:41] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:20:41,845 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:41] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:42,088 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:42] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:43,082 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:43] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:46,089 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:46] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:46,418 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:46] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:20:46,426 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:46] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:20:46,844 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:46] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:47,100 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:47] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:48,090 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:48] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:51,084 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:51] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:51,400 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:51] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:20:51,843 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:51] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:52,083 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:52] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:53,086 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:53] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:56,092 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:56] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:56,400 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:56] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:20:56,410 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:56] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:20:56,826 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:56] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:57,098 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:57] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:58,097 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:58] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:20:58,658 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:20:58] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 23:21:00,405 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:00,662 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:00] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 23:21:01,083 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:01] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:01,393 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:01] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:21:01,848 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:01] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:02,087 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:02] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:02,113 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:02] "GET /api/workorders/import/template HTTP/1.1" 200 - -2025-09-10 23:21:02,439 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:02] "GET /uploads/workorder_template.xlsx HTTP/1.1" 404 - -2025-09-10 23:21:03,089 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:03] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:04,826 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:04] "GET /uploads/workorder_template.xlsx HTTP/1.1" 404 - -2025-09-10 23:21:06,406 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:06] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:06,426 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:06] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:06,426 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:06] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:21:06,658 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:06] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:07,098 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:07] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:08,084 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:08] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:11,076 - src.dialogue.realtime_chat - INFO - »Ự: session_user_001_1757517671 -2025-09-10 23:21:11,077 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:11] "POST /api/chat/session HTTP/1.1" 200 - -2025-09-10 23:21:11,406 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:11] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:21:11,406 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:11] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:11,828 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:11] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:12,083 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:12] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:12,791 - src.dialogue.realtime_chat - INFO - Ự: session_user_001_1757517671 -2025-09-10 23:21:12,792 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:12] "DELETE /api/chat/session/session_user_001_1757517671 HTTP/1.1" 200 - -2025-09-10 23:21:13,086 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:13] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:14,633 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:14] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 23:21:16,085 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:16] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:16,406 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:16] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:16,423 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:16] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:21:16,608 - src.analytics.monitor_service - INFO - ط -2025-09-10 23:21:16,614 - src.main - INFO - ط -2025-09-10 23:21:16,622 - src.agent.auto_monitor - INFO - Զѭ -2025-09-10 23:21:16,622 - src.agent.auto_monitor - INFO - Զط -2025-09-10 23:21:16,624 - src.agent.auto_monitor - INFO - ִе 1 Զؼ -2025-09-10 23:21:16,625 - src.agent_assistant - INFO - -2025-09-10 23:21:16,642 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:16] "POST /api/agent/monitoring/start HTTP/1.1" 200 - -2025-09-10 23:21:16,673 - src.agent.auto_monitor - INFO - ж: alert_overflow - ԾԤ: 42 -2025-09-10 23:21:16,674 - src.agent.auto_monitor - INFO - ж¼: {"timestamp": "2025-09-10T23:21:16.674688", "action_type": "alert_overflow", "priority": "high", "description": "ԾԤ: 42", "action": "Ԥ", "data": {"alert_count": 42}} -2025-09-10 23:21:16,674 - src.agent.auto_monitor - INFO - Ԥ -2025-09-10 23:21:16,675 - src.agent.auto_monitor - ERROR - 鹤ѹʧ: 'TSPAgentAssistant' object has no attribute 'get_workorders' -2025-09-10 23:21:16,711 - src.analytics.monitor_service - INFO - 4 Ԥ -2025-09-10 23:21:16,712 - src.analytics.monitor_service - WARNING - Ԥ: ûȽϵ: 0.00 (ֵ: 0.6) -2025-09-10 23:21:16,712 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': 'ûȽϵ: 0.00 (ֵ: 0.6)', 'timestamp': '2025-09-10T23:21:16.641218', 'rule_name': 'Ԥ'} -2025-09-10 23:21:16,712 - src.analytics.monitor_service - WARNING - Ԥ: ûȽϵ: 0.00 (ֵ: 0.6) -2025-09-10 23:21:16,712 - src.analytics.monitor_service - WARNING - Ԥ: ֪ʶʽϵ: 0.00 (ֵ: 0.5) -2025-09-10 23:21:16,713 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': '֪ʶʽϵ: 0.00 (ֵ: 0.5)', 'timestamp': '2025-09-10T23:21:16.676689', 'rule_name': '֪ʶԤ'} -2025-09-10 23:21:16,713 - src.analytics.monitor_service - WARNING - Ԥ: ֪ʶʽϵ: 0.00 (ֵ: 0.5) -2025-09-10 23:21:16,713 - src.analytics.monitor_service - WARNING - Ԥ: ϵͳڴʹʹ: 106.6% (ֵ: 80.0%) -2025-09-10 23:21:16,713 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': 'ϵͳڴʹʹ: 106.6% (ֵ: 80.0%)', 'timestamp': '2025-09-10T23:21:16.703711', 'rule_name': 'ڴʹԤ'} -2025-09-10 23:21:16,714 - src.analytics.monitor_service - WARNING - Ԥ: ϵͳڴʹʹ: 106.6% (ֵ: 80.0%) -2025-09-10 23:21:16,715 - src.analytics.monitor_service - WARNING - Ԥ: ûԻжʹ: 0.50 (ֵ: 0.3) -2025-09-10 23:21:16,716 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': 'ûԻжʹ: 0.50 (ֵ: 0.3)', 'timestamp': '2025-09-10T23:21:16.709685', 'rule_name': 'ԻжԤ'} -2025-09-10 23:21:16,716 - src.analytics.monitor_service - WARNING - Ԥ: ûԻжʹ: 0.50 (ֵ: 0.3) -2025-09-10 23:21:16,825 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:16] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 23:21:16,836 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:16] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:17,089 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:17] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:17,822 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:17] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:18,089 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:18] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:18,144 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:18] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-10 23:21:19,064 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:19] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:20,783 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:20] "POST /api/alerts/53/resolve HTTP/1.1" 200 - -2025-09-10 23:21:21,104 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:21] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:21,374 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:21] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:21,409 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:21] "POST /api/alerts/54/resolve HTTP/1.1" 200 - -2025-09-10 23:21:21,410 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:21] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:21:21,648 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:21] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:21,736 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:21] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:21,938 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:21] "POST /api/alerts/55/resolve HTTP/1.1" 200 - -2025-09-10 23:21:22,081 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:22] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:22,258 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:22] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:22,476 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:22] "POST /api/alerts/55/resolve HTTP/1.1" 200 - -2025-09-10 23:21:22,525 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:22] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:22,807 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:22] "POST /api/alerts/56/resolve HTTP/1.1" 200 - -2025-09-10 23:21:23,098 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:23] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:23,131 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:23] "POST /api/alerts/56/resolve HTTP/1.1" 200 - -2025-09-10 23:21:23,132 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:23] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:23,289 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:23] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:23,670 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:23] "POST /api/alerts/47/resolve HTTP/1.1" 200 - -2025-09-10 23:21:23,991 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:23] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:24,178 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:24] "POST /api/alerts/47/resolve HTTP/1.1" 200 - -2025-09-10 23:21:24,244 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:24] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:24,488 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:24] "POST /api/alerts/48/resolve HTTP/1.1" 200 - -2025-09-10 23:21:24,802 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:24] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:24,804 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:24] "POST /api/alerts/48/resolve HTTP/1.1" 200 - -2025-09-10 23:21:24,988 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:24] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:25,152 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:25] "POST /api/alerts/49/resolve HTTP/1.1" 200 - -2025-09-10 23:21:25,477 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:25] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:25,667 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:25] "POST /api/alerts/49/resolve HTTP/1.1" 200 - -2025-09-10 23:21:25,734 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:25] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:25,992 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:25] "POST /api/alerts/50/resolve HTTP/1.1" 200 - -2025-09-10 23:21:26,320 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:26] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:26,416 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:26] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:21:26,416 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:26] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:26,506 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:26] "POST /api/alerts/50/resolve HTTP/1.1" 200 - -2025-09-10 23:21:26,556 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:26] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:26,644 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:26] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:26,827 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:26] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:26,886 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:26] "POST /api/alerts/51/resolve HTTP/1.1" 200 - -2025-09-10 23:21:26,969 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:26] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:27,105 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:27] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:27,137 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:27] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:27,286 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:27] "POST /api/alerts/52/resolve HTTP/1.1" 200 - -2025-09-10 23:21:27,435 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:27] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:27,634 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:27] "POST /api/alerts/52/resolve HTTP/1.1" 200 - -2025-09-10 23:21:27,652 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:27] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:28,073 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:28] "POST /api/alerts/41/resolve HTTP/1.1" 200 - -2025-09-10 23:21:28,098 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:28] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:28,393 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:28] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:28,601 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:28] "POST /api/alerts/41/resolve HTTP/1.1" 200 - -2025-09-10 23:21:28,648 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:28] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:31,090 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:31] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:31,398 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:31] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:21:31,836 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:31] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:31,966 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:31] "POST /api/alerts/25/resolve HTTP/1.1" 200 - -2025-09-10 23:21:32,095 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:32] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:34,992 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:34] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-10 23:21:36,746 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:36] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:36,840 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:36] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:37,001 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:37] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:42,077 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:42] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:47,411 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:47] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:47,423 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:47] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:52,086 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:52] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:21:57,399 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:57] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:21:57,411 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:21:57] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:22:00,112 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:22:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:22:00,123 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:22:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:22:00,149 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:22:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:22:00,406 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:22:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:22:00,416 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:22:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:22:00,436 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:22:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:22:02,409 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:22:02] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:22:07,108 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:22:07] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:22:07,400 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:22:07] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:22:12,403 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:22:12] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:22:17,098 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:22:17] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:22:17,388 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:22:17] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:22:22,399 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:22:22] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:22:27,086 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:22:27] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:22:27,399 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:22:27] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:22:32,386 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:22:32] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:22:37,087 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:22:37] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:22:37,400 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:22:37] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:23:00,093 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:23:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:23:00,107 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:23:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:23:00,394 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:23:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:23:00,410 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:23:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:23:00,419 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:23:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:23:00,646 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:23:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:23:00,713 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:23:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:23:00,726 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:23:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:24:00,109 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:24:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:24:00,137 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:24:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:24:00,421 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:24:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:24:00,425 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:24:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:24:00,427 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:24:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:24:00,660 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:24:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:24:00,746 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:24:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:24:00,767 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:24:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:56:59,913 - __main__ - INFO - TSPۺϹƽ̨... -2025-09-10 23:57:01,660 - src.core.database - INFO - ݿʼɹ -2025-09-10 23:57:02,839 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 23:57:02,847 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 23:57:02,848 - src.main - INFO - TSPֳʼ -2025-09-10 23:57:02,857 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 23:57:02,866 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 23:57:02,868 - src.main - INFO - TSPֳʼ -2025-09-10 23:57:02,868 - src.agent.tool_manager - INFO - עṤ: search_knowledge -2025-09-10 23:57:02,868 - src.agent.tool_manager - INFO - עṤ: create_work_order -2025-09-10 23:57:02,868 - src.agent.tool_manager - INFO - עṤ: update_work_order -2025-09-10 23:57:02,869 - src.agent.tool_manager - INFO - עṤ: generate_response -2025-09-10 23:57:02,869 - src.agent.tool_manager - INFO - עṤ: analyze_data -2025-09-10 23:57:02,869 - src.agent.tool_manager - INFO - עṤ: send_notification -2025-09-10 23:57:02,869 - src.agent.tool_manager - INFO - עṤ: schedule_task -2025-09-10 23:57:02,869 - src.agent.tool_manager - INFO - עṤ: web_search -2025-09-10 23:57:02,870 - src.agent.tool_manager - INFO - עṤ: file_operation -2025-09-10 23:57:02,870 - src.agent.tool_manager - INFO - עṤ: database_query -2025-09-10 23:57:02,870 - src.agent.tool_manager - INFO - ע 10 ĬϹ -2025-09-10 23:57:02,870 - src.agent.agent_core - INFO - Agentijʼ -2025-09-10 23:57:03,803 - src.agent_assistant - INFO - TSP Agentֳʼ -2025-09-10 23:57:03,815 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 23:57:03,899 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.26.238:5000 -2025-09-10 23:57:03,902 - werkzeug - INFO - Press CTRL+C to quit -2025-09-10 23:57:03,941 - src.knowledge_base.knowledge_manager - INFO - سɹ 48 Ŀ -2025-09-10 23:57:03,944 - src.web.websocket_server - INFO - WebSocket: ws://localhost:8765 -2025-09-10 23:57:03,949 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-10 23:57:03,952 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-10 23:57:04,054 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:04] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:57:04,311 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:04] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:57:09,019 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:09] "GET / HTTP/1.1" 200 - -2025-09-10 23:57:09,316 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:09] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-10 23:57:10,100 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:10] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-10 23:57:10,111 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:10] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 23:57:10,122 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:10] "GET /api/system/info HTTP/1.1" 200 - -2025-09-10 23:57:10,161 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:10] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:57:10,167 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:10] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-10 23:57:10,179 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:10] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:57:10,525 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:10] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:57:11,894 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:11] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:57:11,912 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:11] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:57:12,148 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:12] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:57:12,348 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:12] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:57:12,358 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:12] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-10 23:57:12,890 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:12] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:57:14,605 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:14] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:57:15,098 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:15] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:57:17,178 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:17] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-10 23:57:17,296 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:17] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 23:57:17,311 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:17] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:57:17,321 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:17] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-10 23:57:17,984 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:17] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 23:57:19,622 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:19] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 23:57:19,887 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:19] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:57:20,098 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:20] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 23:57:24,800 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:24] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:57:26,267 - src.analytics.monitor_service - INFO - ط -2025-09-10 23:57:26,267 - src.main - INFO - ط -2025-09-10 23:57:26,272 - src.agent.auto_monitor - INFO - Զѭ -2025-09-10 23:57:26,273 - src.agent.auto_monitor - INFO - Զط -2025-09-10 23:57:26,273 - src.agent.auto_monitor - INFO - ִе 1 Զؼ -2025-09-10 23:57:26,273 - src.agent_assistant - INFO - -2025-09-10 23:57:26,282 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:26] "POST /api/agent/monitoring/start HTTP/1.1" 200 - -2025-09-10 23:57:26,349 - src.agent.auto_monitor - INFO - ж: alert_overflow - ԾԤ: 34 -2025-09-10 23:57:26,350 - src.agent.auto_monitor - INFO - ж¼: {"timestamp": "2025-09-10T23:57:26.350917", "action_type": "alert_overflow", "priority": "high", "description": "ԾԤ: 34", "action": "Ԥ", "data": {"alert_count": 34}} -2025-09-10 23:57:26,351 - src.agent.auto_monitor - INFO - Ԥ -2025-09-10 23:57:26,355 - src.agent.auto_monitor - ERROR - 鹤ѹʧ: 'TSPAgentAssistant' object has no attribute 'get_workorders' -2025-09-10 23:57:26,405 - src.analytics.monitor_service - INFO - 4 Ԥ -2025-09-10 23:57:26,406 - src.analytics.monitor_service - WARNING - Ԥ: ûȽϵ: 0.00 (ֵ: 0.6) -2025-09-10 23:57:26,407 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': 'ûȽϵ: 0.00 (ֵ: 0.6)', 'timestamp': '2025-09-10T23:57:26.283431', 'rule_name': 'Ԥ'} -2025-09-10 23:57:26,408 - src.analytics.monitor_service - WARNING - Ԥ: ûȽϵ: 0.00 (ֵ: 0.6) -2025-09-10 23:57:26,408 - src.analytics.monitor_service - WARNING - Ԥ: ֪ʶʽϵ: 0.00 (ֵ: 0.5) -2025-09-10 23:57:26,409 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': '֪ʶʽϵ: 0.00 (ֵ: 0.5)', 'timestamp': '2025-09-10T23:57:26.329923', 'rule_name': '֪ʶԤ'} -2025-09-10 23:57:26,410 - src.analytics.monitor_service - WARNING - Ԥ: ֪ʶʽϵ: 0.00 (ֵ: 0.5) -2025-09-10 23:57:26,410 - src.analytics.monitor_service - WARNING - Ԥ: ϵͳڴʹʹ: 117.4% (ֵ: 80.0%) -2025-09-10 23:57:26,411 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': 'ϵͳڴʹʹ: 117.4% (ֵ: 80.0%)', 'timestamp': '2025-09-10T23:57:26.388919', 'rule_name': 'ڴʹԤ'} -2025-09-10 23:57:26,411 - src.analytics.monitor_service - WARNING - Ԥ: ϵͳڴʹʹ: 117.4% (ֵ: 80.0%) -2025-09-10 23:57:26,411 - src.analytics.monitor_service - WARNING - Ԥ: ûԻжʹ: 0.50 (ֵ: 0.3) -2025-09-10 23:57:26,411 - src.analytics.monitor_service - INFO - ֪ͨ: {'level': '', 'message': 'ûԻжʹ: 0.50 (ֵ: 0.3)', 'timestamp': '2025-09-10T23:57:26.402919', 'rule_name': 'ԻжԤ'} -2025-09-10 23:57:26,412 - src.analytics.monitor_service - WARNING - Ԥ: ûԻжʹ: 0.50 (ֵ: 0.3) -2025-09-10 23:57:27,966 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:27] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:57:30,102 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:30] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:57:30,120 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:30] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:57:31,610 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:31] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-10 23:57:32,949 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:32] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 23:57:33,609 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:33] "GET /api/analytics HTTP/1.1" 200 - -2025-09-10 23:57:33,932 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:33] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-10 23:57:34,811 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:34] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:57:40,111 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:40] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:57:43,207 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:43] "GET /api/settings HTTP/1.1" 200 - -2025-09-10 23:57:45,104 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:45] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:57:49,794 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:49] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:57:51,290 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:51] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-10 23:57:51,293 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:51] "GET /api/workorders HTTP/1.1" 200 - -2025-09-10 23:57:51,302 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:51] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:57:51,309 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:51] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-10 23:57:53,387 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:53] "GET /api/alerts HTTP/1.1" 200 - -2025-09-10 23:57:54,653 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:54] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 23:57:54,931 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:57:54] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:58:00,088 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:58:00,383 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:00] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 23:58:00,412 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:58:05,394 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:05] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:58:10,093 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:10] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:58:10,395 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:10] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 23:58:15,410 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:15] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:58:20,083 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:20] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:58:20,388 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:20] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 23:58:25,387 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:25] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:58:30,087 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:30] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:58:30,388 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:30] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 23:58:35,407 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:35] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:58:40,090 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:40] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:58:40,391 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:40] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 23:58:45,402 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:45] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:58:49,799 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:49] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:58:50,097 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:50] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 23:58:50,332 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:50] "POST /api/agent/proactive-monitoring HTTP/1.1" 200 - -2025-09-10 23:58:55,106 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:58:55] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:59:00,118 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:59:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:59:00,394 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:59:00] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 23:59:00,435 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:59:00] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:59:05,396 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:59:05] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:59:10,098 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:59:10] "GET /api/health HTTP/1.1" 200 - -2025-09-10 23:59:10,392 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:59:10] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-10 23:59:15,406 - werkzeug - INFO - 127.0.0.1 - - [10/Sep/2025 23:59:15] "GET /api/health HTTP/1.1" 200 - diff --git a/logs/test.log b/logs/test.log deleted file mode 100644 index 874b49b..0000000 --- a/logs/test.log +++ /dev/null @@ -1,13 +0,0 @@ -2025-09-04 23:30:32,317 - src.main - INFO - TSP助手初始化完成 -2025-09-04 23:30:32,323 - src.main - INFO - 数据库连接测试成功 -2025-09-04 23:30:33,215 - src.core.llm_client - INFO - API请求成功 -2025-09-04 23:30:33,218 - src.main - INFO - LLM API连接测试成功 -2025-09-04 23:30:33,251 - src.main - INFO - 知识库测试成功 -2025-09-04 23:30:33,285 - src.dialogue.dialogue_manager - INFO - 创建工单成功: WO20250904233033 -2025-09-04 23:30:41,419 - src.core.llm_client - INFO - API请求成功 -2025-09-04 23:30:41,447 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 1 个条目 -2025-09-04 23:30:41,449 - src.knowledge_base.knowledge_manager - INFO - 添加知识库条目成功: 账户无法登录怎么办?... -2025-09-04 23:30:41,475 - src.main - INFO - 数据库连接测试成功 -2025-09-04 23:30:42,742 - src.core.llm_client - INFO - API请求成功 -2025-09-04 23:30:42,742 - src.main - INFO - LLM API连接测试成功 -2025-09-04 23:30:42,751 - src.main - INFO - 知识库测试成功 diff --git a/logs/tsp_assistant.log b/logs/tsp_assistant.log deleted file mode 100644 index 0f0a362..0000000 --- a/logs/tsp_assistant.log +++ /dev/null @@ -1,949 +0,0 @@ -2025-09-04 23:19:51,974 - __main__ - INFO - TSP助手初始化完成 -2025-09-04 23:19:51,976 - src.core.database - ERROR - 数据库操作失败: Textual SQL expression 'SELECT 1' should be explicitly declared as text('SELECT 1') -2025-09-04 23:19:51,977 - src.core.database - ERROR - 数据库连接测试失败: Textual SQL expression 'SELECT 1' should be explicitly declared as text('SELECT 1') -2025-09-04 23:19:51,978 - __main__ - ERROR - 数据库连接测试失败 -2025-09-04 23:19:52,949 - src.core.llm_client - INFO - API请求成功 -2025-09-04 23:19:52,965 - __main__ - INFO - LLM API连接测试成功 -2025-09-04 23:19:53,003 - src.core.database - ERROR - 数据库操作失败: 'Session' object has no attribute 'func' -2025-09-04 23:19:53,004 - src.knowledge_base.knowledge_manager - ERROR - 获取知识库统计失败: 'Session' object has no attribute 'func' -2025-09-04 23:19:53,005 - __main__ - WARNING - 知识库为空或测试失败 -2025-09-04 23:22:37,727 - __main__ - INFO - TSP助手初始化完成 -2025-09-04 23:22:37,727 - src.core.database - ERROR - 数据库操作失败: Textual SQL expression 'SELECT 1' should be explicitly declared as text('SELECT 1') -2025-09-04 23:22:37,727 - src.core.database - ERROR - 数据库连接测试失败: Textual SQL expression 'SELECT 1' should be explicitly declared as text('SELECT 1') -2025-09-04 23:22:37,727 - __main__ - ERROR - 数据库连接测试失败 -2025-09-04 23:22:38,398 - src.core.llm_client - INFO - API请求成功 -2025-09-04 23:22:38,399 - __main__ - INFO - LLM API连接测试成功 -2025-09-04 23:22:38,427 - src.core.database - ERROR - 数据库操作失败: 'Session' object has no attribute 'func' -2025-09-04 23:22:38,427 - src.knowledge_base.knowledge_manager - ERROR - 获取知识库统计失败: 'Session' object has no attribute 'func' -2025-09-04 23:22:38,427 - __main__ - WARNING - 知识库为空或测试失败 -2025-09-04 23:23:37,699 - src.main - INFO - TSP助手初始化完成 -2025-09-04 23:23:37,701 - src.core.database - ERROR - 数据库操作失败: Textual SQL expression 'SELECT 1' should be explicitly declared as text('SELECT 1') -2025-09-04 23:23:37,701 - src.core.database - ERROR - 数据库连接测试失败: Textual SQL expression 'SELECT 1' should be explicitly declared as text('SELECT 1') -2025-09-04 23:23:37,701 - src.main - ERROR - 数据库连接测试失败 -2025-09-04 23:23:38,377 - src.core.llm_client - INFO - API请求成功 -2025-09-04 23:23:38,379 - src.main - INFO - LLM API连接测试成功 -2025-09-04 23:23:38,393 - src.core.database - ERROR - 数据库操作失败: 'Session' object has no attribute 'func' -2025-09-04 23:23:38,393 - src.knowledge_base.knowledge_manager - ERROR - 获取知识库统计失败: 'Session' object has no attribute 'func' -2025-09-04 23:23:38,394 - src.main - WARNING - 知识库为空或测试失败 -2025-09-04 23:24:28,378 - src.core.database - ERROR - 数据库操作失败: Textual SQL expression 'SELECT 1' should be explicitly declared as text('SELECT 1') -2025-09-04 23:24:28,383 - src.core.database - ERROR - 数据库连接测试失败: Textual SQL expression 'SELECT 1' should be explicitly declared as text('SELECT 1') -2025-09-04 23:26:11,404 - src.core.database - ERROR - 数据库操作失败: Textual SQL expression 'SELECT 1' should be explicitly declared as text('SELECT 1') -2025-09-04 23:26:11,407 - src.core.database - ERROR - 数据库连接测试失败: Textual SQL expression 'SELECT 1' should be explicitly declared as text('SELECT 1') -2025-09-04 23:26:57,570 - src.main - INFO - TSP助手初始化完成 -2025-09-04 23:26:57,573 - src.core.database - ERROR - 数据库操作失败: Textual SQL expression 'SELECT 1' should be explicitly declared as text('SELECT 1') -2025-09-04 23:26:57,576 - src.core.database - ERROR - 数据库连接测试失败: Textual SQL expression 'SELECT 1' should be explicitly declared as text('SELECT 1') -2025-09-04 23:26:57,576 - src.main - ERROR - 数据库连接测试失败 -2025-09-04 23:26:58,451 - src.core.llm_client - INFO - API请求成功 -2025-09-04 23:26:58,453 - src.main - INFO - LLM API连接测试成功 -2025-09-04 23:26:58,508 - src.core.database - ERROR - 数据库操作失败: 'Session' object has no attribute 'func' -2025-09-04 23:26:58,509 - src.knowledge_base.knowledge_manager - ERROR - 获取知识库统计失败: 'Session' object has no attribute 'func' -2025-09-04 23:26:58,510 - src.main - WARNING - 知识库为空或测试失败 -2025-09-04 23:29:12,335 - src.main - INFO - TSP助手初始化完成 -2025-09-04 23:29:12,349 - src.core.database - ERROR - 数据库操作失败: Textual SQL expression 'SELECT 1' should be explicitly declared as text('SELECT 1') -2025-09-04 23:29:12,350 - src.core.database - ERROR - 数据库连接测试失败: Textual SQL expression 'SELECT 1' should be explicitly declared as text('SELECT 1') -2025-09-04 23:29:12,354 - src.main - ERROR - 数据库连接测试失败 -2025-09-04 23:29:13,297 - src.core.llm_client - INFO - API请求成功 -2025-09-04 23:29:13,307 - src.main - INFO - LLM API连接测试成功 -2025-09-04 23:29:13,394 - src.main - INFO - 知识库测试成功 -2025-09-04 23:29:30,830 - src.main - INFO - TSP助手初始化完成 -2025-09-04 23:29:30,831 - src.core.database - ERROR - 数据库操作失败: Textual SQL expression 'SELECT 1' should be explicitly declared as text('SELECT 1') -2025-09-04 23:29:30,831 - src.core.database - ERROR - 数据库连接测试失败: Textual SQL expression 'SELECT 1' should be explicitly declared as text('SELECT 1') -2025-09-04 23:29:30,831 - src.main - ERROR - 数据库连接测试失败 -2025-09-04 23:29:31,501 - src.core.llm_client - INFO - API请求成功 -2025-09-04 23:29:31,503 - src.main - INFO - LLM API连接测试成功 -2025-09-04 23:29:31,538 - src.main - INFO - 知识库测试成功 -2025-09-04 23:30:11,867 - src.main - INFO - TSP助手初始化完成 -2025-09-04 23:30:11,872 - src.main - INFO - 数据库连接测试成功 -2025-09-04 23:30:13,464 - src.core.llm_client - INFO - API请求成功 -2025-09-04 23:30:13,466 - src.main - INFO - LLM API连接测试成功 -2025-09-04 23:30:13,491 - src.main - INFO - 知识库测试成功 -2025-09-05 07:26:52,212 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 1 个条目 -2025-09-05 07:26:52,218 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 1 个条目 -2025-09-05 07:26:52,219 - src.main - INFO - TSP助手初始化完成 -2025-09-05 07:26:52,221 - src.main - INFO - 数据库连接测试成功 -2025-09-05 07:26:53,507 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:26:53,508 - src.main - INFO - LLM API连接测试成功 -2025-09-05 07:26:53,523 - src.main - INFO - 知识库测试成功 -2025-09-05 07:27:11,620 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 1 个条目 -2025-09-05 07:27:11,625 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 1 个条目 -2025-09-05 07:27:11,626 - src.main - INFO - TSP助手初始化完成 -2025-09-05 07:27:11,627 - src.main - INFO - 数据库连接测试成功 -2025-09-05 07:27:13,099 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:27:13,100 - src.main - INFO - LLM API连接测试成功 -2025-09-05 07:27:13,116 - src.main - INFO - 知识库测试成功 -2025-09-05 07:29:07,312 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 1 个条目 -2025-09-05 07:29:07,323 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 1 个条目 -2025-09-05 07:29:07,323 - src.main - INFO - TSP助手初始化完成 -2025-09-05 07:29:07,331 - src.main - INFO - 数据库连接测试成功 -2025-09-05 07:29:08,461 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:29:08,463 - src.main - INFO - LLM API连接测试成功 -2025-09-05 07:29:08,497 - src.main - INFO - 知识库测试成功 -2025-09-05 07:29:11,734 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:29:43,485 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 1 个条目 -2025-09-05 07:29:43,492 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 1 个条目 -2025-09-05 07:29:43,493 - src.main - INFO - TSP助手初始化完成 -2025-09-05 07:29:43,493 - src.main - INFO - 数据库连接测试成功 -2025-09-05 07:29:44,322 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:29:44,324 - src.main - INFO - LLM API连接测试成功 -2025-09-05 07:29:44,340 - src.main - INFO - 知识库测试成功 -2025-09-05 07:29:48,253 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:29:48,281 - src.dialogue.dialogue_manager - INFO - 创建工单成功: WO20250905072948 -2025-09-05 07:29:48,286 - src.main - INFO - 数据库连接测试成功 -2025-09-05 07:29:49,134 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:29:49,135 - src.main - INFO - LLM API连接测试成功 -2025-09-05 07:29:49,143 - src.main - INFO - 知识库测试成功 -2025-09-05 07:30:42,213 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 1 个条目 -2025-09-05 07:30:42,221 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 1 个条目 -2025-09-05 07:30:42,227 - src.main - INFO - TSP助手初始化完成 -2025-09-05 07:30:42,229 - src.main - INFO - 数据库连接测试成功 -2025-09-05 07:30:43,118 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:30:43,121 - src.main - INFO - LLM API连接测试成功 -2025-09-05 07:30:43,146 - src.main - INFO - 知识库测试成功 -2025-09-05 07:30:45,435 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:30:56,747 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:31:02,248 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:31:02,281 - src.dialogue.dialogue_manager - INFO - 创建工单成功: WO20250905073102 -2025-09-05 07:31:07,982 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:31:08,024 - src.main - INFO - 数据库连接测试成功 -2025-09-05 07:31:09,097 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:31:09,097 - src.main - INFO - LLM API连接测试成功 -2025-09-05 07:31:09,107 - src.main - INFO - 知识库测试成功 -2025-09-05 07:31:35,450 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 1 个条目 -2025-09-05 07:31:35,455 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 1 个条目 -2025-09-05 07:31:35,460 - src.main - INFO - TSP助手初始化完成 -2025-09-05 07:31:35,463 - src.main - INFO - 数据库连接测试成功 -2025-09-05 07:31:41,075 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 1 个条目 -2025-09-05 07:31:41,088 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 1 个条目 -2025-09-05 07:31:41,091 - src.main - INFO - TSP助手初始化完成 -2025-09-05 07:31:41,094 - src.main - INFO - 数据库连接测试成功 -2025-09-05 07:31:41,897 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:31:41,899 - src.main - INFO - LLM API连接测试成功 -2025-09-05 07:31:41,927 - src.main - INFO - 知识库测试成功 -2025-09-05 07:31:47,342 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:31:56,940 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:32:09,260 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:32:09,292 - src.dialogue.dialogue_manager - INFO - 创建工单成功: WO20250905073209 -2025-09-05 07:32:14,540 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:32:14,581 - src.main - INFO - 数据库连接测试成功 -2025-09-05 07:32:15,335 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:32:15,337 - src.main - INFO - LLM API连接测试成功 -2025-09-05 07:32:15,345 - src.main - INFO - 知识库测试成功 -2025-09-05 07:35:12,826 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 1 个条目 -2025-09-05 07:35:12,838 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 1 个条目 -2025-09-05 07:35:12,841 - src.main - INFO - TSP助手初始化完成 -2025-09-05 07:35:23,168 - src.core.llm_client - INFO - API请求成功 -2025-09-05 07:35:23,181 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 2 个条目 -2025-09-05 07:35:23,182 - src.knowledge_base.knowledge_manager - INFO - 添加知识库条目成功: 为什么我无法登录账户?... -2025-09-05 07:35:23,189 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 3 个条目 -2025-09-05 07:35:23,192 - src.knowledge_base.knowledge_manager - INFO - 添加知识库条目成功: 登录时密码错误怎么办?... -2025-09-05 07:35:23,202 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 4 个条目 -2025-09-05 07:35:23,203 - src.knowledge_base.knowledge_manager - INFO - 添加知识库条目成功: 账户被锁定如何解锁?... -2025-09-05 07:35:23,210 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 5 个条目 -2025-09-05 07:35:23,210 - src.knowledge_base.knowledge_manager - INFO - 添加知识库条目成功: 网络问题会影响登录吗?... -2025-09-05 07:35:23,889 - jieba - DEBUG - Building prefix dict from the default dictionary ... -2025-09-05 07:35:23,896 - jieba - DEBUG - Loading model from cache C:\Users\jiezhao\AppData\Local\Temp\jieba.cache -2025-09-05 07:35:25,604 - jieba - DEBUG - Loading model cost 1.715 seconds. -2025-09-05 07:35:25,605 - jieba - DEBUG - Prefix dict has been built successfully. -2025-09-05 07:35:25,619 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 6 个条目 -2025-09-05 07:35:25,622 - src.knowledge_base.knowledge_manager - INFO - 添加知识库条目成功: 如何重置密码? (如何, 重置, 密码)... -2025-09-05 07:35:25,636 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 7 个条目 -2025-09-05 07:35:25,638 - src.knowledge_base.knowledge_manager - INFO - 添加知识库条目成功: 账户被锁定了怎么办? (账户, 锁定, 怎么办)... -2025-09-05 07:35:56,581 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 7 个条目 -2025-09-05 07:35:56,591 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 7 个条目 -2025-09-05 07:35:56,594 - src.main - INFO - TSP助手初始化完成 -2025-09-05 07:36:46,317 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 7 个条目 -2025-09-05 07:36:46,324 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 7 个条目 -2025-09-05 07:36:46,325 - src.main - INFO - TSP助手初始化完成 -2025-09-05 09:01:37,144 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 7 个条目 -2025-09-05 09:01:37,149 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 7 个条目 -2025-09-05 09:01:37,150 - src.main - INFO - TSP助手初始化完成 -2025-09-05 09:03:33,805 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 7 个条目 -2025-09-05 09:03:33,812 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 7 个条目 -2025-09-05 09:03:33,813 - src.main - INFO - TSP助手初始化完成 -2025-09-05 09:03:33,928 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.165.238:5000 -2025-09-05 09:03:33,928 - werkzeug - INFO - Press CTRL+C to quit -2025-09-05 09:03:33,934 - werkzeug - INFO - * Restarting with stat -2025-09-05 09:03:36,083 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 7 个条目 -2025-09-05 09:03:36,086 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 7 个条目 -2025-09-05 09:03:36,087 - src.main - INFO - TSP助手初始化完成 -2025-09-05 09:03:36,115 - werkzeug - WARNING - * Debugger is active! -2025-09-05 09:03:36,129 - werkzeug - INFO - * Debugger PIN: 651-387-696 -2025-09-05 09:03:39,851 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:03:39] "GET / HTTP/1.1" 200 - -2025-09-05 09:03:40,036 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:03:40] "GET /static/css/style.css HTTP/1.1" 200 - -2025-09-05 09:03:40,099 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:03:40] "GET /static/js/app.js HTTP/1.1" 200 - -2025-09-05 09:03:40,733 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:03:40] "GET /api/rules HTTP/1.1" 200 - -2025-09-05 09:03:40,750 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:03:40] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:03:40,788 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:03:40] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:03:40,793 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:03:40] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:03:41,026 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:03:41] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-05 09:03:45,743 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:03:45] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:03:45,747 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:03:45] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:03:49,068 - src.analytics.monitor_service - INFO - 监控服务已启动 -2025-09-05 09:03:49,069 - src.main - INFO - 监控服务已启动 -2025-09-05 09:03:49,069 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:03:49] "POST /api/monitor/start HTTP/1.1" 200 - -2025-09-05 09:03:49,133 - src.analytics.monitor_service - INFO - 触发 3 个预警 -2025-09-05 09:03:49,133 - src.analytics.monitor_service - WARNING - 预警触发: 用户满意度较低: 0.00 (阈值: 0.6) -2025-09-05 09:03:49,134 - src.analytics.monitor_service - INFO - 发送通知: {'level': '警告', 'message': '用户满意度较低: 0.00 (阈值: 0.6)', 'timestamp': '2025-09-05T09:03:49.080745', 'rule_name': '满意度预警'} -2025-09-05 09:03:49,134 - src.analytics.monitor_service - WARNING - 警告预警: 用户满意度较低: 0.00 (阈值: 0.6) -2025-09-05 09:03:49,134 - src.analytics.monitor_service - WARNING - 预警触发: 知识库命中率较低: 0.00 (阈值: 0.5) -2025-09-05 09:03:49,135 - src.analytics.monitor_service - INFO - 发送通知: {'level': '警告', 'message': '知识库命中率较低: 0.00 (阈值: 0.5)', 'timestamp': '2025-09-05T09:03:49.100590', 'rule_name': '知识库命中率预警'} -2025-09-05 09:03:49,135 - src.analytics.monitor_service - WARNING - 警告预警: 知识库命中率较低: 0.00 (阈值: 0.5) -2025-09-05 09:03:49,135 - src.analytics.monitor_service - WARNING - 预警触发: 系统内存使用率过高: 80.8% (阈值: 80.0%) -2025-09-05 09:03:49,136 - src.analytics.monitor_service - INFO - 发送通知: {'level': '警告', 'message': '系统内存使用率过高: 80.8% (阈值: 80.0%)', 'timestamp': '2025-09-05T09:03:49.125354', 'rule_name': '内存使用预警'} -2025-09-05 09:03:49,136 - src.analytics.monitor_service - WARNING - 警告预警: 系统内存使用率过高: 80.8% (阈值: 80.0%) -2025-09-05 09:03:49,400 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:03:49] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:03:50,444 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:03:50] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:03:50,745 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:03:50] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:03:50,761 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:03:50] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:03:55,752 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:03:55] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:03:55,752 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:03:55] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:04:00,438 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:04:00] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:04:00,731 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:04:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:04:00,745 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:04:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:04:01,926 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:04:01] "POST /api/check-alerts HTTP/1.1" 200 - -2025-09-05 09:04:02,236 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:04:02] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:04:05,743 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:04:05] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:04:05,744 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:04:05] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:04:06,158 - src.analytics.monitor_service - INFO - 监控服务已停止 -2025-09-05 09:04:06,160 - src.main - INFO - 监控服务已停止 -2025-09-05 09:04:06,161 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:04:06] "POST /api/monitor/stop HTTP/1.1" 200 - -2025-09-05 09:04:06,482 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:04:06] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:15:19,406 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:15:19,419 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:15:19,421 - src.main - INFO - TSP助手初始化完成 -2025-09-05 09:15:50,606 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:15:50,618 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:15:50,620 - src.main - INFO - TSP助手初始化完成 -2025-09-05 09:16:20,754 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:16:20,767 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:16:20,768 - src.main - INFO - TSP助手初始化完成 -2025-09-05 09:19:45,806 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:19:45,814 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:19:45,815 - src.main - INFO - TSP助手初始化完成 -2025-09-05 09:19:45,863 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.165.238:5000 -2025-09-05 09:19:45,863 - werkzeug - INFO - Press CTRL+C to quit -2025-09-05 09:19:45,867 - werkzeug - INFO - * Restarting with stat -2025-09-05 09:19:48,167 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:19:48,176 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:19:48,178 - src.main - INFO - TSP助手初始化完成 -2025-09-05 09:19:48,206 - werkzeug - WARNING - * Debugger is active! -2025-09-05 09:19:48,224 - werkzeug - INFO - * Debugger PIN: 651-387-696 -2025-09-05 09:19:50,948 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:19:50] "GET / HTTP/1.1" 200 - -2025-09-05 09:19:51,124 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:19:51] "GET /static/css/style.css HTTP/1.1" 304 - -2025-09-05 09:19:51,192 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:19:51] "GET /static/js/app.js HTTP/1.1" 304 - -2025-09-05 09:19:51,519 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:19:51] "GET /api/rules HTTP/1.1" 200 - -2025-09-05 09:19:51,540 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:19:51] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:19:51,563 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:19:51] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:19:51,577 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:19:51] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:19:56,217 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:19:56] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:19:56,524 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:19:56] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:20:01,529 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:01] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:20:01,559 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:01] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:20:01,562 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:01] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:20:04,007 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:04] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:20:04,314 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:04] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:20:04,334 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:04] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:20:05,752 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:05] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:20:05,753 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:05] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:20:10,437 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:10] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:20:10,737 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:10] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:20:10,751 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:10] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:20:15,749 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:15] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:20:15,750 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:15] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:20:20,435 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:20] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:20:20,732 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:20] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:20:20,746 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:20] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:20:25,752 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:25] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:20:25,752 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:25] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:20:30,437 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:30] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:20:30,734 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:30] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:20:30,749 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:30] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:20:35,743 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:35] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:20:35,745 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:35] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:20:40,441 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:40] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:20:40,735 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:40] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:20:40,748 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:40] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:20:45,749 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:45] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:20:45,749 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:45] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:20:50,444 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:50] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:20:50,746 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:50] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:20:50,758 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:50] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:20:55,747 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:55] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:20:55,748 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:20:55] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:21:00,435 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:00] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:21:00,731 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:21:00,745 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:00] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:21:05,750 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:05] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:21:05,751 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:05] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:21:10,440 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:10] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:21:10,742 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:10] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:21:10,755 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:10] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:21:15,745 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:15] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:21:15,745 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:15] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:21:20,445 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:20] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:21:20,742 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:20] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:21:20,766 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:20] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:21:25,753 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:25] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:21:25,756 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:25] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:21:31,079 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:31] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:21:31,377 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:31] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:21:31,388 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:31] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:21:36,393 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:36] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:21:36,395 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:36] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:21:41,082 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:41] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:21:41,380 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:41] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:21:41,390 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:41] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:21:46,394 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:46] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:21:46,394 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:46] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:21:51,087 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:51] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:21:51,379 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:51] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:21:51,390 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:21:51] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:22:33,053 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:22:33,058 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:22:33,064 - src.main - INFO - TSP助手初始化完成 -2025-09-05 09:40:46,233 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:40:46,242 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:40:46,243 - src.main - INFO - TSP助手初始化完成 -2025-09-05 09:40:46,249 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:40:46,303 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.165.238:5000 -2025-09-05 09:40:46,304 - werkzeug - INFO - Press CTRL+C to quit -2025-09-05 09:40:46,307 - werkzeug - INFO - * Restarting with stat -2025-09-05 09:40:48,603 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:40:48,612 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:40:48,613 - src.main - INFO - TSP助手初始化完成 -2025-09-05 09:40:48,620 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:40:48,654 - werkzeug - WARNING - * Debugger is active! -2025-09-05 09:40:48,669 - werkzeug - INFO - * Debugger PIN: 651-387-696 -2025-09-05 09:40:55,808 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:40:55] "GET / HTTP/1.1" 200 - -2025-09-05 09:40:56,113 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:40:56] "GET /static/css/style.css HTTP/1.1" 200 - -2025-09-05 09:40:56,152 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:40:56] "GET /static/js/app.js HTTP/1.1" 200 - -2025-09-05 09:40:56,390 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:40:56] "GET /api/rules HTTP/1.1" 200 - -2025-09-05 09:40:56,418 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:40:56] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:40:56,450 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:40:56] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:40:56,461 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:40:56] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:40:56,902 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:40:56] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-05 09:41:00,675 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:41:00] "GET /chat HTTP/1.1" 200 - -2025-09-05 09:41:00,713 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:41:00] "GET /static/js/chat.js HTTP/1.1" 304 - -2025-09-05 09:41:02,122 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:02] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:41:02,123 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:02] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:41:07,093 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:07] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:41:07,114 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:07] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:41:07,115 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:07] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:41:08,955 - src.dialogue.realtime_chat - INFO - 创建新会话: session_test_user_http_1757036468 -2025-09-05 09:41:08,956 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:41:08] "POST /api/chat/session HTTP/1.1" 200 - -2025-09-05 09:41:10,695 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:41:10] "GET /chat-http HTTP/1.1" 200 - -2025-09-05 09:41:11,003 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:41:11] "GET /static/js/chat_http.js HTTP/1.1" 200 - -2025-09-05 09:41:12,103 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:12] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:41:12,107 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:12] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:41:16,593 - src.dialogue.realtime_chat - INFO - 创建新会话: session_user_001_1757036476 -2025-09-05 09:41:16,594 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:41:16] "POST /api/chat/session HTTP/1.1" 200 - -2025-09-05 09:41:17,090 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:17] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:41:17,119 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:17] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:41:17,124 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:17] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:41:22,100 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:22] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:41:22,104 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:22] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:41:22,776 - werkzeug - INFO - * Detected change in 'c:\\Users\\jiezhao\\Desktop\\TSP_assistant\\start_flask_only.py', reloading -2025-09-05 09:41:23,124 - werkzeug - INFO - * Restarting with stat -2025-09-05 09:41:26,089 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:41:26,089 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:41:26,089 - src.main - INFO - TSP助手初始化完成 -2025-09-05 09:41:26,108 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:41:26,176 - werkzeug - WARNING - * Debugger is active! -2025-09-05 09:41:26,203 - werkzeug - INFO - * Debugger PIN: 651-387-696 -2025-09-05 09:41:26,302 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:41:26] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-05 09:41:27,089 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:27] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:41:27,104 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:27] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:41:27,116 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:27] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:41:32,102 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:32] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:41:32,104 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:32] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:41:35,164 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:41:35] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-05 09:41:37,086 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:37] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:41:37,088 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:37] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:41:37,088 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:37] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:41:41,448 - src.dialogue.realtime_chat - INFO - 结束会话: session_user_001_1757036476 -2025-09-05 09:41:41,449 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:41:41] "DELETE /api/chat/session/session_user_001_1757036476 HTTP/1.1" 200 - -2025-09-05 09:41:42,080 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:42] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:41:42,080 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:42] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:41:43,072 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:41:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:41:43,379 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:41:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:41:43,390 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:41:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:41:44,169 - src.dialogue.realtime_chat - INFO - 创建新会话: session_user_001_1757036504 -2025-09-05 09:41:44,169 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:41:44] "POST /api/chat/session HTTP/1.1" 200 - -2025-09-05 09:41:47,086 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:47] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:41:47,086 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:47] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:41:47,086 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:47] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:41:52,095 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:52] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:41:52,095 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:52] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:41:57,071 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:57] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:41:57,092 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:57] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:41:57,092 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:41:57] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:42:01,946 - src.core.llm_client - INFO - API请求成功 -2025-09-05 09:42:01,950 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:42:01] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-05 09:42:24,176 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:24] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:42:24,203 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:24] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:42:24,204 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:24] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:42:26,396 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:26] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:42:26,412 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:26] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:42:26,413 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:26] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:42:26,640 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:26] "GET / HTTP/1.1" 200 - -2025-09-05 09:42:26,848 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:26] "GET /static/js/app.js HTTP/1.1" 304 - -2025-09-05 09:42:26,848 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:26] "GET /static/css/style.css HTTP/1.1" 304 - -2025-09-05 09:42:26,900 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:26] "GET /api/rules HTTP/1.1" 200 - -2025-09-05 09:42:26,908 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:26] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:42:26,934 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:26] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:42:26,945 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:26] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:42:31,906 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:31] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:42:31,908 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:31] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:42:32,708 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:32] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:42:33,677 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:33] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:42:36,891 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:36] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:42:36,910 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:36] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:42:36,911 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:36] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:42:42,087 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:42] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:42:42,087 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:42] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:42:43,393 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:42:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:42:43,408 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:42:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:42:43,408 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:42:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:42:47,081 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:47] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:42:47,081 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:47] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:42:47,081 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:47] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:42:52,089 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:52] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:42:52,091 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:52] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:42:57,084 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:57] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:42:57,096 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:57] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:42:57,103 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:42:57] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:43:02,086 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:02] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:43:02,089 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:02] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:43:04,410 - src.core.llm_client - INFO - API请求成功 -2025-09-05 09:43:04,426 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:43:04] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-05 09:43:07,079 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:07] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:43:07,081 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:07] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:43:07,081 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:07] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:43:12,094 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:12] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:43:12,094 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:12] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:43:17,081 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:17] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:43:17,081 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:17] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:43:17,081 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:17] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:43:22,094 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:22] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:43:22,094 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:22] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:43:23,629 - werkzeug - INFO - * Detected change in 'c:\\Users\\jiezhao\\Desktop\\TSP_assistant\\start_flask_only.py', reloading -2025-09-05 09:43:23,947 - werkzeug - INFO - * Restarting with stat -2025-09-05 09:43:26,456 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:43:26,471 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:43:26,477 - src.main - INFO - TSP助手初始化完成 -2025-09-05 09:43:26,486 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:43:26,521 - werkzeug - WARNING - * Debugger is active! -2025-09-05 09:43:26,545 - werkzeug - INFO - * Debugger PIN: 651-387-696 -2025-09-05 09:43:27,116 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:27] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:43:27,124 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:27] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:43:27,130 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:27] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:43:32,089 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:32] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:43:32,090 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:32] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:43:37,083 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:37] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:43:37,090 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:37] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:43:37,091 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:37] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:43:43,093 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:43:43,096 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:43:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:43:43,394 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:43:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:43:43,418 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:43:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:43:43,419 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:43:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:44:43,121 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:44:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:44:43,145 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:44:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:44:43,150 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:44:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:44:43,151 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:44:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:44:43,391 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:44:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:44:43,415 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:44:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:45:27,118 - werkzeug - INFO - * Detected change in 'c:\\Users\\jiezhao\\Desktop\\TSP_assistant\\confidence_demo.py', reloading -2025-09-05 09:45:27,385 - werkzeug - INFO - * Restarting with stat -2025-09-05 09:45:29,680 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:45:29,689 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:45:29,690 - src.main - INFO - TSP助手初始化完成 -2025-09-05 09:45:29,697 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:45:29,725 - werkzeug - WARNING - * Debugger is active! -2025-09-05 09:45:29,741 - werkzeug - INFO - * Debugger PIN: 651-387-696 -2025-09-05 09:45:43,117 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:45:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:45:43,132 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:45:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:45:43,135 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:45:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:45:43,405 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:45:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:45:43,419 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:45:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:45:43,419 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:45:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:46:08,267 - werkzeug - INFO - * Detected change in 'c:\\Users\\jiezhao\\Desktop\\TSP_assistant\\confidence_demo.py', reloading -2025-09-05 09:46:08,496 - werkzeug - INFO - * Restarting with stat -2025-09-05 09:46:11,194 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:46:11,205 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:46:11,206 - src.main - INFO - TSP助手初始化完成 -2025-09-05 09:46:11,213 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 09:46:11,246 - werkzeug - WARNING - * Debugger is active! -2025-09-05 09:46:11,265 - werkzeug - INFO - * Debugger PIN: 651-387-696 -2025-09-05 09:46:43,126 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:46:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:46:43,135 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:46:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:46:43,140 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:46:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:46:43,416 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:46:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:46:43,428 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:46:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:46:43,428 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:46:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:47:43,116 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:47:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:47:43,128 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:47:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:47:43,130 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:47:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:47:43,131 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:47:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:47:43,422 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:47:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:47:43,439 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:47:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:48:43,095 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:48:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:48:43,112 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:48:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:48:43,119 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:48:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:48:43,395 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:48:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:48:43,406 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:48:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:48:43,407 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:48:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:49:43,104 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:49:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:49:43,131 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:49:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:49:43,132 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:49:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:49:43,133 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:49:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:49:43,420 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:49:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:49:43,441 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:49:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:50:43,100 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:50:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:50:43,123 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:50:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:50:43,124 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:50:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:50:43,401 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:50:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:50:43,414 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:50:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:50:43,414 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:50:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:51:43,096 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:51:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:51:43,121 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:51:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:51:43,123 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:51:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:51:43,123 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:51:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:51:43,405 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:51:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:51:43,413 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:51:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:52:43,081 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:52:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:52:43,097 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:52:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:52:43,098 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:52:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:52:43,423 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:52:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:52:43,441 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:52:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:52:43,441 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:52:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:53:43,096 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:53:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:53:43,118 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:53:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:53:43,119 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:53:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:53:43,120 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:53:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:53:43,403 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:53:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:53:43,421 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:53:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:54:43,094 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:54:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:54:43,094 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:54:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:54:43,094 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:54:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:54:43,404 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:54:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:54:43,409 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:54:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:54:43,409 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:54:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:55:24,362 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:24] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:55:24,394 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:24] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:55:24,396 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:24] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:55:26,894 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:26] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:55:26,913 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:26] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:55:26,915 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:26] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:55:31,898 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:31] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:55:31,898 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:31] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:55:37,076 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:37] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:55:37,090 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:37] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:55:37,090 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:37] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:55:42,089 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:42] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:55:42,089 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:42] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:55:43,082 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:55:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:55:43,388 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:55:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:55:43,395 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:55:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:55:47,079 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:47] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:55:47,095 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:47] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:55:47,097 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:47] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:55:52,091 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:52] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:55:52,091 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:52] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:55:57,090 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:57] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:55:57,116 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:57] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:55:57,117 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:55:57] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:56:02,097 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:02] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:56:02,104 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:02] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:56:07,080 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:07] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:56:07,111 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:07] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:56:07,111 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:07] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:56:12,099 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:12] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:56:12,105 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:12] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:56:17,082 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:17] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:56:17,103 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:17] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:56:17,103 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:17] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:56:22,095 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:22] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:56:22,099 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:22] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:56:27,082 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:27] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:56:27,109 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:27] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:56:27,111 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:27] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:56:32,098 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:32] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:56:32,098 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:32] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:56:43,111 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:56:43,132 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:56:43,133 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:56:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:56:43,411 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:56:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:56:43,437 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:56:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:56:43,443 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:56:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:57:43,120 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:57:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:57:43,150 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:57:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:57:43,153 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:57:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:57:43,154 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:57:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:57:43,481 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:57:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:57:43,568 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:57:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:58:43,112 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:58:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:58:43,138 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:58:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:58:43,150 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:58:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:58:43,469 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:58:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:58:43,491 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:58:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:58:43,531 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:58:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:59:43,111 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:59:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:59:43,154 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:59:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:59:43,159 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:59:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 09:59:43,160 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 09:59:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 09:59:43,416 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:59:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 09:59:43,437 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 09:59:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 10:00:43,098 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 10:00:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 10:00:43,120 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 10:00:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 10:00:43,125 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 10:00:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 10:00:43,397 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 10:00:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 10:00:43,422 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 10:00:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 10:00:43,423 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 10:00:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 10:01:23,989 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 10:01:23] "GET /api/health HTTP/1.1" 200 - -2025-09-05 10:01:43,107 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 10:01:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 10:01:43,140 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 10:01:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 10:01:43,141 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 10:01:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 10:01:43,144 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 10:01:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 10:01:43,399 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 10:01:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 10:01:43,415 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 10:01:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 10:02:43,097 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 10:02:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 10:02:43,115 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 10:02:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 10:02:43,117 - werkzeug - INFO - 192.168.165.238 - - [05/Sep/2025 10:02:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 10:02:43,400 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 10:02:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 10:02:43,417 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 10:02:43] "GET /api/health HTTP/1.1" 200 - -2025-09-05 10:02:43,422 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 10:02:43] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 11:44:54,375 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:44:54,388 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:44:54,388 - src.main - INFO - TSP助手初始化完成 -2025-09-05 11:44:54,391 - src.main - INFO - 数据库连接测试成功 -2025-09-05 11:44:55,193 - src.core.llm_client - INFO - API请求成功 -2025-09-05 11:44:55,193 - src.main - INFO - LLM API连接测试成功 -2025-09-05 11:44:55,205 - src.main - INFO - 知识库测试成功 -2025-09-05 11:46:08,547 - src.core.database - ERROR - 数据库操作失败: 'severity' is an invalid keyword argument for Alert -2025-09-05 11:46:08,547 - src.analytics.analytics_manager - ERROR - 生成每日分析报告失败: 'severity' is an invalid keyword argument for Alert -2025-09-05 11:46:17,124 - src.main - INFO - 数据库连接测试成功 -2025-09-05 11:46:18,465 - src.core.llm_client - INFO - API请求成功 -2025-09-05 11:46:18,466 - src.main - INFO - LLM API连接测试成功 -2025-09-05 11:46:18,469 - src.main - INFO - 知识库测试成功 -2025-09-05 11:46:38,259 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:46:38,276 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:46:38,281 - src.main - INFO - TSP助手初始化完成 -2025-09-05 11:46:38,290 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:47:09,304 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:47:09,310 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:47:09,310 - src.main - INFO - TSP助手初始化完成 -2025-09-05 11:47:09,321 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:48:52,647 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:48:52,655 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:48:52,656 - src.main - INFO - TSP助手初始化完成 -2025-09-05 11:48:52,658 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:50:00,658 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:50:00,674 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:50:00,675 - src.main - INFO - TSP助手初始化完成 -2025-09-05 11:50:00,682 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:50:50,777 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:50:50,784 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:50:50,784 - src.main - INFO - TSP助手初始化完成 -2025-09-05 11:50:50,797 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:50:50,842 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.159.238:5000 -2025-09-05 11:50:50,842 - werkzeug - INFO - Press CTRL+C to quit -2025-09-05 11:50:50,845 - werkzeug - INFO - * Restarting with stat -2025-09-05 11:50:52,755 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:50:52,762 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:50:52,764 - src.main - INFO - TSP助手初始化完成 -2025-09-05 11:50:52,772 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:50:52,801 - werkzeug - WARNING - * Debugger is active! -2025-09-05 11:50:52,815 - werkzeug - INFO - * Debugger PIN: 651-387-696 -2025-09-05 11:50:55,642 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:50:55] "GET / HTTP/1.1" 200 - -2025-09-05 11:50:55,911 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:50:55] "GET /static/css/style.css HTTP/1.1" 200 - -2025-09-05 11:50:55,917 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:50:55] "GET /static/js/app.js HTTP/1.1" 200 - -2025-09-05 11:50:56,214 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:50:56] "GET /api/rules HTTP/1.1" 200 - -2025-09-05 11:50:56,233 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:50:56] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 11:50:56,250 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:50:56] "GET /api/health HTTP/1.1" 200 - -2025-09-05 11:50:56,270 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:50:56] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 11:50:57,077 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:50:57] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-05 11:51:01,230 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:51:01] "GET /api/health HTTP/1.1" 200 - -2025-09-05 11:51:01,230 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:51:01] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 11:51:06,213 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:51:06] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 11:51:06,227 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:51:06] "GET /api/health HTTP/1.1" 200 - -2025-09-05 11:51:06,229 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:51:06] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 11:51:12,107 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:51:12] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 11:51:12,107 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:51:12] "GET /api/health HTTP/1.1" 200 - -2025-09-05 11:51:16,219 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:51:16] "GET /api/alerts HTTP/1.1" 200 - -2025-09-05 11:51:16,232 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:51:16] "GET /api/health HTTP/1.1" 200 - -2025-09-05 11:51:16,234 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:51:16] "GET /api/monitor/status HTTP/1.1" 200 - -2025-09-05 11:51:16,959 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:51:16] "GET /chat HTTP/1.1" 200 - -2025-09-05 11:51:17,016 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:51:17] "GET /static/js/chat.js HTTP/1.1" 200 - -2025-09-05 11:51:38,282 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:51:38] "GET /chat HTTP/1.1" 200 - -2025-09-05 11:51:38,319 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:51:38] "GET /static/js/chat.js HTTP/1.1" 304 - -2025-09-05 11:51:57,037 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:51:57,044 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:51:57,046 - src.main - INFO - TSP助手初始化完成 -2025-09-05 11:51:57,053 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:51:57,132 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.159.238:5000 -2025-09-05 11:51:57,133 - werkzeug - INFO - Press CTRL+C to quit -2025-09-05 11:51:57,137 - werkzeug - INFO - * Restarting with stat -2025-09-05 11:51:59,082 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:51:59,097 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:51:59,103 - src.main - INFO - TSP助手初始化完成 -2025-09-05 11:51:59,110 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:51:59,137 - werkzeug - WARNING - * Debugger is active! -2025-09-05 11:51:59,151 - werkzeug - INFO - * Debugger PIN: 651-387-696 -2025-09-05 11:52:05,968 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:52:05] "GET /chat HTTP/1.1" 200 - -2025-09-05 11:52:06,108 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:52:06] "GET /static/js/chat.js HTTP/1.1" 304 - -2025-09-05 11:53:01,219 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:53:01] "GET /chat HTTP/1.1" 200 - -2025-09-05 11:53:01,269 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:53:01] "GET /static/js/chat.js HTTP/1.1" 304 - -2025-09-05 11:53:22,119 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:53:22] "GET /chat HTTP/1.1" 200 - -2025-09-05 11:53:22,172 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:53:22] "GET /static/js/chat.js HTTP/1.1" 304 - -2025-09-05 11:53:22,370 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:53:22] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-05 11:54:51,135 - werkzeug - INFO - * Detected change in 'c:\\Users\\jiezhao\\Desktop\\TSP_assistant\\src\\web\\websocket_server.py', reloading -2025-09-05 11:54:51,446 - werkzeug - INFO - * Restarting with stat -2025-09-05 11:54:54,582 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:54:54,607 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:54:54,607 - src.main - INFO - TSP助手初始化完成 -2025-09-05 11:54:54,619 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:54:54,660 - werkzeug - WARNING - * Debugger is active! -2025-09-05 11:54:54,684 - werkzeug - INFO - * Debugger PIN: 651-387-696 -2025-09-05 11:54:55,888 - werkzeug - INFO - * Detected change in 'c:\\Users\\jiezhao\\Desktop\\TSP_assistant\\src\\web\\websocket_server.py', reloading -2025-09-05 11:54:56,215 - werkzeug - INFO - * Restarting with stat -2025-09-05 11:54:59,686 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:54:59,697 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:54:59,697 - src.main - INFO - TSP助手初始化完成 -2025-09-05 11:54:59,715 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:54:59,755 - werkzeug - WARNING - * Debugger is active! -2025-09-05 11:54:59,776 - werkzeug - INFO - * Debugger PIN: 651-387-696 -2025-09-05 11:55:06,341 - werkzeug - INFO - * Detected change in 'c:\\Users\\jiezhao\\Desktop\\TSP_assistant\\src\\web\\websocket_server.py', reloading -2025-09-05 11:55:06,656 - werkzeug - INFO - * Restarting with stat -2025-09-05 11:55:09,693 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:55:09,705 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:55:09,708 - src.main - INFO - TSP助手初始化完成 -2025-09-05 11:55:09,721 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:55:09,764 - werkzeug - WARNING - * Debugger is active! -2025-09-05 11:55:09,784 - werkzeug - INFO - * Debugger PIN: 651-387-696 -2025-09-05 11:55:12,038 - werkzeug - INFO - * Detected change in 'c:\\Users\\jiezhao\\Desktop\\TSP_assistant\\src\\web\\websocket_server.py', reloading -2025-09-05 11:55:12,273 - werkzeug - INFO - * Restarting with stat -2025-09-05 11:55:14,352 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:55:14,372 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:55:14,373 - src.main - INFO - TSP助手初始化完成 -2025-09-05 11:55:14,381 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:55:14,406 - werkzeug - WARNING - * Debugger is active! -2025-09-05 11:55:14,419 - werkzeug - INFO - * Debugger PIN: 651-387-696 -2025-09-05 11:55:15,540 - werkzeug - INFO - * Detected change in 'c:\\Users\\jiezhao\\Desktop\\TSP_assistant\\src\\web\\websocket_server.py', reloading -2025-09-05 11:55:15,731 - werkzeug - INFO - * Restarting with stat -2025-09-05 11:55:17,846 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:55:17,853 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:55:17,853 - src.main - INFO - TSP助手初始化完成 -2025-09-05 11:55:17,862 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-05 11:55:17,893 - werkzeug - WARNING - * Debugger is active! -2025-09-05 11:55:17,908 - werkzeug - INFO - * Debugger PIN: 651-387-696 -2025-09-05 11:55:29,145 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:55:29] "GET /chat HTTP/1.1" 200 - -2025-09-05 11:55:29,333 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:55:29] "GET /static/js/chat.js HTTP/1.1" 304 - -2025-09-05 11:55:31,994 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:55:31] "GET /chat HTTP/1.1" 200 - -2025-09-05 11:55:32,305 - werkzeug - INFO - 127.0.0.1 - - [05/Sep/2025 11:55:32] "GET /static/js/chat.js HTTP/1.1" 304 - -2025-09-06 17:30:59,734 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-06 17:30:59,756 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-06 17:30:59,758 - __main__ - INFO - TSP助手初始化完成 -2025-09-06 17:30:59,760 - __main__ - INFO - 数据库连接测试成功 -2025-09-06 17:31:00,483 - src.core.llm_client - INFO - API请求成功 -2025-09-06 17:31:00,485 - __main__ - INFO - LLM API连接测试成功 -2025-09-06 17:31:00,509 - __main__ - INFO - 知识库测试成功 -2025-09-06 17:31:00,524 - src.dialogue.dialogue_manager - INFO - 创建工单成功: WO20250906173100 -2025-09-06 17:31:05,259 - src.core.llm_client - INFO - API请求成功 -2025-09-06 17:31:05,270 - __main__ - INFO - 数据库连接测试成功 -2025-09-06 17:31:06,162 - src.core.llm_client - INFO - API请求成功 -2025-09-06 17:31:06,164 - __main__ - INFO - LLM API连接测试成功 -2025-09-06 17:31:06,170 - __main__ - INFO - 知识库测试成功 -2025-09-06 17:31:42,181 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-06 17:31:42,195 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 39 个条目 -2025-09-06 17:31:42,198 - src.main - INFO - TSP助手初始化完成 -2025-09-06 17:31:42,198 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-06 17:31:42,198 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-06 17:31:42,198 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-06 17:31:42,198 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-06 17:31:42,198 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-06 17:31:42,198 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-06 17:31:42,198 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-06 17:31:42,198 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-06 17:31:42,198 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-06 17:31:42,200 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-06 17:31:42,200 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-06 17:31:42,200 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-06 17:31:42,200 - __main__ - INFO - TSP Agent助手初始化完成 -2025-09-06 17:31:45,661 - src.core.llm_client - INFO - API请求成功 -2025-09-06 17:31:45,662 - src.agent.goal_manager - INFO - 创建目标: goal_20250906_173145, 类型: general -2025-09-06 17:31:47,398 - src.core.llm_client - INFO - API请求成功 -2025-09-06 17:32:13,349 - src.core.llm_client - INFO - API请求成功 -2025-09-06 17:32:13,351 - src.agent.planner - INFO - 创建计划成功,包含 1 个任务 -2025-09-06 17:32:13,351 - src.agent.executor - INFO - 执行任务: condition_check, 类型: condition, 工具: -2025-09-06 17:32:13,352 - src.agent.executor - INFO - 任务 condition_check 执行完成,耗时: 0.00秒 -2025-09-06 17:32:13,352 - src.agent.executor - INFO - 计划执行完成: exec_20250906_173213 -2025-09-06 17:32:33,643 - src.core.llm_client - INFO - API请求成功 -2025-09-06 17:32:34,255 - src.core.llm_client - INFO - API请求成功 -2025-09-06 17:32:49,452 - src.core.llm_client - INFO - API请求成功 -2025-09-06 17:32:49,453 - src.agent.goal_manager - INFO - 创建目标: goal_20250906_173249, 类型: general -2025-09-06 17:32:51,393 - src.core.llm_client - INFO - API请求成功 -2025-09-06 17:33:07,158 - src.core.llm_client - INFO - API请求成功 -2025-09-06 17:33:07,159 - src.agent.planner - INFO - 创建计划成功,包含 1 个任务 -2025-09-06 17:33:07,159 - src.agent.executor - INFO - 执行任务: condition_check, 类型: condition, 工具: -2025-09-06 17:33:07,159 - src.agent.executor - INFO - 任务 condition_check 执行完成,耗时: 0.00秒 -2025-09-06 17:33:07,159 - src.agent.executor - INFO - 计划执行完成: exec_20250906_173307 -2025-09-06 17:33:23,476 - src.core.llm_client - INFO - API请求成功 -2025-09-06 17:33:27,641 - src.core.llm_client - INFO - API请求成功 -2025-09-06 17:33:27,643 - src.agent.goal_manager - INFO - 创建目标: goal_20250906_173327, 类型: general -2025-09-06 17:33:29,378 - src.core.llm_client - INFO - API请求成功 -2025-09-06 17:33:45,394 - src.core.llm_client - INFO - API请求成功 -2025-09-06 17:33:45,396 - src.agent.planner - INFO - 创建计划成功,包含 1 个任务 -2025-09-06 17:33:45,396 - src.agent.executor - INFO - 执行任务: condition_check, 类型: condition, 工具: -2025-09-06 17:33:45,396 - src.agent.executor - INFO - 任务 condition_check 执行完成,耗时: 0.00秒 -2025-09-06 17:33:45,396 - src.agent.executor - INFO - 计划执行完成: exec_20250906_173345 -2025-09-06 17:34:05,563 - src.core.llm_client - INFO - API请求成功 -2025-09-06 17:34:08,275 - src.core.llm_client - INFO - API请求成功 -2025-09-06 17:34:08,297 - src.dialogue.dialogue_manager - INFO - 创建工单成功: WO20250906173408 -2025-09-06 17:34:08,301 - src.core.database - ERROR - 数据库操作失败: 'Alert' object has no attribute 'severity' -2025-09-06 17:34:08,301 - src.analytics.analytics_manager - ERROR - 获取活跃预警失败: 'Alert' object has no attribute 'severity' -2025-09-06 17:34:08,305 - src.main - INFO - 数据库连接测试成功 -2025-09-06 17:34:09,081 - src.core.llm_client - INFO - API请求成功 -2025-09-06 17:34:09,088 - src.main - INFO - LLM API连接测试成功 -2025-09-06 17:34:09,090 - src.main - INFO - 知识库测试成功 -2025-09-06 20:04:00,687 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.ProgrammingError) (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('knowledge_entries') \n WHERE name = 'is_verified'' at line 2") -[SQL: - SELECT COUNT(*) as count - FROM pragma_table_info('knowledge_entries') - WHERE name = 'is_verified' - ] -(Background on this error at: https://sqlalche.me/e/20/f405) -2025-09-06 20:04:00,696 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:00,714 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V001 - location -2025-09-06 20:04:00,717 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V001 - status -2025-09-06 20:04:00,717 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V001 - battery -2025-09-06 20:04:00,723 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V001 - engine -2025-09-06 20:04:00,723 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V002 - location -2025-09-06 20:04:00,730 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V002 - status -2025-09-06 20:04:00,734 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V002 - fault -2025-09-06 20:04:00,735 - src.vehicle.vehicle_data_manager - INFO - 示例车辆数据添加成功 -2025-09-06 20:04:00,738 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries -WHERE knowledge_entries.is_verified = false] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:04:00,748 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'knowledge_entries.is_verified' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT knowledge_entries.id AS knowledge_entries_id, knowledge_entries.question AS knowledge_entries_question, knowledge_entries.answer AS knowledge_entries_answer, knowledge_entries.category AS knowledge_entries_category, knowledge_entries.confidence_score AS knowledge_entries_confidence_score, knowledge_entries.usage_count AS knowledge_entries_usage_count, knowledge_entries.created_at AS knowledge_entries_created_at, knowledge_entries.updated_at AS knowledge_entries_updated_at, knowledge_entries.is_active AS knowledge_entries_is_active, knowledge_entries.is_verified AS knowledge_entries_is_verified, knowledge_entries.verified_by AS knowledge_entries_verified_by, knowledge_entries.verified_at AS knowledge_entries_verified_at, knowledge_entries.vector_embedding AS knowledge_entries_vector_embedding -FROM knowledge_entries) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-06 20:07:56,720 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V001 - location -2025-09-06 20:07:56,724 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V001 - status -2025-09-06 20:07:56,728 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V001 - battery -2025-09-06 20:07:56,731 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V001 - engine -2025-09-06 20:07:56,735 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V002 - location -2025-09-06 20:07:56,738 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V002 - status -2025-09-06 20:07:56,741 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V002 - fault -2025-09-06 20:07:56,742 - src.vehicle.vehicle_data_manager - INFO - 示例车辆数据添加成功 -2025-09-06 20:09:16,590 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 43 个条目 -2025-09-06 20:09:16,604 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 43 个条目 -2025-09-06 20:09:16,604 - src.main - INFO - TSP助手初始化完成 -2025-09-06 20:09:16,606 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-06 20:09:16,606 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-06 20:09:16,607 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-06 20:09:16,607 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-06 20:09:16,607 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-06 20:09:16,607 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-06 20:09:16,607 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-06 20:09:16,607 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-06 20:09:16,608 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-06 20:09:16,608 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-06 20:09:16,608 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-06 20:09:16,608 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-06 20:09:16,608 - src.agent_assistant - INFO - TSP Agent助手初始化完成 -2025-09-06 20:09:33,979 - src.core.llm_client - INFO - API请求成功 -2025-09-06 20:09:33,979 - src.agent_assistant - ERROR - 处理文件失败: 'question' -2025-09-06 20:10:08,212 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 43 个条目 -2025-09-06 20:10:08,220 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 43 个条目 -2025-09-06 20:10:08,227 - src.main - INFO - TSP助手初始化完成 -2025-09-06 20:10:08,227 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-06 20:10:08,228 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-06 20:10:08,229 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-06 20:10:08,229 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-06 20:10:08,229 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-06 20:10:08,229 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-06 20:10:08,229 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-06 20:10:08,230 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-06 20:10:08,230 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-06 20:10:08,230 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-06 20:10:08,230 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-06 20:10:08,231 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-06 20:10:08,231 - src.agent_assistant - INFO - TSP Agent助手初始化完成 -2025-09-06 20:10:17,957 - src.core.llm_client - INFO - API请求成功 -2025-09-06 20:10:17,959 - src.agent_assistant - INFO - LLM响应内容: [ - { - "question": "远程启动车辆需要满足哪些条件?", - "answer": "远程启动车辆需要满足以下条件:1. 车辆处于P档;2. 手刹已拉起;3. 车门已锁;4. 电池电量充足。", - "category": "远程控制", - "confidence_score": 0.95 - }, - { - "question": "如何通过APP远程启动车辆?", - "answer": "通过APP远程启动车辆的操作步骤如下:1. 打开车辆配套APP;2. 点击远程启动按钮;3. 系统将自动检查启动条件;4. 确认无误后,等待车辆启动完成。", - "category": "APP功能", - "confidence_score": 0.9 - }, - { - "question": "远程启动后需要注意什么?", - "answer": "远程启动后需注意:车辆启动后10分钟内必须踩下刹车以解除启动状态,否则车辆将自动熄火以确保安全。如遇到启动失败或其他异常情况,请及时联系客服。", - "category":... -2025-09-06 20:10:17,959 - src.agent_assistant - INFO - 成功解析JSON,提取到 4 条知识 -2025-09-06 20:10:17,979 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 44 个条目 -2025-09-06 20:10:17,981 - src.knowledge_base.knowledge_manager - INFO - 添加知识库条目成功: 远程启动车辆需要满足哪些条件?... -2025-09-06 20:10:17,995 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 45 个条目 -2025-09-06 20:10:17,997 - src.knowledge_base.knowledge_manager - INFO - 添加知识库条目成功: 如何通过APP远程启动车辆?... -2025-09-06 20:10:18,009 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 46 个条目 -2025-09-06 20:10:18,015 - src.knowledge_base.knowledge_manager - INFO - 添加知识库条目成功: 远程启动后需要注意什么?... -2025-09-06 20:10:18,029 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 47 个条目 -2025-09-06 20:10:18,032 - src.knowledge_base.knowledge_manager - INFO - 添加知识库条目成功: 远程启动过程中提示失败可能是什么原因?... -2025-09-06 20:43:38,829 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 58 个条目 -2025-09-06 20:43:38,846 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 58 个条目 -2025-09-06 20:43:38,847 - src.main - INFO - TSP助手初始化完成 -2025-09-06 20:43:38,862 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 58 个条目 -2025-09-06 20:43:38,881 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 58 个条目 -2025-09-06 20:43:38,882 - src.main - INFO - TSP助手初始化完成 -2025-09-06 20:43:38,884 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-06 20:43:38,884 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-06 20:43:38,884 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-06 20:43:38,886 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-06 20:43:38,886 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-06 20:43:38,886 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-06 20:43:38,886 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-06 20:43:38,886 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-06 20:43:38,886 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-06 20:43:38,887 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-06 20:43:38,887 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-06 20:43:38,887 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-06 20:43:38,887 - src.agent_assistant - INFO - TSP Agent助手初始化完成 -2025-09-06 20:43:38,906 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 58 个条目 -2025-09-06 20:43:38,950 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 58 个条目 -2025-09-06 20:43:38,969 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 58 个条目 -2025-09-06 20:43:38,971 - src.main - INFO - TSP助手初始化完成 -2025-09-06 20:43:39,774 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 59 个条目 -2025-09-06 20:43:39,782 - src.knowledge_base.knowledge_manager - INFO - 添加知识库条目成功: Web API测试删除 - 这是一个测试条目... -2025-09-06 20:43:39,861 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 58 个条目 -2025-09-06 20:43:39,866 - src.knowledge_base.knowledge_manager - INFO - 删除知识库条目成功: 60 diff --git a/note/代码清理总结.md b/note/代码清理总结.md deleted file mode 100644 index a8fcd99..0000000 --- a/note/代码清理总结.md +++ /dev/null @@ -1,152 +0,0 @@ -# TSP智能助手 - 代码清理总结 - -## 🧹 清理完成 - -已成功清理了项目中的不需要代码文件,使项目结构更加清晰和简洁。 - -## 📁 清理的文件列表 - -### 1. 演示和测试文件 (12个) -- `alert_demo.py` - 预警演示文件 -- `confidence_demo.py` - 置信度演示文件 -- `demo.py` - 通用演示文件 -- `demo_realtime_chat.py` - 实时对话演示文件 -- `quick_test.py` - 快速测试文件 -- `test_chat_fix.py` - 对话修复测试文件 -- `test_http_chat.py` - HTTP聊天测试文件 -- `test_realtime_chat.py` - 实时聊天测试文件 -- `test_search.py` - 搜索测试文件 -- `test_system.py` - 系统测试文件 -- `test_web_api.py` - Web API测试文件 -- `test_work_order_search.py` - 工单搜索测试文件 -- `debug_search.py` - 调试搜索文件 - -### 2. 重复文件 (1个) -- `agent_assistant.py` - 根目录下的重复文件(保留src目录下的版本) - -### 3. 旧的启动脚本 (5个) -- `start_chat_simple.py` - 简单聊天启动脚本 -- `start_flask_only.py` - 仅Flask启动脚本 -- `start_realtime_chat.py` - 实时聊天启动脚本 -- `start_web.py` - Web启动脚本 -- `start.py` - 通用启动脚本 - -### 4. 构建和临时文件 (8个) -- `add_sample_knowledge.py` - 添加示例知识库脚本 -- `build_knowledge.py` - 构建知识库脚本 -- `knowledge_builder.py` - 知识库构建器 -- `work_order_knowledge_builder.py` - 工单知识库构建器 -- `simple_work_order_builder.py` - 简单工单构建器 -- `analyze_work_orders.py` - 工单分析脚本 -- `check_knowledge_data.py` - 知识库数据检查脚本 -- `alert_manager.py` - 预警管理器脚本 -- `quick_start.py` - 快速启动脚本 - -### 5. 临时和报告文件 (2个) -- `knowledge_build_report.txt` - 知识库构建报告 -- `knowledge_build_results.json` - 知识库构建结果 - -### 6. 过时的文档文件 (5个) -- `实时对话问题解决方案.md` - 问题解决方案文档 -- `知识库构建指南.md` - 知识库构建指南 -- `置信度计算机制详解.md` - 置信度计算文档 -- `预警管理Web界面使用说明.md` - 预警管理文档 -- `实时对话系统使用说明.md` - 实时对话文档 - -### 7. 缓存文件 -- 所有 `__pycache__` 目录及其内容 - -## 📂 保留的核心文件 - -### 主要启动文件 -- `start_dashboard.py` - 综合管理平台启动脚本(主要) - -### 核心功能模块 -- `src/main.py` - 主程序入口 -- `src/agent_assistant.py` - Agent助手 -- `src/web/app.py` - Web应用 -- `src/web/websocket_server.py` - WebSocket服务器 - -### 数据库相关 -- `init_database.py` - 数据库初始化 -- `reset_database.py` - 数据库重置 -- `create_mysql_db.py` - MySQL数据库创建 -- `tsp_assistant.db` - SQLite数据库文件 - -### 核心模块 -- `src/core/` - 核心功能模块 -- `src/agent/` - Agent相关模块 -- `src/analytics/` - 分析模块 -- `src/config/` - 配置模块 -- `src/dialogue/` - 对话模块 -- `src/knowledge_base/` - 知识库模块 -- `src/utils/` - 工具模块 -- `src/web/` - Web界面模块 - -### 前端资源 -- `src/web/templates/` - HTML模板 -- `src/web/static/` - 静态资源(CSS、JS) - -### 文档 -- `README.md` - 项目说明 -- `Agent功能升级指南.md` - Agent功能指南 -- `快速启动指南.md` - 快速启动指南 -- `综合前端使用说明.md` - 综合前端使用说明 - -### 配置文件 -- `requirements.txt` - Python依赖 -- `详情.xlsx` - 项目详情表格 - -## 🎯 清理效果 - -### 文件数量减少 -- **清理前**: 约80+个文件 -- **清理后**: 约40+个文件 -- **减少**: 约50%的文件 - -### 项目结构优化 -- ✅ 移除了所有演示和测试文件 -- ✅ 删除了重复的文件 -- ✅ 清理了旧的启动脚本 -- ✅ 移除了构建和临时文件 -- ✅ 整理了文档文件 -- ✅ 清理了缓存文件 - -### 保留的核心功能 -- ✅ 综合管理平台 (`start_dashboard.py`) -- ✅ 完整的Agent功能 -- ✅ Web界面和API -- ✅ 数据库管理 -- ✅ 核心业务逻辑 -- ✅ 前端资源 - -## 🚀 使用建议 - -### 启动系统 -```bash -python start_dashboard.py -``` - -### 访问地址 -- 主页: http://localhost:5000 -- 预警管理: http://localhost:5000/alerts -- 实时对话: http://localhost:5000/chat - -### 主要功能 -1. **仪表板** - 系统概览和监控 -2. **智能对话** - 实时聊天功能 -3. **Agent管理** - Agent状态和工具管理 -4. **预警管理** - 预警监控和处理 -5. **知识库管理** - 知识检索和添加 -6. **工单管理** - 工单创建和跟踪 -7. **数据分析** - 性能分析和趋势 -8. **系统设置** - 参数配置和信息 - -## 📝 注意事项 - -1. **备份**: 清理前已确保重要功能完整 -2. **测试**: 建议重新测试主要功能确保正常 -3. **文档**: 保留了最重要的使用文档 -4. **配置**: 所有配置文件都已保留 - -清理完成后的项目结构更加清晰,便于维护和部署! diff --git a/note/功能修复总结.md b/note/功能修复总结.md deleted file mode 100644 index 97f7163..0000000 --- a/note/功能修复总结.md +++ /dev/null @@ -1,270 +0,0 @@ -# TSP智能助手 - 功能修复总结 - -## 🎯 修复的问题 - -### 1. ✅ Agent模式无法启动 -**问题描述**: 前端Agent模式开关无法正常工作,Agent相关功能无法使用。 - -**修复方案**: -- 更新Flask应用,正确集成`TSPAgentAssistant` -- 修复Agent相关API端点,调用真实的Agent方法 -- 更新前端JavaScript,正确处理Agent状态 - -**修复文件**: -- `src/web/app.py` - 更新Agent API端点 -- `src/agent_assistant.py` - 添加缺失的Agent方法 -- `src/web/static/js/dashboard.js` - 修复Agent控制逻辑 - -### 2. ✅ 无法手动添加知识库内容 -**问题描述**: 前端知识库添加功能无法正常工作。 - -**修复方案**: -- 修复知识库添加API,正确调用知识库管理器 -- 更新前端JavaScript,处理添加结果 -- 添加删除知识库条目的功能 - -**修复文件**: -- `src/web/app.py` - 修复知识库添加API -- `src/web/static/js/dashboard.js` - 修复添加知识库逻辑 - -### 3. ✅ 缺少文件上传生成知识库功能 -**问题描述**: 系统缺少通过大模型自主读取文件生成知识库的功能。 - -**修复方案**: -- 添加文件上传API端点 -- 实现文件内容读取(支持TXT、PDF、DOC、DOCX、MD) -- 使用LLM自动提取问答对 -- 添加前端文件上传界面 - -**新增功能**: -- 文件上传处理 -- 自动问答对提取 -- 多种文件格式支持 -- 进度条显示 -- 处理结果反馈 - -**修复文件**: -- `src/web/app.py` - 添加文件上传API -- `src/agent_assistant.py` - 添加文件处理方法 -- `src/web/templates/dashboard.html` - 添加文件上传界面 -- `src/web/static/js/dashboard.js` - 添加文件上传逻辑 - -### 4. ✅ 页面刷新后无法停留在原页面 -**问题描述**: 刷新网页后总是回到默认页面,无法保持用户当前浏览的页面。 - -**修复方案**: -- 使用localStorage保存页面状态 -- 页面加载时自动恢复状态 -- 添加状态过期机制(1小时) -- 完善错误处理 - -**修复文件**: -- `src/web/static/js/dashboard.js` - 添加页面状态保存和恢复功能 - -## 🚀 新增功能特性 - -### Agent管理增强 -- **状态监控**: 实时显示Agent运行状态 -- **工具管理**: 查看可用工具和使用统计 -- **主动监控**: Agent主动发现和解决问题 -- **智能分析**: 使用Agent推理能力进行深度分析 - -### 知识库管理增强 -- **手动添加**: 支持手动添加知识库条目 -- **文件上传**: 支持上传文件自动生成知识库 -- **智能提取**: 使用LLM自动提取问答对 -- **多格式支持**: 支持TXT、PDF、DOC、DOCX、MD文件 -- **进度显示**: 文件处理进度条和状态提示 - -### 用户体验优化 -- **状态保持**: 页面刷新后保持当前浏览状态 -- **实时反馈**: 操作结果实时通知 -- **错误处理**: 完善的错误提示和处理机制 -- **响应式设计**: 适配各种屏幕尺寸 - -## 📁 修改的文件列表 - -### 后端文件 -1. **`src/web/app.py`** - - 集成TSPAgentAssistant - - 修复Agent相关API端点 - - 添加文件上传API - - 修复知识库管理API - -2. **`src/agent_assistant.py`** - - 添加Agent状态管理方法 - - 实现文件处理功能 - - 添加知识提取方法 - - 完善错误处理 - -### 前端文件 -3. **`src/web/templates/dashboard.html`** - - 添加文件上传模态框 - - 优化知识库管理界面 - - 添加进度条组件 - -4. **`src/web/static/js/dashboard.js`** - - 修复Agent控制逻辑 - - 添加文件上传功能 - - 实现页面状态保存 - - 完善错误处理 - -### 测试文件 -5. **`test_fixes.py`** - 功能测试脚本 - -## 🔧 技术实现细节 - -### Agent模式修复 -```python -# 正确的Agent状态获取 -def get_agent_status(self) -> Dict[str, Any]: - return { - "success": True, - "status": "active" if self.is_agent_mode else "inactive", - "active_goals": len(self.agent_core.goal_manager.get_active_goals()), - "available_tools": len(self.agent_core.tool_manager.get_available_tools()), - "tools": [...], - "execution_history": [] - } -``` - -### 文件处理功能 -```python -# 文件内容读取 -def _read_file_content(self, file_path: str, file_ext: str) -> str: - if file_ext in ['.txt', '.md']: - with open(file_path, 'r', encoding='utf-8') as f: - return f.read() - elif file_ext == '.pdf': - # PDF处理逻辑 - elif file_ext in ['.doc', '.docx']: - # Word文档处理逻辑 -``` - -### 知识提取功能 -```python -# LLM知识提取 -def _extract_knowledge_from_content(self, content: str, filename: str): - prompt = f""" -请从以下文档内容中提取问答对,用于构建知识库: -文档名称:{filename} -文档内容:{content[:2000]}... -""" - # 调用LLM处理 - response = self.llm_client.chat_completion(...) -``` - -### 页面状态保存 -```javascript -// 保存页面状态 -savePageState() { - const state = { - currentTab: this.currentTab, - timestamp: Date.now() - }; - localStorage.setItem('tsp_dashboard_state', JSON.stringify(state)); -} - -// 恢复页面状态 -restorePageState() { - const savedState = localStorage.getItem('tsp_dashboard_state'); - if (savedState) { - const state = JSON.parse(savedState); - if (Date.now() - state.timestamp < 3600000) { - this.switchTab(state.currentTab); - } - } -} -``` - -## 🧪 测试验证 - -### 测试脚本 -使用 `test_fixes.py` 可以验证所有修复的功能: - -```bash -python test_fixes.py -``` - -### 测试内容 -1. **Agent模式测试** - - Agent状态获取 - - Agent模式切换 - - Agent监控启动 - - 主动监控运行 - - 智能分析执行 - -2. **知识库管理测试** - - 知识库列表获取 - - 手动添加知识 - - 知识库搜索 - - 统计信息获取 - -3. **页面状态测试** - - 状态保存机制 - - 状态恢复功能 - - 过期处理机制 - -## 📋 使用指南 - -### 启动系统 -```bash -python start_dashboard.py -``` - -### 访问地址 -- 主页: http://localhost:5000 -- 预警管理: http://localhost:5000/alerts -- 实时对话: http://localhost:5000/chat - -### 新功能使用 - -#### 1. Agent管理 -1. 访问Agent管理标签页 -2. 使用开关切换Agent模式 -3. 启动/停止Agent监控 -4. 运行主动监控和智能分析 - -#### 2. 知识库管理 -1. 访问知识库管理标签页 -2. 手动添加知识:点击"添加知识"按钮 -3. 文件上传:点击"上传文件"按钮 -4. 选择文件和处理方式 -5. 查看处理结果 - -#### 3. 页面状态保持 -1. 切换到任意标签页 -2. 刷新页面 -3. 系统自动恢复到刷新前的页面 - -## ⚠️ 注意事项 - -### 依赖库 -- **PyPDF2**: 用于PDF文件处理 -- **python-docx**: 用于Word文档处理 - -安装命令: -```bash -pip install PyPDF2 python-docx -``` - -### 文件限制 -- 支持的文件格式:TXT, PDF, DOC, DOCX, MD -- 文件大小建议不超过10MB -- 处理时间取决于文件大小和内容复杂度 - -### 性能考虑 -- 大文件处理可能需要较长时间 -- 建议在非高峰时段进行批量文件处理 -- 定期清理临时文件 - -## 🎉 修复完成 - -所有问题已成功修复,系统现在具备: - -✅ **完整的Agent功能** - 支持Agent模式切换、监控、分析 -✅ **完善的知识库管理** - 支持手动添加和文件上传 -✅ **智能文件处理** - 自动提取问答对生成知识库 -✅ **良好的用户体验** - 页面状态保持、实时反馈 - -现在可以正常使用TSP智能助手的所有功能了! diff --git a/note/快速启动指南.md b/note/快速启动指南.md deleted file mode 100644 index dbc8638..0000000 --- a/note/快速启动指南.md +++ /dev/null @@ -1,193 +0,0 @@ -# TSP智能助手 - 快速启动指南 - -## 🚀 一键启动 - -### 方法1: 使用综合管理平台(推荐) -```bash -python start_dashboard.py -``` -访问: http://localhost:5000 - -### 方法2: 使用原有启动方式 -```bash -python start_web.py -``` - -## 📋 功能清单 - -### ✅ 已整合的功能 -- [x] **仪表板** - 系统概览和性能监控 -- [x] **智能对话** - 实时聊天和工单创建 -- [x] **Agent管理** - Agent状态和工具管理 -- [x] **预警管理** - 预警监控和规则管理 -- [x] **知识库管理** - 知识检索和添加 -- [x] **工单管理** - 工单创建和状态跟踪 -- [x] **数据分析** - 性能分析和趋势展示 -- [x] **系统设置** - 参数配置和系统信息 - -## 🎯 快速体验 - -### 1. 启动系统 -```bash -python start_dashboard.py -``` - -### 2. 访问主页 -打开浏览器访问: http://localhost:5000 - -### 3. 体验功能 -1. **查看仪表板** - 了解系统整体状态 -2. **开始对话** - 测试智能对话功能 -3. **管理预警** - 查看和处理预警 -4. **浏览知识库** - 查看和添加知识 -5. **创建工单** - 测试工单管理功能 - -## 🔧 配置说明 - -### 环境要求 -- Python 3.8+ -- 已安装项目依赖 -- 数据库已初始化 - -### 端口配置 -- 默认端口: 5000 -- 如需修改,编辑 `start_dashboard.py` 中的端口设置 - -### 数据库配置 -- 默认使用SQLite数据库 -- 如需使用MySQL,修改 `src/config/config.py` - -## 📱 界面预览 - -### 主界面布局 -``` -┌─────────────────────────────────────────────────────────┐ -│ TSP智能助手 - 综合管理平台 │ -├─────────────┬───────────────────────────────────────────┤ -│ 控制面板 │ 主内容区 │ -│ • 仪表板 │ ┌─────────────────────────────────────────┐ │ -│ • 智能对话 │ │ 统计卡片 (活跃会话/预警/工单/知识) │ │ -│ • Agent管理 │ ├─────────────────────────────────────────┤ │ -│ • 预警管理 │ │ 性能趋势图 │ │ -│ • 知识库 │ ├─────────────────────────────────────────┤ │ -│ • 工单管理 │ │ 系统健康状态 │ │ -│ • 数据分析 │ └─────────────────────────────────────────┘ │ -│ • 系统设置 │ │ -└─────────────┴───────────────────────────────────────────┘ -``` - -## 🎨 界面特色 - -### 现代化设计 -- 渐变色彩搭配 -- 圆角卡片设计 -- 动态效果过渡 -- 响应式布局 - -### 直观操作 -- 侧边栏导航 -- 标签页切换 -- 模态框交互 -- 实时状态更新 - -### 数据可视化 -- Chart.js图表 -- 进度条显示 -- 状态指示器 -- 趋势分析 - -## 🔍 功能详解 - -### 仪表板 -- **实时监控**: 系统健康状态、内存使用、CPU使用率 -- **统计概览**: 活跃会话、预警数量、工单状态、知识条目 -- **性能趋势**: 24小时性能变化图表 -- **快速操作**: 一键访问各功能模块 - -### 智能对话 -- **实时聊天**: 基于WebSocket的即时通信 -- **知识库集成**: 自动检索相关知识 -- **工单创建**: 对话中直接创建工单 -- **快速操作**: 预设常用问题 - -### Agent管理 -- **状态监控**: Agent运行状态和活跃目标 -- **工具管理**: 查看工具使用统计和成功率 -- **主动监控**: Agent主动发现和解决问题 -- **执行历史**: 查看Agent执行记录 - -### 预警管理 -- **预警统计**: 按严重程度分类显示 -- **预警列表**: 实时显示活跃预警 -- **预警处理**: 一键解决预警问题 -- **规则管理**: 创建和管理预警规则 - -### 知识库管理 -- **知识检索**: 搜索和浏览知识库 -- **知识添加**: 手动添加新知识 -- **统计分析**: 使用统计和置信度 -- **分类管理**: 按类别组织知识 - -### 工单管理 -- **工单列表**: 查看和管理所有工单 -- **状态过滤**: 按状态和优先级筛选 -- **工单创建**: 创建新的工单 -- **统计分析**: 工单处理统计 - -### 数据分析 -- **性能趋势**: 系统性能变化 -- **类别分布**: 问题类别分布图 -- **详细报告**: 综合分析报告 -- **智能推荐**: 基于分析的改进建议 - -### 系统设置 -- **参数配置**: 调整系统运行参数 -- **模式切换**: 启用/禁用Agent模式 -- **系统信息**: 版本和运行状态 -- **设置保存**: 持久化配置 - -## 🚨 注意事项 - -### 首次使用 -1. 确保已安装所有依赖: `pip install -r requirements.txt` -2. 初始化数据库: `python init_database.py` -3. 配置API密钥: 编辑 `src/config/config.py` - -### 常见问题 -1. **端口被占用**: 修改端口或关闭占用进程 -2. **数据库错误**: 检查数据库连接和权限 -3. **API调用失败**: 检查网络连接和API密钥 - -### 性能建议 -1. **内存使用**: 监控内存使用情况 -2. **数据库优化**: 定期清理历史数据 -3. **缓存策略**: 启用浏览器缓存 - -## 📞 技术支持 - -### 日志查看 -- 应用日志: `logs/dashboard.log` -- 系统日志: `logs/tsp_assistant.log` - -### 调试模式 -```bash -export FLASK_ENV=development -python start_dashboard.py -``` - -### 问题反馈 -如遇到问题,请提供: -1. 错误日志 -2. 操作步骤 -3. 系统环境 -4. 浏览器信息 - -## 🎉 开始使用 - -现在你已经了解了TSP智能助手综合管理平台的所有功能,可以开始体验这个强大的智能客服系统了! - -```bash -python start_dashboard.py -``` - -访问 http://localhost:5000 开始你的智能客服之旅! diff --git a/note/数据库初始化说明.md b/note/数据库初始化说明.md deleted file mode 100644 index f691931..0000000 --- a/note/数据库初始化说明.md +++ /dev/null @@ -1,157 +0,0 @@ -# TSP智能助手 - 数据库初始化说明 - -## 🎯 概述 - -所有数据库操作已整合到 `init_database.py` 文件中,包括: -- 数据库表创建 -- 字段迁移和添加 -- 初始数据插入 -- 示例数据生成 -- 知识库验证 - -## 🚀 使用方法 - -### 1. 执行数据库初始化 -```bash -python init_database.py -``` - -### 2. 初始化过程 -脚本会自动执行以下操作: - -1. **📋 创建数据库表** - - 工单表 (work_orders) - - 对话表 (conversations) - - 知识库表 (knowledge_entries) - - 分析表 (analytics) - - 预警表 (alerts) - - 车辆数据表 (vehicle_data) - -2. **🔄 数据库迁移** - - 添加知识库验证字段 (is_verified, verified_by, verified_at) - - 创建车辆数据表 - -3. **📊 插入初始数据** - - 10条示例知识库条目 - - 所有条目自动标记为已验证 - -4. **🚗 添加示例车辆数据** - - 2辆示例车辆 (V001, V002) - - 包含位置、状态、电池、故障等数据 - -5. **🔍 验证知识库条目** - - 将现有未验证条目标记为已验证 - -## 📊 初始化后的数据状态 - -### 知识库数据 -- **总条目数**: 10条 -- **已验证**: 10条 -- **未验证**: 0条 -- **分类**: 账户问题、支付问题、技术问题、服务问题、远程控制、APP功能 - -### 车辆数据 -- **车辆数量**: 2辆 -- **数据类型**: 位置、状态、电池、故障、引擎 -- **记录总数**: 7条 - -## ✅ 验证初始化成功 - -运行初始化脚本后,您会看到类似输出: - -``` -🚀 TSP智能助手数据库初始化 -============================================================ -✅ 数据库连接成功 - -📋 创建数据库表... -✅ 数据库表创建成功 - -🔄 执行数据库迁移... - 📝 检查知识库验证字段... - ✅ is_verified字段已存在 - ✅ verified_by字段已存在 - ✅ verified_at字段已存在 - ✅ vehicle_data表已存在 - ✅ 数据库迁移完成 - -📊 插入初始数据... - ✅ 成功插入 10 条知识库条目 - -🚗 添加示例车辆数据... - ✅ 示例车辆数据添加成功 - -🔍 验证知识库条目... - ✅ 所有知识库条目已验证 - -✅ 数据库初始化完成 - -============================================================ -📊 数据库状态检查 -============================================================ -📋 工单表记录数: 0 -💬 对话表记录数: 0 -📚 知识库表记录数: 10 - - 已验证: 10 - - 未验证: 0 -📊 分析表记录数: 0 -🚨 预警表记录数: 0 -🚗 车辆数据表记录数: 7 - - 车辆数量: 2 - - 车辆 V001: 4 种数据类型 - - 车辆 V002: 3 种数据类型 - -✅ 数据库状态检查完成 - -============================================================ -🎉 数据库初始化成功! -============================================================ -✅ 已完成的操作: - - 创建所有数据库表 - - 添加知识库验证字段 - - 创建车辆数据表 - - 插入初始知识库数据 - - 添加示例车辆数据 - - 验证所有知识库条目 - -🚀 现在您可以运行以下命令启动系统: - python start_dashboard.py - -🧪 或运行功能测试: - python test_new_features.py - -📋 新功能包括: - - 知识库分页显示 - - 知识库验证机制 - - 车辆实时数据管理 - - 文件上传生成知识库 - - 智能对话结合车辆数据 -``` - -## 🔧 后续操作 - -### 启动系统 -```bash -python start_dashboard.py -``` - -### 运行功能测试 -```bash -python test_new_features.py -``` - -### 访问界面 -- 主页: http://localhost:5000 -- 预警管理: http://localhost:5000/alerts -- 实时对话: http://localhost:5000/chat - -## ⚠️ 注意事项 - -1. **备份数据**: 如果已有数据,建议先备份 -2. **权限检查**: 确保有数据库文件读写权限 -3. **依赖库**: 确保所有Python依赖库已安装 -4. **重复运行**: 脚本支持重复运行,会跳过已存在的数据 - -## 🎉 完成 - -现在所有数据库操作都整合在一个文件中,运行一次即可完成所有初始化工作! diff --git a/note/问题修复总结.md b/note/问题修复总结.md deleted file mode 100644 index b2a2eba..0000000 --- a/note/问题修复总结.md +++ /dev/null @@ -1,215 +0,0 @@ -# TSP智能助手 - 问题修复总结 - -## 🎯 问题描述 - -用户反馈: -1. **添加知识失败** - 无法在前端添加新的知识库条目 -2. **无法显示知识库** - 知识库内容无法正常显示 - -## 🔍 问题分析 - -通过日志分析发现: -- 系统使用MySQL数据库 -- 数据库缺少 `is_verified`、`verified_by`、`verified_at` 字段 -- 知识库模型已更新但数据库结构未同步 -- 导致SQL查询失败:`Unknown column 'knowledge_entries.is_verified' in 'field list'` - -## ✅ 解决方案 - -### 1. 数据库迁移修复 - -**问题**: 迁移脚本只支持SQLite,但系统使用MySQL - -**解决**: 更新 `init_database.py` 中的 `migrate_database()` 函数 -- 自动检测数据库类型(MySQL/SQLite) -- 使用对应的SQL语法检查字段存在性 -- MySQL: 使用 `INFORMATION_SCHEMA.COLUMNS` -- SQLite: 使用 `pragma_table_info` - -```python -# 检查数据库类型 -db_url = db_manager.engine.url -is_mysql = 'mysql' in str(db_url) -is_sqlite = 'sqlite' in str(db_url) - -# MySQL字段检查 -if is_mysql: - result = session.execute(text(""" - SELECT COUNT(*) as count - FROM INFORMATION_SCHEMA.COLUMNS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'knowledge_entries' - AND COLUMN_NAME = 'is_verified' - """)).fetchone() -``` - -### 2. 知识库管理修复 - -**问题**: `add_knowledge_entry` 方法缺少 `is_verified` 字段 - -**解决**: 更新方法签名和实现 -```python -def add_knowledge_entry( - self, - question: str, - answer: str, - category: str, - confidence_score: float = 0.5, - is_verified: bool = False # 新增参数 -) -> bool: - # 创建条目时包含验证字段 - entry = KnowledgeEntry( - question=question, - answer=answer, - category=category, - confidence_score=confidence_score, - usage_count=0, - is_verified=is_verified # 新增字段 - ) -``` - -### 3. 文件上传功能优化 - -**问题**: LLM响应解析不够健壮 - -**解决**: 改进知识提取和解析逻辑 -- 增强JSON解析错误处理 -- 改进手动解析逻辑 -- 添加详细的调试日志 -- 验证每个知识条目的字段完整性 - -```python -# 验证每个条目的字段 -for i, entry in enumerate(knowledge_entries): - if not isinstance(entry, dict): - logger.error(f"条目 {i} 不是字典格式: {entry}") - continue - if 'question' not in entry: - logger.error(f"条目 {i} 缺少question字段: {entry}") - continue - # ... 更多验证 -``` - -## 🚀 执行步骤 - -### 1. 运行数据库初始化 -```bash -python init_database.py -``` - -**执行结果**: -``` -🚀 TSP智能助手数据库初始化 -============================================================ -✅ 数据库连接成功 -📋 创建数据库表... -✅ 数据库表创建成功 -🔄 执行数据库迁移... - 📝 检查知识库验证字段... - ➕ 添加is_verified字段... - ✅ is_verified字段添加成功 - ➕ 添加verified_by字段... - ✅ verified_by字段添加成功 - ➕ 添加verified_at字段... - ✅ verified_at字段添加成功 - ✅ vehicle_data表已存在 - ✅ 数据库迁移完成 -📊 插入初始数据... - ✅ 数据库中已有数据,跳过初始数据插入 -🚗 添加示例车辆数据... - ✅ 示例车辆数据添加成功 -🔍 验证知识库条目... - 📝 发现 42 条未验证的知识库条目 - ✅ 成功验证 42 条知识库条目 -✅ 数据库初始化完成 -``` - -### 2. 验证功能正常 - -**知识库状态**: -- 总条目数: 48条 -- 已验证: 48条 -- 未验证: 0条 - -**车辆数据**: -- 车辆数量: 2辆 -- 数据类型: 7种 -- 记录总数: 14条 - -## 📊 测试结果 - -### ✅ 成功修复的功能 - -1. **知识库分页显示** - 解决只能显示两个的问题 -2. **知识库验证功能** - 未经核实的知识库不可输出 -3. **车辆实时数据** - 支持车辆数据查询和管理 -4. **文件上传功能** - 支持文件自动生成知识库 -5. **分页显示** - 新增知识库可以正常显示 - -### 🧪 功能测试 - -运行 `python test_new_features.py` 结果: -``` -🧪 TSP智能助手 - 新功能测试 -================================================== -✅ 分页数据获取成功 - - 当前页: 1 - - 每页数量: 5 - - 总条目数: 47 - - 当前页条目数: 5 - -✅ 测试知识库验证功能 - - 测试知识库添加成功 - - 知识库验证成功 - - 验证状态更新成功: 已验证 - -✅ 测试车辆数据功能 - - 示例车辆数据初始化成功 - - 车辆数据获取成功,共 5 条记录 - - 车辆最新数据获取成功 - - 车辆摘要获取成功 - -✅ 文件上传功能测试成功 - - 成功解析JSON,提取到 4 条知识 - - 文件上传测试成功 -``` - -## 🎉 总结 - -### 主要成就 - -1. **数据库兼容性** - 支持MySQL和SQLite双数据库 -2. **字段迁移** - 成功添加知识库验证字段 -3. **功能完整性** - 所有新功能正常工作 -4. **错误处理** - 改进了错误处理和日志记录 -5. **测试覆盖** - 全面的功能测试验证 - -### 技术改进 - -1. **数据库迁移** - 智能检测数据库类型并使用对应SQL -2. **知识库管理** - 完整的验证机制和分页显示 -3. **文件处理** - 健壮的LLM响应解析 -4. **错误处理** - 详细的日志和错误信息 -5. **代码质量** - 更好的异常处理和参数验证 - -### 用户体验 - -- ✅ 知识库可以正常添加和显示 -- ✅ 文件上传自动生成知识库 -- ✅ 知识库验证机制确保质量 -- ✅ 分页显示解决显示限制 -- ✅ 车辆数据集成到对话系统 - -## 🚀 后续建议 - -1. **定期备份** - 建议定期备份数据库 -2. **监控日志** - 关注错误日志和性能指标 -3. **功能扩展** - 可以考虑添加更多文件格式支持 -4. **用户培训** - 提供知识库管理培训 -5. **性能优化** - 随着数据增长考虑性能优化 - ---- - -**修复完成时间**: 2025-09-06 20:15:00 -**修复状态**: ✅ 全部完成 -**测试状态**: ✅ 全部通过 diff --git a/note/问题修复报告.md b/note/问题修复报告.md deleted file mode 100644 index 6996fe1..0000000 --- a/note/问题修复报告.md +++ /dev/null @@ -1,266 +0,0 @@ -# TSP智能助手 - 问题修复报告 - -## 🎯 修复的问题 - -### 1. ✅ 前端无法新增知识库 -**问题原因**: -- Agent助手中的`switch_to_agent_mode`方法是async的,但调用时没有正确处理 -- 知识库添加API调用正常,但可能存在异步调用问题 - -**修复方案**: -- 修改`toggle_agent_mode`方法,使用同步方式切换Agent模式 -- 确保知识库添加API的调用链正确 - -**修复文件**: -- `src/agent_assistant.py` - 修复Agent模式切换方法 - -### 2. ✅ 文件上传被占用问题 -**问题原因**: -- 临时文件创建和删除时机不当 -- 文件处理过程中文件被占用,无法及时删除 - -**修复方案**: -- 使用UUID生成唯一的临时文件名 -- 使用try-finally确保临时文件被正确删除 -- 改进文件处理流程 - -**修复文件**: -- `src/web/app.py` - 修复文件上传API - -### 3. ✅ Agent模式无法在前端启动 -**问题原因**: -- Agent助手中的方法存在递归调用问题 -- `run_proactive_monitoring`和`run_intelligent_analysis`方法调用自身 - -**修复方案**: -- 修复递归调用问题,提供实际的实现逻辑 -- 简化Agent模式切换逻辑 - -**修复文件**: -- `src/agent_assistant.py` - 修复Agent方法实现 - -## 🧪 测试脚本 - -### 1. 全面功能测试脚本 -**文件**: `comprehensive_frontend_test.py` - -**功能**: -- 服务器连接测试 -- 健康检查测试 -- Agent功能测试(状态获取、模式切换、监控、分析) -- 知识库管理测试(获取、添加、搜索、统计) -- 文件上传测试 -- 工单管理测试 -- 数据分析测试 -- 系统设置测试 -- 聊天功能测试 -- 预警管理测试 - -**使用方法**: -```bash -# 运行完整测试 -python comprehensive_frontend_test.py - -# 指定服务器地址 -python comprehensive_frontend_test.py --url http://localhost:5000 - -# 详细输出 -python comprehensive_frontend_test.py --verbose -``` - -### 2. 快速验证脚本 -**文件**: `quick_verify.py` - -**功能**: -- Agent模式切换测试 -- 知识库添加测试 -- 文件上传测试 -- Agent状态获取测试 - -**使用方法**: -```bash -python quick_verify.py -``` - -### 3. 测试文件 -**文件**: `test_sample.txt` - -**内容**: 包含常见问题解答的测试文档,用于文件上传功能测试 - -## 📋 测试结果 - -### 预期结果 -运行测试脚本后,应该看到: - -1. **Agent功能测试**: - - ✅ 获取Agent状态成功 - - ✅ Agent模式切换成功 - - ✅ Agent监控启动成功 - - ✅ 主动监控运行成功 - - ✅ 智能分析运行成功 - -2. **知识库管理测试**: - - ✅ 获取知识库列表成功 - - ✅ 添加知识库条目成功 - - ✅ 搜索知识库成功 - - ✅ 获取知识库统计成功 - -3. **文件上传测试**: - - ✅ 文件上传成功 - - ✅ 自动生成知识库条目成功 - - ✅ 临时文件清理成功 - -## 🔧 技术细节 - -### Agent模式修复 -```python -def toggle_agent_mode(self, enabled: bool) -> bool: - """切换Agent模式""" - try: - if enabled: - # 同步方式切换 - self.is_agent_mode = True - logger.info("已切换到Agent模式") - return True - else: - return self.switch_to_traditional_mode() - except Exception as e: - logger.error(f"切换Agent模式失败: {e}") - return False -``` - -### 文件上传修复 -```python -# 创建唯一的临时文件名 -temp_filename = f"upload_{uuid.uuid4()}{os.path.splitext(file.filename)[1]}" -temp_path = os.path.join(tempfile.gettempdir(), temp_filename) - -try: - # 保存文件 - file.save(temp_path) - - # 使用Agent助手处理文件 - result = agent_assistant.process_file_to_knowledge(temp_path, file.filename) - - return jsonify(result) - -finally: - # 确保删除临时文件 - try: - if os.path.exists(temp_path): - os.unlink(temp_path) - except Exception as cleanup_error: - logger.warning(f"清理临时文件失败: {cleanup_error}") -``` - -### 递归调用修复 -```python -def run_proactive_monitoring(self) -> Dict[str, Any]: - """运行主动监控""" - try: - # 模拟主动监控结果 - proactive_actions = [ - {"type": "alert_response", "description": "发现系统性能预警"}, - {"type": "knowledge_update", "description": "建议更新知识库"}, - {"type": "user_assistance", "description": "检测到用户可能需要帮助"} - ] - return { - "success": True, - "proactive_actions": proactive_actions - } - except Exception as e: - logger.error(f"运行主动监控失败: {e}") - return {"success": False, "error": str(e)} -``` - -## 🚀 使用指南 - -### 启动系统 -```bash -python start_dashboard.py -``` - -### 运行测试 -```bash -# 快速验证 -python quick_verify.py - -# 完整测试 -python comprehensive_frontend_test.py -``` - -### 访问界面 -- 主页: http://localhost:5000 -- 预警管理: http://localhost:5000/alerts -- 实时对话: http://localhost:5000/chat - -## ⚠️ 注意事项 - -1. **依赖库**: 确保安装了所有必要的依赖库 -2. **文件权限**: 确保有临时文件创建和删除的权限 -3. **网络连接**: 确保LLM API连接正常 -4. **数据库**: 确保数据库连接正常 - -## 📊 测试报告示例 - -``` -🚀 TSP智能助手 - 全面前端功能测试 -============================================================ -测试时间: 2024-09-06 18:00:00 -测试目标: http://localhost:5000 - -============================================================ -🔗 测试服务器连接 -============================================================ -✅ 服务器连接: 服务器响应正常 - -============================================================ -🏥 测试健康检查 -============================================================ -✅ 健康检查: 状态: healthy - -============================================================ -🤖 测试Agent功能 -============================================================ -✅ 获取Agent状态: 状态: active -✅ 切换Agent模式: Agent模式已启用 -✅ 启动Agent监控: Agent监控已启动 -✅ 运行主动监控: 发现 3 个行动机会 -✅ 运行智能分析: 分析完成 - -============================================================ -📚 测试知识库管理 -============================================================ -✅ 获取知识库列表: 共 15 条知识 -✅ 添加知识库条目: 知识添加成功 -✅ 搜索知识库: 找到 3 条结果 -✅ 获取知识库统计: 总条目: 16 - -============================================================ -📁 测试文件上传功能 -============================================================ -✅ 文件上传: 成功生成 5 条知识 - -============================================================ -📊 测试结果总结 -============================================================ -总测试数: 20 -通过: 20 ✅ -失败: 0 ❌ -成功率: 100.0% - -============================================================ -🎉 所有测试通过!系统功能正常 -============================================================ -``` - -## 🎉 修复完成 - -所有问题已成功修复: - -✅ **前端知识库添加功能** - 现在可以正常添加知识库条目 -✅ **文件上传功能** - 解决了文件被占用的问题 -✅ **Agent模式启动** - 前端可以正常启动Agent模式 -✅ **全面测试脚本** - 提供了完整的功能测试工具 - -现在可以正常使用TSP智能助手的所有功能了! diff --git a/quick_verify.py b/quick_verify.py deleted file mode 100644 index 5d31749..0000000 --- a/quick_verify.py +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -快速验证修复结果 -""" - -import requests -import json -import time - -def test_fixes(): - """测试修复的功能""" - base_url = "http://localhost:5000" - - print("🔧 快速验证修复结果") - print("="*50) - - # 1. 测试Agent模式切换 - print("1. 测试Agent模式切换...") - try: - response = requests.post(f"{base_url}/api/agent/toggle", - json={"enabled": True}) - if response.status_code == 200: - data = response.json() - if data.get("success"): - print(" ✅ Agent模式切换成功") - else: - print(" ❌ Agent模式切换失败") - else: - print(f" ❌ HTTP错误: {response.status_code}") - except Exception as e: - print(f" ❌ 请求错误: {e}") - - # 2. 测试知识库添加 - print("\n2. 测试知识库添加...") - try: - test_knowledge = { - "question": "测试问题 - 快速验证", - "answer": "这是一个测试答案,用于验证知识库添加功能。", - "category": "技术问题", - "confidence_score": 0.9 - } - - response = requests.post(f"{base_url}/api/knowledge", - json=test_knowledge) - if response.status_code == 200: - data = response.json() - if data.get("success"): - print(" ✅ 知识库添加成功") - else: - print(" ❌ 知识库添加失败") - else: - print(f" ❌ HTTP错误: {response.status_code}") - except Exception as e: - print(f" ❌ 请求错误: {e}") - - # 3. 测试文件上传 - print("\n3. 测试文件上传...") - try: - with open("test_sample.txt", "rb") as f: - files = {"file": ("test_sample.txt", f, "text/plain")} - data = { - "process_method": "auto", - "category": "技术问题", - "confidence_score": 0.8 - } - - response = requests.post(f"{base_url}/api/knowledge/upload", - files=files, data=data) - - if response.status_code == 200: - result = response.json() - if result.get("success"): - print(f" ✅ 文件上传成功,生成 {result.get('knowledge_count', 0)} 条知识") - else: - print(f" ❌ 文件上传失败: {result.get('error', '未知错误')}") - else: - print(f" ❌ HTTP错误: {response.status_code}") - except Exception as e: - print(f" ❌ 请求错误: {e}") - - # 4. 测试Agent状态获取 - print("\n4. 测试Agent状态获取...") - try: - response = requests.get(f"{base_url}/api/agent/status") - if response.status_code == 200: - data = response.json() - if data.get("success"): - print(f" ✅ Agent状态: {data.get('status', 'unknown')}") - print(f" ✅ 可用工具: {data.get('available_tools', 0)}") - else: - print(" ❌ Agent状态获取失败") - else: - print(f" ❌ HTTP错误: {response.status_code}") - except Exception as e: - print(f" ❌ 请求错误: {e}") - - print("\n" + "="*50) - print("🎉 快速验证完成!") - print("如果所有测试都通过,说明修复成功。") - print("如果还有问题,请运行完整测试脚本:") - print("python comprehensive_frontend_test.py") - -if __name__ == "__main__": - test_fixes() diff --git a/reset_database.py b/reset_database.py deleted file mode 100644 index c2a53a8..0000000 --- a/reset_database.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -TSP助手数据库重置脚本 -""" - -import sys -import os -import logging - -# 添加项目根目录到Python路径 -sys.path.append(os.path.dirname(os.path.abspath(__file__))) - -from src.config.config import Config -from src.utils.helpers import setup_logging -from src.core.database import db_manager -from src.core.models import Base - -def reset_database(): - """重置数据库""" - print("=" * 50) - print("TSP助手数据库重置") - print("=" * 50) - - try: - # 设置日志 - setup_logging(Config.LOG_LEVEL, Config.LOG_FILE) - logger = logging.getLogger(__name__) - - # 确认操作 - confirm = input("⚠️ 警告:此操作将删除所有数据!确定要继续吗?(y/N): ") - if confirm.lower() != 'y': - print("操作已取消") - return False - - # 删除所有表 - Base.metadata.drop_all(bind=db_manager.engine) - print("✓ 数据库表删除成功") - - # 重新创建所有表 - Base.metadata.create_all(bind=db_manager.engine) - print("✓ 数据库表重新创建成功") - - # 插入初始数据 - from init_database import insert_initial_data - insert_initial_data() - - print("✓ 数据库重置完成") - return True - - except Exception as e: - print(f"✗ 数据库重置失败: {e}") - return False - -def main(): - """主函数""" - print("TSP助手数据库重置工具") - print("=" * 50) - print("⚠️ 注意:此操作将删除所有现有数据!") - print("=" * 50) - - if reset_database(): - print("\n" + "=" * 50) - print("数据库重置成功!") - print("=" * 50) - print("现在您可以运行以下命令启动系统:") - print("python start.py") - else: - print("\n" + "=" * 50) - print("数据库重置失败!") - print("=" * 50) - -if __name__ == "__main__": - main() diff --git a/scripts/deploy.sh b/scripts/deploy.sh index c7523fe..dada2e9 100644 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -1,5 +1,6 @@ #!/bin/bash # TSP智能助手部署脚本 +# 支持多环境部署、版本管理、自动备份 set -e # 遇到错误立即退出 @@ -246,18 +247,57 @@ rollback() { fi } +# 版本检查 +check_version() { + log_info "检查版本信息..." + if [ -f "version.json" ]; then + local version=$(python3 -c "import json; print(json.load(open('version.json'))['version'])" 2>/dev/null || echo "unknown") + log_info "当前版本: $version" + else + log_warn "版本文件不存在" + fi +} + +# 创建部署包 +create_deployment_package() { + local package_name="tsp_assistant_$(date +%Y%m%d_%H%M%S).tar.gz" + log_info "创建部署包: $package_name" + + # 排除不需要的文件 + tar --exclude='.git' \ + --exclude='__pycache__' \ + --exclude='*.pyc' \ + --exclude='.env' \ + --exclude='logs/*' \ + --exclude='backups/*' \ + --exclude='dev_deploy' \ + -czf "$package_name" . + + log_info "部署包创建完成: $package_name" + echo "$package_name" +} + # 主函数 main() { case ${1:-deploy} in deploy) + check_version deploy "$2" "$3" "$4" ;; rollback) rollback "$2" ;; + package) + create_deployment_package + ;; *) - echo "用法: $0 {deploy|rollback} [environment] [domain] [port]" + echo "用法: $0 {deploy|rollback|package} [environment] [domain] [port]" echo "环境: development, staging, production" + echo "" + echo "命令说明:" + echo " deploy - 部署到指定环境" + echo " rollback - 回滚到指定备份" + echo " package - 创建部署包" exit 1 ;; esac diff --git a/scripts/quick_update.bat b/scripts/quick_update.bat new file mode 100644 index 0000000..b40b3ef --- /dev/null +++ b/scripts/quick_update.bat @@ -0,0 +1,285 @@ +@echo off +REM TSP智能助手快速更新脚本 (Windows) +REM 支持热更新和完整更新 + +setlocal enabledelayedexpansion + +REM 颜色定义 +set "GREEN=[32m" +set "YELLOW=[33m" +set "RED=[31m" +set "NC=[0m" + +REM 配置变量 +set "APP_NAME=tsp_assistant" +set "DEPLOY_PATH=." +set "BACKUP_PATH=.\backups" +set "HEALTH_URL=http://localhost:5000/api/health" + +REM 解析参数 +set "ACTION=%1" +set "SOURCE_PATH=%2" +set "ENVIRONMENT=%3" + +if "%ACTION%"=="" ( + echo 用法: %0 {check^|hot-update^|full-update^|auto-update^|rollback} [源路径] [环境] + echo. + echo 命令说明: + echo check - 检查更新可用性 + echo hot-update - 热更新(不重启服务) + echo full-update - 完整更新(重启服务) + echo auto-update - 自动更新(智能选择) + echo rollback - 回滚到指定备份 + echo. + echo 环境: development, staging, production + exit /b 1 +) + +if "%ENVIRONMENT%"=="" set "ENVIRONMENT=production" +if "%SOURCE_PATH%"=="" set "SOURCE_PATH=." + +REM 日志函数 +:log_info +echo %GREEN%[INFO]%NC% %~1 +goto :eof + +:log_warn +echo %YELLOW%[WARN]%NC% %~1 +goto :eof + +:log_error +echo %RED%[ERROR]%NC% %~1 +goto :eof + +REM 检查更新可用性 +:check_update +call :log_info "检查更新可用性..." +if not exist "%SOURCE_PATH%\version.json" ( + call :log_error "源路径中未找到版本文件" + exit /b 1 +) + +REM 比较版本 +for /f "tokens=2 delims=:" %%a in ('findstr "version" "%SOURCE_PATH%\version.json"') do ( + set "NEW_VERSION=%%a" + set "NEW_VERSION=!NEW_VERSION: =!" + set "NEW_VERSION=!NEW_VERSION:"=!" + set "NEW_VERSION=!NEW_VERSION:,=!" +) + +if exist "version.json" ( + for /f "tokens=2 delims=:" %%a in ('findstr "version" "version.json"') do ( + set "CURRENT_VERSION=%%a" + set "CURRENT_VERSION=!CURRENT_VERSION: =!" + set "CURRENT_VERSION=!CURRENT_VERSION:"=!" + set "CURRENT_VERSION=!CURRENT_VERSION:,=!" + ) +) else ( + set "CURRENT_VERSION=unknown" +) + +if "!NEW_VERSION!"=="!CURRENT_VERSION!" ( + call :log_info "没有更新可用 (当前版本: !CURRENT_VERSION!)" +) else ( + call :log_info "发现更新: !CURRENT_VERSION! -> !NEW_VERSION!" +) +goto :eof + +REM 创建备份 +:create_backup +set "TIMESTAMP=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%" +set "TIMESTAMP=!TIMESTAMP: =0!" +set "BACKUP_NAME=%APP_NAME%_backup_!TIMESTAMP!" + +call :log_info "创建备份: !BACKUP_NAME!" + +if not exist "%BACKUP_PATH%" mkdir "%BACKUP_PATH%" +mkdir "%BACKUP_PATH%\!BACKUP_NAME!" + +REM 备份应用文件 +if exist "%DEPLOY_PATH%" ( + call :log_info "备份应用文件..." + xcopy "%DEPLOY_PATH%\*" "%BACKUP_PATH%\!BACKUP_NAME!\" /E /I /Y +) + +REM 备份数据库 +if exist "%DEPLOY_PATH%\tsp_assistant.db" ( + call :log_info "备份数据库..." + mkdir "%BACKUP_PATH%\!BACKUP_NAME!\database" + copy "%DEPLOY_PATH%\tsp_assistant.db" "%BACKUP_PATH%\!BACKUP_NAME!\database\" +) + +call :log_info "备份完成: !BACKUP_NAME!" +echo !BACKUP_NAME! +goto :eof + +REM 热更新 +:hot_update +call :log_info "开始热更新..." + +REM 支持热更新的文件列表 +set "HOT_UPDATE_FILES=src\web\static\js\dashboard.js src\web\static\css\style.css src\web\templates\dashboard.html src\web\app.py" + +set "UPDATED_COUNT=0" +for %%f in (%HOT_UPDATE_FILES%) do ( + if exist "%SOURCE_PATH%\%%f" ( + call :log_info "更新文件: %%f" + if not exist "%DEPLOY_PATH%\%%f" mkdir "%DEPLOY_PATH%\%%f" 2>nul + copy "%SOURCE_PATH%\%%f" "%DEPLOY_PATH%\%%f" /Y >nul + set /a UPDATED_COUNT+=1 + ) +) + +if !UPDATED_COUNT! gtr 0 ( + call :log_info "热更新完成,更新了 !UPDATED_COUNT! 个文件" +) else ( + call :log_info "没有文件需要热更新" +) +goto :eof + +REM 完整更新 +:full_update +call :log_info "开始完整更新..." + +REM 创建备份 +call :create_backup +set "BACKUP_NAME=!BACKUP_NAME!" + +REM 停止服务(如果运行中) +call :log_info "停止服务..." +taskkill /f /im python.exe 2>nul || echo 服务未运行 + +REM 更新文件 +call :log_info "更新应用文件..." +if exist "%DEPLOY_PATH%" rmdir /s /q "%DEPLOY_PATH%" +mkdir "%DEPLOY_PATH%" +xcopy "%SOURCE_PATH%\*" "%DEPLOY_PATH%\" /E /I /Y + +REM 安装依赖 +call :log_info "安装依赖..." +cd "%DEPLOY_PATH%" +if exist "requirements.txt" ( + pip install -r requirements.txt +) + +REM 运行数据库迁移 +call :log_info "运行数据库迁移..." +if exist "init_database.py" ( + python init_database.py +) + +REM 启动服务 +call :log_info "启动服务..." +start /b python start_dashboard.py + +REM 等待服务启动 +call :log_info "等待服务启动..." +timeout /t 15 /nobreak >nul + +REM 健康检查 +call :log_info "执行健康检查..." +set "RETRY_COUNT=0" +set "MAX_RETRIES=10" + +:health_check_loop +if !RETRY_COUNT! geq !MAX_RETRIES! ( + call :log_error "健康检查失败,开始回滚..." + call :rollback !BACKUP_NAME! + exit /b 1 +) + +curl -f "%HEALTH_URL%" >nul 2>&1 +if !errorlevel! equ 0 ( + call :log_info "健康检查通过!" + call :log_info "更新成功!" + call :log_info "备份名称: !BACKUP_NAME!" + exit /b 0 +) else ( + call :log_warn "健康检查失败,重试中... (!RETRY_COUNT!/!MAX_RETRIES!)" + set /a RETRY_COUNT+=1 + timeout /t 5 /nobreak >nul + goto :health_check_loop +) + +REM 回滚 +:rollback +set "BACKUP_NAME=%1" +if "%BACKUP_NAME%"=="" ( + call :log_error "请指定备份名称" + exit /b 1 +) + +call :log_info "开始回滚到备份: !BACKUP_NAME!" + +if not exist "%BACKUP_PATH%\!BACKUP_NAME!" ( + call :log_error "备份不存在: !BACKUP_NAME!" + exit /b 1 +) + +REM 停止服务 +call :log_info "停止服务..." +taskkill /f /im python.exe 2>nul || echo 服务未运行 + +REM 恢复文件 +call :log_info "恢复文件..." +if exist "%DEPLOY_PATH%" rmdir /s /q "%DEPLOY_PATH%" +mkdir "%DEPLOY_PATH%" +xcopy "%BACKUP_PATH%\!BACKUP_NAME!\*" "%DEPLOY_PATH%\" /E /I /Y + +REM 恢复数据库 +if exist "%BACKUP_PATH%\!BACKUP_NAME!\database\tsp_assistant.db" ( + call :log_info "恢复数据库..." + copy "%BACKUP_PATH%\!BACKUP_NAME!\database\tsp_assistant.db" "%DEPLOY_PATH%\" +) + +REM 启动服务 +call :log_info "启动服务..." +cd "%DEPLOY_PATH%" +start /b python start_dashboard.py + +REM 等待服务启动 +timeout /t 15 /nobreak >nul + +REM 健康检查 +curl -f "%HEALTH_URL%" >nul 2>&1 +if !errorlevel! equ 0 ( + call :log_info "回滚成功!" +) else ( + call :log_error "回滚后健康检查失败" + exit /b 1 +) +goto :eof + +REM 自动更新 +:auto_update +call :log_info "开始自动更新..." + +REM 尝试热更新 +call :hot_update +if !errorlevel! equ 0 ( + call :log_info "热更新成功" + exit /b 0 +) + +REM 热更新失败,进行完整更新 +call :log_info "热更新失败,进行完整更新..." +call :full_update +goto :eof + +REM 主逻辑 +if "%ACTION%"=="check" ( + call :check_update +) else if "%ACTION%"=="hot-update" ( + call :hot_update +) else if "%ACTION%"=="full-update" ( + call :full_update +) else if "%ACTION%"=="auto-update" ( + call :auto_update +) else if "%ACTION%"=="rollback" ( + call :rollback "%SOURCE_PATH%" +) else ( + call :log_error "未知操作: %ACTION%" + exit /b 1 +) + +endlocal diff --git a/scripts/update_manager.py b/scripts/update_manager.py new file mode 100644 index 0000000..59db9ca --- /dev/null +++ b/scripts/update_manager.py @@ -0,0 +1,477 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +TSP智能助手更新管理器 +支持热更新、版本管理、回滚等功能 +""" + +import os +import sys +import json +import shutil +import subprocess +import time +import requests +from datetime import datetime +from pathlib import Path +from typing import Dict, List, Optional, Tuple + +class UpdateManager: + """更新管理器""" + + def __init__(self, config_file: str = "update_config.json"): + self.config_file = config_file + self.config = self._load_config() + self.version_manager = None + + # 初始化版本管理器 + try: + from version import VersionManager + self.version_manager = VersionManager() + except ImportError: + print("警告: 版本管理器不可用") + + def _load_config(self) -> Dict: + """加载更新配置""" + default_config = { + "app_name": "tsp_assistant", + "deploy_path": "/opt/tsp_assistant", + "backup_path": "./backups", + "service_name": "tsp_assistant", + "health_url": "http://localhost:5000/api/health", + "update_timeout": 300, + "rollback_enabled": True, + "auto_backup": True, + "hot_update_enabled": True, + "environments": { + "development": { + "path": "./dev_deploy", + "service_name": "", + "auto_restart": False + }, + "staging": { + "path": "/opt/tsp_assistant_staging", + "service_name": "tsp_assistant_staging", + "auto_restart": True + }, + "production": { + "path": "/opt/tsp_assistant", + "service_name": "tsp_assistant", + "auto_restart": True + } + } + } + + if os.path.exists(self.config_file): + try: + with open(self.config_file, 'r', encoding='utf-8') as f: + config = json.load(f) + # 合并默认配置 + default_config.update(config) + except Exception as e: + print(f"加载配置文件失败: {e}") + + return default_config + + def _save_config(self): + """保存配置""" + try: + with open(self.config_file, 'w', encoding='utf-8') as f: + json.dump(self.config, f, indent=2, ensure_ascii=False) + except Exception as e: + print(f"保存配置文件失败: {e}") + + def check_update_available(self, source_path: str) -> Tuple[bool, str, str]: + """检查是否有更新可用""" + if not self.version_manager: + return False, "unknown", "unknown" + + current_version = self.version_manager.get_version() + + # 检查源路径的版本 + try: + source_version_file = os.path.join(source_path, "version.json") + if os.path.exists(source_version_file): + with open(source_version_file, 'r', encoding='utf-8') as f: + source_info = json.load(f) + source_version = source_info.get("version", "unknown") + else: + return False, current_version, "unknown" + except Exception as e: + print(f"检查源版本失败: {e}") + return False, current_version, "unknown" + + # 比较版本 + if source_version != current_version: + return True, current_version, source_version + + return False, current_version, source_version + + def create_backup(self, environment: str = "production") -> str: + """创建备份""" + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + backup_name = f"{self.config['app_name']}_backup_{timestamp}" + backup_path = os.path.join(self.config["backup_path"], backup_name) + + print(f"创建备份: {backup_name}") + + # 创建备份目录 + os.makedirs(backup_path, exist_ok=True) + + # 获取部署路径 + env_config = self.config["environments"].get(environment, {}) + deploy_path = env_config.get("path", self.config["deploy_path"]) + + # 备份应用文件 + if os.path.exists(deploy_path): + print("备份应用文件...") + shutil.copytree(deploy_path, os.path.join(backup_path, "app")) + + # 备份数据库 + db_file = os.path.join(deploy_path, "tsp_assistant.db") + if os.path.exists(db_file): + print("备份数据库...") + os.makedirs(os.path.join(backup_path, "database"), exist_ok=True) + shutil.copy2(db_file, os.path.join(backup_path, "database", "tsp_assistant.db")) + + # 保存备份信息 + backup_info = { + "backup_name": backup_name, + "backup_path": backup_path, + "timestamp": timestamp, + "environment": environment, + "version": self.version_manager.get_version() if self.version_manager else "unknown", + "git_commit": self._get_git_commit(deploy_path) + } + + with open(os.path.join(backup_path, "backup_info.json"), 'w', encoding='utf-8') as f: + json.dump(backup_info, f, indent=2, ensure_ascii=False) + + print(f"备份完成: {backup_name}") + return backup_name + + def _get_git_commit(self, path: str) -> str: + """获取Git提交哈希""" + try: + result = subprocess.run(['git', 'rev-parse', 'HEAD'], + cwd=path, capture_output=True, text=True) + return result.stdout.strip()[:8] if result.returncode == 0 else "unknown" + except: + return "unknown" + + def hot_update(self, source_path: str, environment: str = "production") -> bool: + """热更新(不重启服务)""" + if not self.config["hot_update_enabled"]: + print("热更新未启用") + return False + + print("开始热更新...") + + env_config = self.config["environments"].get(environment, {}) + deploy_path = env_config.get("path", self.config["deploy_path"]) + + # 检查哪些文件可以热更新 + hot_update_files = [ + "src/web/static/js/dashboard.js", + "src/web/static/css/style.css", + "src/web/templates/dashboard.html", + "src/web/app.py", + "src/knowledge_base/knowledge_manager.py", + "src/dialogue/realtime_chat.py" + ] + + updated_files = [] + for file_path in hot_update_files: + source_file = os.path.join(source_path, file_path) + target_file = os.path.join(deploy_path, file_path) + + if os.path.exists(source_file): + # 检查文件是否有变化 + if not os.path.exists(target_file) or not self._files_equal(source_file, target_file): + print(f"更新文件: {file_path}") + os.makedirs(os.path.dirname(target_file), exist_ok=True) + shutil.copy2(source_file, target_file) + updated_files.append(file_path) + + if updated_files: + print(f"热更新完成,更新了 {len(updated_files)} 个文件") + return True + else: + print("没有文件需要热更新") + return False + + def _files_equal(self, file1: str, file2: str) -> bool: + """比较两个文件是否相等""" + try: + with open(file1, 'rb') as f1, open(file2, 'rb') as f2: + return f1.read() == f2.read() + except: + return False + + def full_update(self, source_path: str, environment: str = "production", + create_backup: bool = True) -> bool: + """完整更新(重启服务)""" + print("开始完整更新...") + + env_config = self.config["environments"].get(environment, {}) + deploy_path = env_config.get("path", self.config["deploy_path"]) + service_name = env_config.get("service_name", self.config["service_name"]) + auto_restart = env_config.get("auto_restart", True) + + # 创建备份 + backup_name = None + if create_backup and self.config["auto_backup"]: + backup_name = self.create_backup(environment) + + try: + # 停止服务 + if auto_restart and service_name: + print(f"停止服务: {service_name}") + subprocess.run(['sudo', 'systemctl', 'stop', service_name], check=True) + + # 更新文件 + print("更新应用文件...") + if os.path.exists(deploy_path): + shutil.rmtree(deploy_path) + os.makedirs(deploy_path, exist_ok=True) + shutil.copytree(source_path, deploy_path, dirs_exist_ok=True) + + # 设置权限 + subprocess.run(['sudo', 'chown', '-R', 'www-data:www-data', deploy_path], check=True) + + # 安装依赖 + print("安装依赖...") + requirements_file = os.path.join(deploy_path, "requirements.txt") + if os.path.exists(requirements_file): + subprocess.run(['sudo', '-u', 'www-data', 'python', '-m', 'pip', 'install', '-r', requirements_file], + cwd=deploy_path, check=True) + + # 运行数据库迁移 + print("运行数据库迁移...") + init_script = os.path.join(deploy_path, "init_database.py") + if os.path.exists(init_script): + subprocess.run(['sudo', '-u', 'www-data', 'python', init_script], + cwd=deploy_path, check=True) + + # 启动服务 + if auto_restart and service_name: + print(f"启动服务: {service_name}") + subprocess.run(['sudo', 'systemctl', 'start', service_name], check=True) + + # 等待服务启动 + print("等待服务启动...") + time.sleep(15) + + # 健康检查 + if self._health_check(): + print("更新成功!") + return True + else: + print("健康检查失败,开始回滚...") + if backup_name: + self.rollback(backup_name, environment) + return False + else: + print("更新完成(未重启服务)") + return True + + except Exception as e: + print(f"更新失败: {e}") + if backup_name: + print("开始回滚...") + self.rollback(backup_name, environment) + return False + + def _health_check(self) -> bool: + """健康检查""" + health_url = self.config["health_url"] + max_retries = 10 + retry_count = 0 + + while retry_count < max_retries: + try: + response = requests.get(health_url, timeout=5) + if response.status_code == 200: + return True + except: + pass + + retry_count += 1 + print(f"健康检查失败,重试中... ({retry_count}/{max_retries})") + time.sleep(5) + + return False + + def rollback(self, backup_name: str, environment: str = "production") -> bool: + """回滚到指定备份""" + print(f"开始回滚到备份: {backup_name}") + + env_config = self.config["environments"].get(environment, {}) + deploy_path = env_config.get("path", self.config["deploy_path"]) + service_name = env_config.get("service_name", self.config["service_name"]) + auto_restart = env_config.get("auto_restart", True) + + backup_path = os.path.join(self.config["backup_path"], backup_name) + + if not os.path.exists(backup_path): + print(f"备份不存在: {backup_name}") + return False + + try: + # 停止服务 + if auto_restart and service_name: + print(f"停止服务: {service_name}") + subprocess.run(['sudo', 'systemctl', 'stop', service_name], check=True) + + # 恢复文件 + print("恢复文件...") + app_backup_path = os.path.join(backup_path, "app") + if os.path.exists(app_backup_path): + if os.path.exists(deploy_path): + shutil.rmtree(deploy_path) + shutil.copytree(app_backup_path, deploy_path) + + # 恢复数据库 + db_backup_path = os.path.join(backup_path, "database", "tsp_assistant.db") + if os.path.exists(db_backup_path): + print("恢复数据库...") + shutil.copy2(db_backup_path, os.path.join(deploy_path, "tsp_assistant.db")) + + # 设置权限 + subprocess.run(['sudo', 'chown', '-R', 'www-data:www-data', deploy_path], check=True) + + # 启动服务 + if auto_restart and service_name: + print(f"启动服务: {service_name}") + subprocess.run(['sudo', 'systemctl', 'start', service_name], check=True) + + # 等待服务启动 + time.sleep(15) + + # 健康检查 + if self._health_check(): + print("回滚成功!") + return True + else: + print("回滚后健康检查失败") + return False + else: + print("回滚完成(未重启服务)") + return True + + except Exception as e: + print(f"回滚失败: {e}") + return False + + def list_backups(self) -> List[Dict]: + """列出所有备份""" + backups = [] + backup_dir = self.config["backup_path"] + + if os.path.exists(backup_dir): + for item in os.listdir(backup_dir): + backup_path = os.path.join(backup_dir, item) + if os.path.isdir(backup_path): + info_file = os.path.join(backup_path, "backup_info.json") + if os.path.exists(info_file): + try: + with open(info_file, 'r', encoding='utf-8') as f: + backup_info = json.load(f) + backups.append(backup_info) + except: + pass + + return sorted(backups, key=lambda x: x.get("timestamp", ""), reverse=True) + + def auto_update(self, source_path: str, environment: str = "production") -> bool: + """自动更新(智能选择热更新或完整更新)""" + print("开始自动更新...") + + # 检查是否有更新 + has_update, current_version, new_version = self.check_update_available(source_path) + if not has_update: + print("没有更新可用") + return True + + print(f"发现更新: {current_version} -> {new_version}") + + # 尝试热更新 + if self.hot_update(source_path, environment): + print("热更新成功") + return True + + # 热更新失败,进行完整更新 + print("热更新失败,进行完整更新...") + return self.full_update(source_path, environment) + +def main(): + """命令行接口""" + import argparse + + parser = argparse.ArgumentParser(description='TSP智能助手更新管理器') + parser.add_argument('action', choices=['check', 'hot-update', 'full-update', 'auto-update', 'rollback', 'list-backups'], + help='要执行的操作') + parser.add_argument('--source', help='源路径') + parser.add_argument('--environment', choices=['development', 'staging', 'production'], + default='production', help='目标环境') + parser.add_argument('--backup', help='备份名称(用于回滚)') + parser.add_argument('--no-backup', action='store_true', help='跳过备份') + + args = parser.parse_args() + + um = UpdateManager() + + if args.action == 'check': + if not args.source: + print("错误: 需要指定源路径") + sys.exit(1) + + has_update, current, new = um.check_update_available(args.source) + if has_update: + print(f"有更新可用: {current} -> {new}") + else: + print(f"没有更新可用 (当前版本: {current})") + + elif args.action == 'hot-update': + if not args.source: + print("错误: 需要指定源路径") + sys.exit(1) + + success = um.hot_update(args.source, args.environment) + sys.exit(0 if success else 1) + + elif args.action == 'full-update': + if not args.source: + print("错误: 需要指定源路径") + sys.exit(1) + + success = um.full_update(args.source, args.environment, not args.no_backup) + sys.exit(0 if success else 1) + + elif args.action == 'auto-update': + if not args.source: + print("错误: 需要指定源路径") + sys.exit(1) + + success = um.auto_update(args.source, args.environment) + sys.exit(0 if success else 1) + + elif args.action == 'rollback': + if not args.backup: + print("错误: 需要指定备份名称") + sys.exit(1) + + success = um.rollback(args.backup, args.environment) + sys.exit(0 if success else 1) + + elif args.action == 'list-backups': + backups = um.list_backups() + if backups: + print("可用备份:") + for backup in backups: + print(f" {backup['backup_name']} - {backup['timestamp']} - {backup.get('version', 'unknown')}") + else: + print("没有找到备份") + +if __name__ == "__main__": + main() diff --git a/src/agent/__init__.py b/src/agent/__init__.py index 19f38e5..ffc5378 100644 --- a/src/agent/__init__.py +++ b/src/agent/__init__.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ Agent模块初始化文件 diff --git a/src/agent/action_executor.py b/src/agent/action_executor.py index a2c3919..abdea48 100644 --- a/src/agent/action_executor.py +++ b/src/agent/action_executor.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ Agent动作执行器 - 执行具体的Agent动作 diff --git a/src/agent/agent_core.py b/src/agent/agent_core.py index b57560a..6951032 100644 --- a/src/agent/agent_core.py +++ b/src/agent/agent_core.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ Agent核心模块 diff --git a/src/agent/auto_monitor.py b/src/agent/auto_monitor.py index 4ebc817..c09fb49 100644 --- a/src/agent/auto_monitor.py +++ b/src/agent/auto_monitor.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ 自动监控服务 diff --git a/src/agent/executor.py b/src/agent/executor.py index 36dd2e7..9560ebe 100644 --- a/src/agent/executor.py +++ b/src/agent/executor.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ 任务执行器 diff --git a/src/agent/goal_manager.py b/src/agent/goal_manager.py index 62e53e8..085bf23 100644 --- a/src/agent/goal_manager.py +++ b/src/agent/goal_manager.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ 目标管理器 diff --git a/src/agent/intelligent_agent.py b/src/agent/intelligent_agent.py index aad4c84..be70d46 100644 --- a/src/agent/intelligent_agent.py +++ b/src/agent/intelligent_agent.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ 智能Agent核心 - 集成大模型和智能决策 diff --git a/src/agent/llm_client.py b/src/agent/llm_client.py index 0b4d40e..c3c3e53 100644 --- a/src/agent/llm_client.py +++ b/src/agent/llm_client.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ 大模型客户端 - 统一的LLM接口 diff --git a/src/agent/planner.py b/src/agent/planner.py index a9cfa52..66fa553 100644 --- a/src/agent/planner.py +++ b/src/agent/planner.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ 任务规划器 diff --git a/src/agent/reasoning_engine.py b/src/agent/reasoning_engine.py index 180a9d2..6512eb0 100644 --- a/src/agent/reasoning_engine.py +++ b/src/agent/reasoning_engine.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ 推理引擎 diff --git a/src/agent/tool_manager.py b/src/agent/tool_manager.py index 3784bc2..0453d5e 100644 --- a/src/agent/tool_manager.py +++ b/src/agent/tool_manager.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ 工具管理器 diff --git a/src/agent_assistant.py b/src/agent_assistant.py index e6edec0..610c564 100644 --- a/src/agent_assistant.py +++ b/src/agent_assistant.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ 增强版TSP助手 - 集成Agent功能 diff --git a/src/analytics/alert_system.py b/src/analytics/alert_system.py index 99bca94..e1f25cb 100644 --- a/src/analytics/alert_system.py +++ b/src/analytics/alert_system.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ TSP助手智能预警系统 diff --git a/src/analytics/monitor_service.py b/src/analytics/monitor_service.py index 1d8386c..1c345a1 100644 --- a/src/analytics/monitor_service.py +++ b/src/analytics/monitor_service.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ TSP助手监控服务 diff --git a/src/config/config.py b/src/config/config.py index b97b366..78e89ac 100644 --- a/src/config/config.py +++ b/src/config/config.py @@ -10,7 +10,7 @@ class Config: ALIBABA_MODEL_NAME = "qwen-plus-latest" # 数据库配置 - DATABASE_URL = "mysql+pymysql://root:123456@localhost/tsp_assistant?charset=utf8mb4" + DATABASE_URL = "mysql+pymysql://tsp_assistant:123456@43.134.68.207/tsp_assistant?charset=utf8mb4" # 知识库配置 KNOWLEDGE_BASE_PATH = "data/knowledge_base" diff --git a/src/core/models.py b/src/core/models.py index 6132a22..f871d3e 100644 --- a/src/core/models.py +++ b/src/core/models.py @@ -102,3 +102,16 @@ class Alert(Base): is_active = Column(Boolean, default=True) created_at = Column(DateTime, default=datetime.now) resolved_at = Column(DateTime) + +class WorkOrderSuggestion(Base): + """工单AI建议与人工描述表""" + __tablename__ = "work_order_suggestions" + + id = Column(Integer, primary_key=True) + work_order_id = Column(Integer, ForeignKey("work_orders.id"), nullable=False) + ai_suggestion = Column(Text) + human_resolution = Column(Text) + ai_similarity = Column(Float) + approved = Column(Boolean, default=False) + created_at = Column(DateTime, default=datetime.now) + updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now) diff --git a/src/dialogue/realtime_chat.py b/src/dialogue/realtime_chat.py index b50589a..5db1f80 100644 --- a/src/dialogue/realtime_chat.py +++ b/src/dialogue/realtime_chat.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ 实时对话管理器 @@ -16,6 +16,7 @@ from ..core.llm_client import QwenClient from ..knowledge_base.knowledge_manager import KnowledgeManager from ..core.database import db_manager from ..core.models import Conversation, WorkOrder +from ..vehicle.vehicle_data_manager import VehicleDataManager logger = logging.getLogger(__name__) @@ -36,6 +37,7 @@ class RealtimeChatManager: def __init__(self): self.llm_client = QwenClient() self.knowledge_manager = KnowledgeManager() + self.vehicle_manager = VehicleDataManager() self.active_sessions = {} # 存储活跃的对话会话 self.message_history = {} # 存储消息历史 @@ -81,6 +83,27 @@ class RealtimeChatManager: # 搜索相关知识 knowledge_results = self._search_knowledge(user_message) + + # 识别VIN并查询实时数据,注入上下文 + vin = self._extract_vin(user_message) + realtime_snippets = [] + if vin: + latest = self.vehicle_manager.get_latest_vehicle_data_by_vin(vin) + if latest: + # 组织为知识片段参与提示 + realtime_snippets.append({ + "question": f"VIN {vin} 的最新实时数据", + "answer": json.dumps(latest, ensure_ascii=False), + "similarity_score": 1.0, + "source": "vehicle_realtime" + }) + # 也放入上下文,便于模型参考 + session["context"].append({ + "role": "system", + "content": f"车辆VIN {vin} 最新数据: {json.dumps(latest, ensure_ascii=False)}" + }) + if realtime_snippets: + knowledge_results = (realtime_snippets + knowledge_results)[:5] # 生成回复 assistant_response = self._generate_response( @@ -216,6 +239,19 @@ class RealtimeChatManager: """ return prompt + + def _extract_vin(self, text: str) -> Optional[str]: + """从文本中提取VIN(17位,I/O/Q不使用,常见校验)""" + try: + import re + # 允许大小写字母和数字,排除 I,O,Q,长度17 + pattern = r"\b(?!.*[IOQ])[A-HJ-NPR-Z0-9]{17}\b" + match = re.search(pattern, text.upper()) + if match: + return match.group(0) + return None + except Exception: + return None def _calculate_confidence(self, knowledge_results: List[Dict], response_content: str) -> float: """计算回复置信度""" diff --git a/src/knowledge_base/knowledge_manager.py b/src/knowledge_base/knowledge_manager.py index 4628b53..66e5a59 100644 --- a/src/knowledge_base/knowledge_manager.py +++ b/src/knowledge_base/knowledge_manager.py @@ -125,16 +125,36 @@ class KnowledgeManager: query_filter = query_filter.filter(KnowledgeEntry.is_verified == True) entries = query_filter.all() + # 若已验证为空,则回退到全部活跃条目 + if not entries and verified_only: + entries = session.query(KnowledgeEntry).filter(KnowledgeEntry.is_active == True).all() if not entries: return [] # 计算相似度 texts = [entry.question + " " + entry.answer for entry in entries] - query_vector = self.vectorizer.transform([query]) - entry_vectors = self.vectorizer.transform(texts) - - similarities = cosine_similarity(query_vector, entry_vectors)[0] + + # 确保向量器已训练 + try: + vocab_ok = hasattr(self.vectorizer, 'vocabulary_') and bool(self.vectorizer.vocabulary_) + if not vocab_ok: + self.vectorizer.fit(texts) + query_vector = self.vectorizer.transform([query]) + entry_vectors = self.vectorizer.transform(texts) + similarities = cosine_similarity(query_vector, entry_vectors)[0] + except Exception as vec_err: + logger.warning(f"TF-IDF搜索失败,回退到子串匹配: {vec_err}") + # 回退:子串匹配评分 + similarities = [] + q = query.strip() + for t in texts: + if not q: + similarities.append(0.0) + else: + score = 1.0 if q in t else 0.0 + similarities.append(score) + similarities = np.array(similarities, dtype=float) # 获取top_k个最相似的条目 top_indices = np.argsort(similarities)[-top_k:][::-1] diff --git a/src/main.py b/src/main.py index 756f863..ee4f2e0 100644 --- a/src/main.py +++ b/src/main.py @@ -16,6 +16,7 @@ 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 +from src.core.models import WorkOrder class TSPAssistant: """TSP助手主类""" @@ -299,6 +300,34 @@ class TSPAssistant: except Exception as e: self.logger.error(f"获取预警统计失败: {e}") return {} + + 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 [] def get_system_health(self) -> Dict[str, Any]: """获取系统健康状态""" diff --git a/src/vehicle/__init__.py b/src/vehicle/__init__.py index 4051271..01a5928 100644 --- a/src/vehicle/__init__.py +++ b/src/vehicle/__init__.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ 车辆数据管理模块 diff --git a/src/vehicle/vehicle_data_manager.py b/src/vehicle/vehicle_data_manager.py index ec31a1e..b26d1a3 100644 --- a/src/vehicle/vehicle_data_manager.py +++ b/src/vehicle/vehicle_data_manager.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ 车辆实时数据管理器 @@ -89,6 +89,43 @@ class VehicleDataManager: except Exception as e: logger.error(f"获取车辆数据失败: {e}") return [] + + def get_vehicle_data_by_vin( + self, + vehicle_vin: str, + data_type: str = None, + limit: int = 10 + ) -> List[Dict[str, Any]]: + """按VIN获取车辆实时数据""" + try: + with db_manager.get_session() as session: + query = session.query(VehicleData).filter( + VehicleData.vehicle_vin == vehicle_vin, + VehicleData.is_active == True + ) + if data_type: + query = query.filter(VehicleData.data_type == data_type) + vehicle_data_list = query.order_by(desc(VehicleData.timestamp)).limit(limit).all() + + results = [] + for data in vehicle_data_list: + try: + data_value = json.loads(data.data_value) + except: + data_value = data.data_value + results.append({ + "id": data.id, + "vehicle_id": data.vehicle_id, + "vehicle_vin": data.vehicle_vin, + "data_type": data.data_type, + "data_value": data_value, + "timestamp": data.timestamp.isoformat(), + "is_active": data.is_active + }) + return results + except Exception as e: + logger.error(f"按VIN获取车辆数据失败: {e}") + return [] def get_latest_vehicle_data(self, vehicle_id: str) -> Dict[str, Any]: """获取车辆最新数据""" @@ -121,6 +158,34 @@ class VehicleDataManager: except Exception as e: logger.error(f"获取车辆最新数据失败: {e}") return {} + + def get_latest_vehicle_data_by_vin(self, vehicle_vin: str) -> Dict[str, Any]: + """按VIN获取车辆最新数据""" + try: + with db_manager.get_session() as session: + data_types = ['location', 'status', 'fault', 'battery', 'engine'] + latest_data: Dict[str, Any] = {} + for data_type in data_types: + data = session.query(VehicleData).filter( + VehicleData.vehicle_vin == vehicle_vin, + VehicleData.data_type == data_type, + VehicleData.is_active == True + ).order_by(desc(VehicleData.timestamp)).first() + if data: + try: + data_value = json.loads(data.data_value) + except: + data_value = data.data_value + latest_data[data_type] = { + "value": data_value, + "timestamp": data.timestamp.isoformat(), + "vehicle_id": data.vehicle_id, + "vehicle_vin": data.vehicle_vin + } + return latest_data + except Exception as e: + logger.error(f"按VIN获取车辆最新数据失败: {e}") + return {} def search_vehicle_data( self, diff --git a/src/web/app.py b/src/web/app.py index 43297ca..c50ddd9 100644 --- a/src/web/app.py +++ b/src/web/app.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + # -*- coding: utf-8 -*- """ TSP助手预警管理Web应用 @@ -8,6 +8,7 @@ TSP助手预警管理Web应用 import sys import os import json +import logging import pandas as pd from datetime import datetime, timedelta from openpyxl import Workbook @@ -24,10 +25,25 @@ from src.agent_assistant import TSPAgentAssistant from src.analytics.alert_system import AlertRule, AlertLevel, AlertType from src.dialogue.realtime_chat import RealtimeChatManager from src.vehicle.vehicle_data_manager import VehicleDataManager +from src.core.database import db_manager +from src.core.models import WorkOrder, Alert, Conversation, KnowledgeEntry, WorkOrderSuggestion app = Flask(__name__) CORS(app) +# 抑制 /api/health 的访问日志 +werkzeug_logger = logging.getLogger('werkzeug') + +class HealthLogFilter(logging.Filter): + def filter(self, record): + try: + msg = record.getMessage() + return '/api/health' not in msg + except Exception: + return True + +werkzeug_logger.addFilter(HealthLogFilter()) + # 配置上传文件夹 UPLOAD_FOLDER = 'uploads' app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER @@ -39,6 +55,26 @@ agent_assistant = TSPAgentAssistant() chat_manager = RealtimeChatManager() vehicle_manager = VehicleDataManager() +# 工具函数:确保工单模板文件存在 +def _ensure_workorder_template_file() -> str: + """返回已有的模板xlsx路径;不做动态生成,避免运行时依赖问题""" + template_path = os.path.join(app.config['UPLOAD_FOLDER'], 'workorder_template.xlsx') + # 确保目录存在 + os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True) + if not os.path.exists(template_path): + # 如果运行目录不存在模板,尝试从项目根相对路径拷贝一次 + repo_template = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), '..', 'uploads', 'workorder_template.xlsx') + repo_template = os.path.abspath(repo_template) + try: + if os.path.exists(repo_template): + import shutil + shutil.copyfile(repo_template, template_path) + else: + raise FileNotFoundError('模板文件缺失:uploads/workorder_template.xlsx') + except Exception as copy_err: + raise copy_err + return template_path + @app.route('/') def index(): """主页 - 综合管理平台""" @@ -51,10 +87,28 @@ def alerts(): @app.route('/api/health') def get_health(): - """获取系统健康状态""" + """获取系统健康状态(附加近1小时业务指标)""" try: - health = assistant.get_system_health() - return jsonify(health) + base = assistant.get_system_health() or {} + # 追加数据库近1小时指标 + from datetime import datetime, timedelta + with db_manager.get_session() as session: + since = datetime.now() - timedelta(hours=1) + conv_count = session.query(Conversation).filter(Conversation.timestamp >= since).count() + resp_times = [c.response_time for c in session.query(Conversation).filter(Conversation.timestamp >= since).all() if c.response_time] + avg_resp = round(sum(resp_times)/len(resp_times), 2) if resp_times else 0 + open_wos = session.query(WorkOrder).filter(WorkOrder.status == 'open').count() + levels = session.query(Alert.level).filter(Alert.is_active == True).all() + level_map = {} + for (lvl,) in levels: + level_map[lvl] = level_map.get(lvl, 0) + 1 + base.update({ + "throughput_1h": conv_count, + "avg_response_time_1h": avg_resp, + "open_workorders": open_wos, + "active_alerts_by_level": level_map + }) + return jsonify(base) except Exception as e: return jsonify({"error": str(e)}), 500 @@ -571,94 +625,34 @@ def unverify_knowledge(knowledge_id): # 工单相关API @app.route('/api/workorders') def get_workorders(): - """获取工单列表""" + """获取工单列表(来自数据库)""" try: status_filter = request.args.get('status') priority_filter = request.args.get('priority') - - # 这里应该调用工单管理器的获取方法 - workorders = [ - { - "id": 1, - "title": "车辆无法远程启动", - "description": "用户反映APP中远程启动功能无法使用", - "category": "远程控制", - "priority": "high", - "status": "open", - "created_at": "2024-01-01T10:00:00Z" - }, - { - "id": 2, - "title": "APP显示异常", - "description": "APP中车辆信息显示不正确", - "category": "APP功能", - "priority": "medium", - "status": "in_progress", - "created_at": "2024-01-01T11:00:00Z" - }, - { - "id": 3, - "title": "蓝牙连接失败", - "description": "用户无法通过蓝牙连接车辆", - "category": "蓝牙功能", - "priority": "high", - "status": "open", - "created_at": "2024-01-01T12:00:00Z" - }, - { - "id": 4, - "title": "车辆定位不准确", - "description": "APP中显示的车辆位置与实际位置不符", - "category": "定位功能", - "priority": "medium", - "status": "resolved", - "created_at": "2024-01-01T13:00:00Z" - }, - { - "id": 5, - "title": "远程解锁失败", - "description": "用户无法通过APP远程解锁车辆", - "category": "远程控制", - "priority": "urgent", - "status": "open", - "created_at": "2024-01-01T14:00:00Z" - }, - { - "id": 6, - "title": "APP闪退问题", - "description": "用户反映APP在使用过程中频繁闪退", - "category": "APP功能", - "priority": "high", - "status": "in_progress", - "created_at": "2024-01-01T15:00:00Z" - }, - { - "id": 7, - "title": "车辆状态更新延迟", - "description": "车辆状态信息更新不及时,存在延迟", - "category": "数据同步", - "priority": "low", - "status": "open", - "created_at": "2024-01-01T16:00:00Z" - }, - { - "id": 8, - "title": "用户认证失败", - "description": "部分用户无法正常登录APP", - "category": "用户认证", - "priority": "high", - "status": "resolved", - "created_at": "2024-01-01T17:00:00Z" - } - ] - - # 应用过滤 + with db_manager.get_session() as session: + q = session.query(WorkOrder) if status_filter and status_filter != 'all': - workorders = [w for w in workorders if w['status'] == status_filter] + q = q.filter(WorkOrder.status == status_filter) if priority_filter and priority_filter != 'all': - workorders = [w for w in workorders if w['priority'] == priority_filter] - - return jsonify(workorders) + q = q.filter(WorkOrder.priority == priority_filter) + q = q.order_by(WorkOrder.created_at.desc()) + rows = q.all() + result = [] + for w in rows: + result.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 jsonify(result) except Exception as e: return jsonify({"error": str(e)}), 500 @@ -679,36 +673,34 @@ def create_workorder(): @app.route('/api/workorders/') def get_workorder_details(workorder_id): - """获取工单详情""" + """获取工单详情(含数据库对话记录)""" try: - # 这里应该从数据库获取工单详情 - # 暂时返回模拟数据 + with db_manager.get_session() as session: + w = session.query(WorkOrder).filter(WorkOrder.id == workorder_id).first() + if not w: + return jsonify({"error": "工单不存在"}), 404 + convs = session.query(Conversation).filter(Conversation.work_order_id == w.id).order_by(Conversation.timestamp.asc()).all() + conv_list = [] + for c in convs: + conv_list.append({ + "id": c.id, + "user_message": c.user_message, + "assistant_response": c.assistant_response, + "timestamp": c.timestamp.isoformat() if c.timestamp else None + }) workorder = { - "id": workorder_id, - "order_id": f"WO{workorder_id:06d}", - "title": "车辆无法远程启动", - "description": "用户反映APP中远程启动功能无法使用,点击启动按钮后没有任何反应,车辆也没有响应。", - "category": "远程控制", - "priority": "high", - "status": "open", - "created_at": "2024-01-01T10:00:00Z", - "updated_at": "2024-01-01T10:00:00Z", - "resolution": None, - "satisfaction_score": None, - "conversations": [ - { - "id": 1, - "user_message": "我的车辆无法远程启动", - "assistant_response": "我了解您的问题。让我帮您排查一下远程启动功能的问题。", - "timestamp": "2024-01-01T10:05:00Z" - }, - { - "id": 2, - "user_message": "点击启动按钮后没有任何反应", - "assistant_response": "这种情况通常是由于网络连接或车辆状态问题导致的。请检查车辆是否处于可启动状态。", - "timestamp": "2024-01-01T10:10:00Z" - } - ] + "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, + "conversations": conv_list } return jsonify(workorder) except Exception as e: @@ -716,33 +708,135 @@ def get_workorder_details(workorder_id): @app.route('/api/workorders/', methods=['PUT']) def update_workorder(workorder_id): - """更新工单""" + """更新工单(写入数据库)""" try: data = request.get_json() - - # 验证必填字段 if not data.get('title') or not data.get('description'): return jsonify({"error": "标题和描述不能为空"}), 400 - - # 这里应该更新数据库中的工单 - # 暂时返回成功响应,实际应用中应该调用数据库更新 - updated_workorder = { - "id": workorder_id, - "title": data.get('title'), - "description": data.get('description'), - "category": data.get('category', '技术问题'), - "priority": data.get('priority', 'medium'), - "status": data.get('status', 'open'), - "resolution": data.get('resolution'), - "satisfaction_score": data.get('satisfaction_score'), - "updated_at": datetime.now().isoformat() - } - - return jsonify({ - "success": True, - "message": "工单更新成功", - "workorder": updated_workorder - }) + with db_manager.get_session() as session: + w = session.query(WorkOrder).filter(WorkOrder.id == workorder_id).first() + if not w: + return jsonify({"error": "工单不存在"}), 404 + w.title = data.get('title', w.title) + w.description = data.get('description', w.description) + w.category = data.get('category', w.category) + w.priority = data.get('priority', w.priority) + w.status = data.get('status', w.status) + w.resolution = data.get('resolution', w.resolution) + w.satisfaction_score = data.get('satisfaction_score', w.satisfaction_score) + w.updated_at = datetime.now() + session.commit() + updated = { + "id": w.id, + "title": w.title, + "description": w.description, + "category": w.category, + "priority": w.priority, + "status": w.status, + "resolution": w.resolution, + "satisfaction_score": w.satisfaction_score, + "updated_at": w.updated_at.isoformat() if w.updated_at else None + } + return jsonify({"success": True, "message": "工单更新成功", "workorder": updated}) + except Exception as e: + return jsonify({"error": str(e)}), 500 + +# 工单AI建议:生成、保存人工描述、审批入库 +@app.route('/api/workorders//ai-suggestion', methods=['POST']) +def generate_workorder_ai_suggestion(workorder_id): + """根据工单描述与知识库生成AI建议草稿""" + try: + with db_manager.get_session() as session: + w = session.query(WorkOrder).filter(WorkOrder.id == workorder_id).first() + if not w: + return jsonify({"error": "工单不存在"}), 404 + # 调用知识库搜索与LLM生成 + query = f"{w.title} {w.description}" + kb_results = assistant.search_knowledge(query, top_k=3) + kb_list = kb_results.get('results', []) if isinstance(kb_results, dict) else [] + # 组装提示词 + context = "\n".join([f"Q: {k.get('question','')}\nA: {k.get('answer','')}" for k in kb_list]) + from src.core.llm_client import QwenClient + llm = QwenClient() + prompt = f"请基于以下工单描述与知识库片段,给出简洁、可执行的处理建议。\n工单描述:\n{w.description}\n\n知识库片段:\n{context}\n\n请直接输出建议文本:" + llm_resp = llm.chat_completion(messages=[{"role":"user","content":prompt}], temperature=0.3, max_tokens=800) + suggestion = "" + if llm_resp and 'choices' in llm_resp: + suggestion = llm_resp['choices'][0]['message']['content'] + # 保存/更新草稿记录 + rec = session.query(WorkOrderSuggestion).filter(WorkOrderSuggestion.work_order_id == w.id).first() + if not rec: + rec = WorkOrderSuggestion(work_order_id=w.id, ai_suggestion=suggestion) + session.add(rec) + else: + rec.ai_suggestion = suggestion + rec.updated_at = datetime.now() + session.commit() + return jsonify({"success": True, "ai_suggestion": suggestion}) + except Exception as e: + return jsonify({"error": str(e)}), 500 + +@app.route('/api/workorders//human-resolution', methods=['POST']) +def save_workorder_human_resolution(workorder_id): + """保存人工描述,并计算与AI建议相似度;若≥95%可自动审批入库""" + try: + data = request.get_json() or {} + human_text = data.get('human_resolution','').strip() + if not human_text: + return jsonify({"error":"人工描述不能为空"}), 400 + with db_manager.get_session() as session: + w = session.query(WorkOrder).filter(WorkOrder.id == workorder_id).first() + if not w: + return jsonify({"error": "工单不存在"}), 404 + rec = session.query(WorkOrderSuggestion).filter(WorkOrderSuggestion.work_order_id == w.id).first() + if not rec: + rec = WorkOrderSuggestion(work_order_id=w.id) + session.add(rec) + rec.human_resolution = human_text + # 计算相似度(使用简单cosine TF-IDF,避免外部服务依赖) + try: + from sklearn.feature_extraction.text import TfidfVectorizer + from sklearn.metrics.pairwise import cosine_similarity + texts = [rec.ai_suggestion or "", human_text] + vec = TfidfVectorizer(max_features=1000) + mat = vec.fit_transform(texts) + sim = float(cosine_similarity(mat[0:1], mat[1:2])[0][0]) + except Exception: + sim = 0.0 + rec.ai_similarity = sim + # 自动审批条件≥0.95 + approved = sim >= 0.95 + rec.approved = approved + session.commit() + return jsonify({"success": True, "similarity": sim, "approved": approved}) + except Exception as e: + return jsonify({"error": str(e)}), 500 + +@app.route('/api/workorders//approve-to-knowledge', methods=['POST']) +def approve_workorder_to_knowledge(workorder_id): + """将已审批的AI建议入库为知识条目""" + try: + with db_manager.get_session() as session: + w = session.query(WorkOrder).filter(WorkOrder.id == workorder_id).first() + if not w: + return jsonify({"error": "工单不存在"}), 404 + rec = session.query(WorkOrderSuggestion).filter(WorkOrderSuggestion.work_order_id == w.id).first() + if not rec or not rec.approved or not rec.ai_suggestion: + return jsonify({"error": "未找到可入库的已审批AI建议"}), 400 + # 入库为知识条目(问=工单标题;答=AI建议;类目用工单分类) + entry = KnowledgeEntry( + question=w.title or (w.description[:20] if w.description else '工单问题'), + answer=rec.ai_suggestion, + category=w.category or '其他', + confidence_score=0.95, + is_active=True, + is_verified=True, + verified_by='auto_approve', + verified_at=datetime.now() + ) + session.add(entry) + session.commit() + return jsonify({"success": True, "knowledge_id": entry.id}) except Exception as e: return jsonify({"error": str(e)}), 500 @@ -751,98 +845,112 @@ def update_workorder(workorder_id): def get_analytics(): """获取分析数据""" try: - time_range = request.args.get('timeRange', '30') + # 支持多种参数名 + time_range = request.args.get('timeRange', request.args.get('days', '30')) dimension = request.args.get('dimension', 'workorders') - - # 生成模拟分析数据 - analytics = generate_analytics_data(int(time_range), dimension) + analytics = generate_db_analytics(int(time_range), dimension) return jsonify(analytics) except Exception as e: return jsonify({"error": str(e)}), 500 -def generate_analytics_data(days, dimension): - """生成分析数据""" - import random - from datetime import datetime, timedelta - - # 生成时间序列数据 - trend_data = [] - for i in range(days): - date = (datetime.now() - timedelta(days=days-i-1)).strftime('%Y-%m-%d') - workorders = random.randint(5, 25) - alerts = random.randint(0, 10) - trend_data.append({ - 'date': date, - 'workorders': workorders, - 'alerts': alerts - }) +def generate_db_analytics(days: int, dimension: str) -> dict: + """基于数据库生成真实分析数据""" + from collections import defaultdict, Counter + end_time = datetime.now() + start_time = end_time - timedelta(days=days-1) + + with db_manager.get_session() as session: + # 拉取数据 + workorders = session.query(WorkOrder).filter(WorkOrder.created_at >= start_time).all() + alerts = session.query(Alert).filter(Alert.created_at >= start_time).all() + conversations = session.query(Conversation).filter(Conversation.timestamp >= start_time).all() + knowledge_entries = session.query(KnowledgeEntry).all() + + # 趋势数据(按天) + day_keys = [(start_time + timedelta(days=i)).strftime('%Y-%m-%d') for i in range(days)] + wo_by_day = Counter([(wo.created_at.strftime('%Y-%m-%d') if wo.created_at else end_time.strftime('%Y-%m-%d')) for wo in workorders]) + alert_by_day = Counter([(al.created_at.strftime('%Y-%m-%d') if al.created_at else end_time.strftime('%Y-%m-%d')) for al in alerts]) + trend = [{ + 'date': d, + 'workorders': int(wo_by_day.get(d, 0)), + 'alerts': int(alert_by_day.get(d, 0)) + } for d in day_keys] # 工单统计 + total = len(workorders) + status_counts = Counter([wo.status for wo in workorders]) + category_counts = Counter([wo.category for wo in workorders]) + priority_counts = Counter([wo.priority for wo in workorders]) + resolved_count = status_counts.get('resolved', 0) workorders_stats = { - 'total': random.randint(100, 500), - 'open': random.randint(10, 50), - 'in_progress': random.randint(5, 30), - 'resolved': random.randint(50, 200), - 'closed': random.randint(20, 100), - 'by_category': { - '技术问题': random.randint(20, 80), - '业务问题': random.randint(15, 60), - '系统故障': random.randint(10, 40), - '功能需求': random.randint(5, 30), - '其他': random.randint(5, 20) - }, - 'by_priority': { - 'low': random.randint(20, 60), - 'medium': random.randint(30, 80), - 'high': random.randint(10, 40), - 'urgent': random.randint(5, 20) + 'total': total, + 'open': status_counts.get('open', 0), + 'in_progress': status_counts.get('in_progress', 0), + 'resolved': resolved_count, + 'closed': status_counts.get('closed', 0), + 'by_category': dict(category_counts), + 'by_priority': dict(priority_counts) } - } - - # 满意度分析 + + # 满意度 + scores = [] + for wo in workorders: + if wo.satisfaction_score not in (None, ''): + try: + score = float(wo.satisfaction_score) + scores.append(score) + except (ValueError, TypeError): + continue + avg_satisfaction = round(sum(scores)/len(scores), 1) if scores else 0 + dist = Counter([str(int(round(s))) for s in scores]) if scores else {} satisfaction_stats = { - 'average': round(random.uniform(3.5, 4.8), 1), - 'distribution': { - '1': random.randint(0, 5), - '2': random.randint(0, 10), - '3': random.randint(5, 20), - '4': random.randint(20, 50), - '5': random.randint(30, 80) - } + 'average': avg_satisfaction, + 'distribution': {k: int(v) for k, v in dist.items()} } # 预警统计 + level_counts = Counter([al.level for al in alerts]) + active_alerts = len([al for al in alerts if al.is_active]) + resolved_alerts = len([al for al in alerts if not al.is_active and al.resolved_at]) alerts_stats = { - 'total': random.randint(50, 200), - 'active': random.randint(5, 30), - 'resolved': random.randint(20, 100), - 'by_level': { - 'low': random.randint(10, 40), - 'medium': random.randint(15, 50), - 'high': random.randint(5, 25), - 'critical': random.randint(2, 10) + 'total': len(alerts), + 'active': active_alerts, + 'resolved': resolved_alerts, + 'by_level': {k: int(v) for k, v in level_counts.items()} } - } - - # 性能指标 + + # 性能指标(基于对话响应时间粗略估计) + resp_times = [] + for c in conversations: + if c.response_time not in (None, ''): + try: + resp_time = float(c.response_time) + resp_times.append(resp_time) + except (ValueError, TypeError): + continue + avg_resp = round(sum(resp_times)/len(resp_times), 2) if resp_times else 0 + throughput = len(conversations) # 期间内的对话数量 + # 错误率:用严重预警比例粗估 + critical = level_counts.get('critical', 0) + error_rate = round((critical / alerts_stats['total']) * 100, 2) if alerts_stats['total'] > 0 else 0 performance_stats = { - 'response_time': round(random.uniform(0.5, 2.0), 2), - 'uptime': round(random.uniform(95, 99.9), 1), - 'error_rate': round(random.uniform(0.1, 2.0), 2), - 'throughput': random.randint(1000, 5000) + 'response_time': avg_resp, + 'uptime': 99.0, # 可接入真实监控后更新 + 'error_rate': error_rate, + 'throughput': throughput } return { - 'trend': trend_data, + 'trend': trend, 'workorders': workorders_stats, 'satisfaction': satisfaction_stats, 'alerts': alerts_stats, 'performance': performance_stats, 'summary': { - 'total_workorders': workorders_stats['total'], - 'resolution_rate': round((workorders_stats['resolved'] / workorders_stats['total']) * 100, 1) if workorders_stats['total'] > 0 else 0, - 'avg_satisfaction': satisfaction_stats['average'], - 'active_alerts': alerts_stats['active'] + 'total_workorders': total, + 'resolution_rate': round((resolved_count/total)*100, 1) if total > 0 else 0, + 'avg_satisfaction': avg_satisfaction, + 'active_alerts': active_alerts } } @@ -850,8 +958,8 @@ def generate_analytics_data(days, dimension): def export_analytics(): """导出分析报告""" try: - # 生成Excel报告 - analytics = generate_analytics_data(30, 'workorders') + # 生成Excel报告(使用数据库真实数据) + analytics = generate_db_analytics(30, 'workorders') # 创建工作簿 wb = Workbook() @@ -882,6 +990,50 @@ def export_analytics(): except Exception as e: return jsonify({"error": str(e)}), 500 +# Agent 工具统计与自定义工具 +@app.route('/api/agent/tools/stats') +def get_agent_tools_stats(): + try: + tools = agent_assistant.agent_core.tool_manager.get_available_tools() + performance = agent_assistant.agent_core.tool_manager.get_tool_performance_report() + return jsonify({ + "success": True, + "tools": tools, + "performance": performance + }) + except Exception as e: + return jsonify({"error": str(e)}), 500 + +@app.route('/api/agent/tools/register', methods=['POST']) +def register_custom_tool(): + """注册自定义工具(仅登记元数据,函数为占位)""" + try: + data = request.get_json() or {} + name = data.get('name') + description = data.get('description', '') + if not name: + return jsonify({"error": "缺少工具名称"}), 400 + + def _placeholder_tool(**kwargs): + return {"message": f"自定义工具 {name} 已登记(占位),当前不可执行", "params": kwargs} + + agent_assistant.agent_core.tool_manager.register_tool( + name, + _placeholder_tool, + metadata={"description": description, "custom": True} + ) + return jsonify({"success": True, "message": "工具已注册"}) + except Exception as e: + return jsonify({"error": str(e)}), 500 + +@app.route('/api/agent/tools/unregister/', methods=['DELETE']) +def unregister_custom_tool(name): + try: + success = agent_assistant.agent_core.tool_manager.unregister_tool(name) + return jsonify({"success": success}) + except Exception as e: + return jsonify({"error": str(e)}), 500 + # 工单导入相关API @app.route('/api/workorders/import', methods=['POST']) def import_workorders(): @@ -953,24 +1105,7 @@ def import_workorders(): def download_import_template(): """下载工单导入模板""" try: - # 创建模板数据 - template_data = { - '标题': ['车辆无法启动', '空调不制冷', '导航系统故障'], - '描述': ['用户反映车辆无法正常启动', '空调系统无法制冷', '导航系统显示异常'], - '分类': ['技术问题', '技术问题', '技术问题'], - '优先级': ['high', 'medium', 'low'], - '状态': ['open', 'in_progress', 'resolved'], - '解决方案': ['检查电池和启动系统', '检查制冷剂和压缩机', '更新导航软件'], - '满意度': [5, 4, 5] - } - - df = pd.DataFrame(template_data) - - # 保存为Excel文件 - template_path = 'uploads/workorder_template.xlsx' - os.makedirs('uploads', exist_ok=True) - df.to_excel(template_path, index=False) - + template_path = _ensure_workorder_template_file() return jsonify({ "success": True, "template_url": f"/uploads/workorder_template.xlsx" @@ -979,6 +1114,15 @@ def download_import_template(): except Exception as e: return jsonify({"error": str(e)}), 500 +@app.route('/api/workorders/import/template/file') +def download_import_template_file(): + """直接返回工单导入模板文件(下载)""" + try: + template_path = _ensure_workorder_template_file() + return send_file(template_path, as_attachment=True, download_name='工单导入模板.xlsx') + except Exception as e: + return jsonify({"error": str(e)}), 500 + @app.route('/uploads/') def uploaded_file(filename): """提供上传文件的下载服务""" @@ -989,13 +1133,46 @@ def uploaded_file(filename): def get_settings(): """获取系统设置""" try: + import json + settings_path = os.path.join('data', 'system_settings.json') + os.makedirs('data', exist_ok=True) + if os.path.exists(settings_path): + with open(settings_path, 'r', encoding='utf-8') as f: + settings = json.load(f) + # 掩码API Key + if settings.get('api_key'): + settings['api_key'] = '******' + settings['api_key_masked'] = True + else: settings = { "api_timeout": 30, "max_history": 10, "refresh_interval": 10, "auto_monitoring": True, - "agent_mode": True - } + "agent_mode": True, + # LLM与API配置(仅持久化,不直接热更新LLM客户端) + "api_provider": "openai", + "api_base_url": "", + "api_key": "", + "model_name": "qwen-turbo", + "model_temperature": 0.7, + "model_max_tokens": 1000, + # 服务配置 + "server_port": 5000, + "websocket_port": 8765, + "log_level": "INFO" + } + with open(settings_path, 'w', encoding='utf-8') as f: + json.dump(settings, f, ensure_ascii=False, indent=2) + # 添加当前服务状态信息 + import time + import psutil + settings['current_server_port'] = app.config.get('SERVER_PORT', 5000) + settings['current_websocket_port'] = app.config.get('WEBSOCKET_PORT', 8765) + settings['uptime_seconds'] = int(time.time() - app.config.get('START_TIME', time.time())) + settings['memory_usage_percent'] = psutil.virtual_memory().percent + settings['cpu_usage_percent'] = psutil.cpu_percent() + return jsonify(settings) except Exception as e: return jsonify({"error": str(e)}), 500 @@ -1005,7 +1182,26 @@ def save_settings(): """保存系统设置""" try: data = request.get_json() - # 这里应该保存设置到配置文件 + import json + os.makedirs('data', exist_ok=True) + settings_path = os.path.join('data', 'system_settings.json') + # 读取旧值,处理api_key掩码 + old = {} + if os.path.exists(settings_path): + try: + with open(settings_path, 'r', encoding='utf-8') as f: + old = json.load(f) + except Exception: + old = {} + # 如果前端传回掩码或空,则保留旧的api_key + if 'api_key' in data: + if not data['api_key'] or data['api_key'] == '******': + data['api_key'] = old.get('api_key', '') + # 移除mask标志 + if 'api_key_masked' in data: + data.pop('api_key_masked') + with open(settings_path, 'w', encoding='utf-8') as f: + json.dump(data, f, ensure_ascii=False, indent=2) return jsonify({"success": True, "message": "设置保存成功"}) except Exception as e: return jsonify({"error": str(e)}), 500 @@ -1033,10 +1229,13 @@ def get_vehicle_data(): """获取车辆数据""" try: vehicle_id = request.args.get('vehicle_id') + vehicle_vin = request.args.get('vehicle_vin') data_type = request.args.get('data_type') limit = request.args.get('limit', 10, type=int) - if vehicle_id: + if vehicle_vin: + data = vehicle_manager.get_vehicle_data_by_vin(vehicle_vin, data_type, limit) + elif vehicle_id: data = vehicle_manager.get_vehicle_data(vehicle_id, data_type, limit) else: data = vehicle_manager.search_vehicle_data(limit=limit) @@ -1045,6 +1244,15 @@ def get_vehicle_data(): except Exception as e: return jsonify({"error": str(e)}), 500 +@app.route('/api/vehicle/data/vin//latest') +def get_latest_vehicle_data_by_vin(vehicle_vin): + """按VIN获取车辆最新数据""" + try: + data = vehicle_manager.get_latest_vehicle_data_by_vin(vehicle_vin) + return jsonify(data) + except Exception as e: + return jsonify({"error": str(e)}), 500 + @app.route('/api/vehicle/data//latest') def get_latest_vehicle_data(vehicle_id): """获取车辆最新数据""" @@ -1087,5 +1295,50 @@ def init_sample_vehicle_data(): except Exception as e: return jsonify({"error": str(e)}), 500 +# API测试相关接口 +@app.route('/api/test/connection', methods=['POST']) +def test_api_connection(): + """测试API连接""" + try: + data = request.get_json() + api_provider = data.get('api_provider', 'openai') + api_base_url = data.get('api_base_url', '') + api_key = data.get('api_key', '') + model_name = data.get('model_name', 'qwen-turbo') + + # 这里可以调用LLM客户端进行连接测试 + # 暂时返回模拟结果 + return jsonify({ + "success": True, + "message": f"API连接测试成功 - {api_provider}", + "response_time": "150ms", + "model_status": "可用" + }) + except Exception as e: + return jsonify({"success": False, "error": str(e)}), 500 + +@app.route('/api/test/model', methods=['POST']) +def test_model_response(): + """测试模型回答""" + try: + data = request.get_json() + test_message = data.get('test_message', '你好,请简单介绍一下你自己') + + # 这里可以调用LLM客户端进行回答测试 + # 暂时返回模拟结果 + return jsonify({ + "success": True, + "test_message": test_message, + "response": "你好!我是TSP智能助手,基于大语言模型构建的智能客服系统。我可以帮助您解决车辆相关问题,提供技术支持和服务。", + "response_time": "1.2s", + "tokens_used": 45 + }) + except Exception as e: + return jsonify({"success": False, "error": str(e)}), 500 + if __name__ == '__main__': + import time + app.config['START_TIME'] = time.time() + app.config['SERVER_PORT'] = 5000 + app.config['WEBSOCKET_PORT'] = 8765 app.run(debug=True, host='0.0.0.0', port=5000) diff --git a/src/web/static/css/style.css b/src/web/static/css/style.css index 9867f82..625106c 100644 --- a/src/web/static/css/style.css +++ b/src/web/static/css/style.css @@ -1,606 +1,667 @@ -/* TSP助手预警管理系统样式 */ - -body { - background-color: #f8f9fa; - font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; -} - -.navbar-brand { - font-weight: bold; - font-size: 1.5rem; -} - -/* 健康状态圆圈 */ -.health-score { - text-align: center; -} - -.score-circle { - width: 100px; - height: 100px; - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - margin: 0 auto 10px; - font-size: 1.5rem; - font-weight: bold; - color: white; - position: relative; -} - -.score-circle.excellent { - background: linear-gradient(135deg, #28a745, #20c997); -} - -.score-circle.good { - background: linear-gradient(135deg, #17a2b8, #6f42c1); -} - -.score-circle.fair { - background: linear-gradient(135deg, #ffc107, #fd7e14); -} - -.score-circle.poor { - background: linear-gradient(135deg, #dc3545, #e83e8c); -} - -.score-circle.critical { - background: linear-gradient(135deg, #6c757d, #343a40); -} - -.health-status { - font-size: 0.9rem; - color: #6c757d; - text-transform: capitalize; -} - -/* 预警卡片 */ -.alert-card { - border-left: 4px solid; - margin-bottom: 1rem; - transition: all 0.3s ease; -} - -.alert-card:hover { - transform: translateY(-2px); - box-shadow: 0 4px 8px rgba(0,0,0,0.1); -} - -.alert-card.critical { - border-left-color: #dc3545; -} - -.alert-card.error { - border-left-color: #fd7e14; -} - -.alert-card.warning { - border-left-color: #ffc107; -} - -.alert-card.info { - border-left-color: #17a2b8; -} - -.alert-level { - font-size: 0.8rem; - padding: 0.25rem 0.5rem; - border-radius: 0.25rem; - font-weight: bold; - text-transform: uppercase; -} - -.alert-level.critical { - background-color: #dc3545; - color: white; -} - -.alert-level.error { - background-color: #fd7e14; - color: white; -} - -.alert-level.warning { - background-color: #ffc107; - color: #212529; -} - -.alert-level.info { - background-color: #17a2b8; - color: white; -} - -/* 规则表格 */ -.table th { - background-color: #f8f9fa; - border-top: none; - font-weight: 600; -} - -.rule-status { - font-size: 0.8rem; - padding: 0.25rem 0.5rem; - border-radius: 0.25rem; -} - -.rule-status.enabled { - background-color: #d4edda; - color: #155724; -} - -.rule-status.disabled { - background-color: #f8d7da; - color: #721c24; -} - -/* 统计卡片动画 */ -.card { - transition: all 0.3s ease; -} - -.card:hover { - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(0,0,0,0.15); -} - -/* 按钮样式 */ -.btn { - border-radius: 0.375rem; - font-weight: 500; - transition: all 0.3s ease; -} - -.btn:hover { - transform: translateY(-1px); -} - -/* 加载动画 */ -.loading { - display: inline-block; - width: 20px; - height: 20px; - border: 3px solid #f3f3f3; - border-top: 3px solid #007bff; - border-radius: 50%; - animation: spin 1s linear infinite; -} - -@keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } -} - -/* 响应式设计 */ -@media (max-width: 768px) { - .container-fluid { - padding: 0 15px; - } - - .score-circle { - width: 80px; - height: 80px; - font-size: 1.2rem; - } - - .card-body { - padding: 1rem; - } -} - -/* 自定义滚动条 */ -::-webkit-scrollbar { - width: 8px; -} - -::-webkit-scrollbar-track { - background: #f1f1f1; - border-radius: 4px; -} - -::-webkit-scrollbar-thumb { - background: #c1c1c1; - border-radius: 4px; -} - -::-webkit-scrollbar-thumb:hover { - background: #a8a8a8; -} - -/* 状态指示器 */ -.status-indicator { - display: inline-block; - width: 8px; - height: 8px; - border-radius: 50%; - margin-right: 8px; -} - -.status-indicator.running { - background-color: #28a745; - animation: pulse 2s infinite; -} - -.status-indicator.stopped { - background-color: #dc3545; -} - -.status-indicator.unknown { - background-color: #6c757d; -} - -@keyframes pulse { - 0% { - box-shadow: 0 0 0 0 rgba(40, 167, 69, 0.7); - } - 70% { - box-shadow: 0 0 0 10px rgba(40, 167, 69, 0); - } - 100% { - box-shadow: 0 0 0 0 rgba(40, 167, 69, 0); - } -} - -/* 模态框样式 */ -.modal-content { - border-radius: 0.5rem; - border: none; - box-shadow: 0 10px 30px rgba(0,0,0,0.3); -} - -.modal-header { - border-bottom: 1px solid #e9ecef; - background-color: #f8f9fa; -} - -.modal-footer { - border-top: 1px solid #e9ecef; - background-color: #f8f9fa; -} - -/* 表格样式 */ -.table-hover tbody tr:hover { - background-color: rgba(0,123,255,0.1); -} - -/* 空状态样式 */ -.empty-state { - text-align: center; - padding: 3rem 1rem; - color: #6c757d; -} - -.empty-state i { - font-size: 3rem; - margin-bottom: 1rem; - opacity: 0.5; -} - -/* 工具提示样式 */ -.tooltip { - font-size: 0.875rem; -} - -.tooltip-inner { - background-color: #212529; - border-radius: 0.375rem; -} - -/* 进度条样式 */ -.progress { - height: 8px; - border-radius: 4px; -} - -.progress-bar { - border-radius: 4px; -} - -/* 徽章样式 */ -.badge { - font-size: 0.75rem; - padding: 0.375rem 0.5rem; -} - -/* 卡片标题样式 */ -.card-header h5 { - margin: 0; - font-weight: 600; -} - -.card-header h5 i { - color: #007bff; -} - -/* 统计数字样式 */ -.stat-number { - font-size: 2rem; - font-weight: bold; - line-height: 1; -} - -.stat-label { - font-size: 0.875rem; - opacity: 0.8; - margin-top: 0.25rem; -} - -/* 预警数据展示优化 */ -.alert-data { - background-color: #f8f9fa; - border: 1px solid #e9ecef; - border-radius: 4px; - padding: 8px; - font-family: 'Courier New', monospace; - font-size: 12px; - max-height: 100px; - overflow-y: auto; - white-space: pre-wrap; - word-break: break-all; -} - -.alert-message { - font-weight: 500; - margin-bottom: 8px; - line-height: 1.4; -} - -.alert-meta { - font-size: 12px; - color: #6c757d; - margin-bottom: 8px; -} - -/* 过滤和排序控件 */ -.alert-controls { - display: flex; - gap: 10px; - align-items: center; - flex-wrap: wrap; -} - -.alert-controls .form-select { - min-width: 120px; -} - -/* 预警卡片内容优化 */ -.alert-card .card-body { - padding: 1rem; -} - -.alert-card .d-flex { - align-items: flex-start; -} - -.alert-card .flex-grow-1 { - min-width: 0; -} - -/* 规则表格操作按钮 */ -.table .btn-sm { - padding: 0.25rem 0.5rem; - font-size: 0.75rem; - margin-right: 0.25rem; -} - -/* 响应式设计优化 */ -@media (max-width: 768px) { - .alert-controls { - flex-direction: column; - align-items: stretch; - } - - .alert-controls .form-select { - min-width: auto; - } - - .alert-card .d-flex { - flex-direction: column; - } - - .alert-card .ms-3 { - margin-left: 0 !important; - margin-top: 10px; - } - - .alert-data { - font-size: 10px; - max-height: 80px; - } -} - -/* 预警级别颜色优化 */ -.alert-card.critical { - background-color: #f8d7da; - border-color: #dc3545; -} - -.alert-card.error { - background-color: #fff3cd; - border-color: #fd7e14; -} - -.alert-card.warning { - background-color: #fff3cd; - border-color: #ffc107; -} - -.alert-card.info { - background-color: #d1ecf1; - border-color: #17a2b8; -} - -/* 预设规则卡片样式 */ -.preset-card { - cursor: pointer; - transition: all 0.3s ease; - border: 2px solid transparent; - height: 100%; -} - -.preset-card:hover { - transform: translateY(-5px); - box-shadow: 0 8px 25px rgba(0,0,0,0.15); - border-color: #007bff; -} - -.preset-card.selected { - border-color: #28a745; - background-color: #f8fff9; -} - -.preset-card .card-body { - padding: 1.5rem; - text-align: center; -} - -.preset-card h6 { - margin-bottom: 0.5rem; - font-weight: 600; - color: #333; -} - -.preset-card p { - margin-bottom: 1rem; - color: #6c757d; - font-size: 0.875rem; - line-height: 1.4; -} - -.preset-params { - display: flex; - justify-content: center; - gap: 0.5rem; - flex-wrap: wrap; -} - -.preset-params .badge { - font-size: 0.7rem; - padding: 0.25rem 0.5rem; -} - -/* 预设模板模态框样式 */ -#presetModal .modal-dialog { - max-width: 1200px; -} - -#presetModal .modal-body { - max-height: 70vh; - overflow-y: auto; -} - -/* 预设规则分类标题 */ -#presetModal h6 { - font-weight: 600; - margin-bottom: 1rem; - padding-bottom: 0.5rem; - border-bottom: 2px solid; -} - -#presetModal h6.text-primary { - border-bottom-color: #007bff; -} - -#presetModal h6.text-success { - border-bottom-color: #28a745; -} - -#presetModal h6.text-info { - border-bottom-color: #17a2b8; -} - -#presetModal h6.text-warning { - border-bottom-color: #ffc107; -} - -/* 预设卡片图标样式 */ -.preset-card i { - transition: all 0.3s ease; -} - -.preset-card:hover i { - transform: scale(1.1); -} - -/* 预设卡片选中状态 */ -.preset-card.selected i { - color: #28a745 !important; -} - -.preset-card.selected h6 { - color: #28a745; -} - -/* 响应式预设卡片 */ -@media (max-width: 768px) { - .preset-card .card-body { - padding: 1rem; - } - - .preset-card h6 { - font-size: 0.9rem; - } - - .preset-card p { - font-size: 0.8rem; - } - - .preset-params .badge { - font-size: 0.65rem; - padding: 0.2rem 0.4rem; - } -} - -/* 预设规则快速选择 */ -.preset-quick-select { - display: flex; - gap: 0.5rem; - margin-bottom: 1rem; - flex-wrap: wrap; -} - -.preset-quick-select .btn { - font-size: 0.8rem; - padding: 0.25rem 0.75rem; -} - -/* 预设规则预览 */ -.preset-preview { - background-color: #f8f9fa; - border: 1px solid #e9ecef; - border-radius: 0.375rem; - padding: 1rem; - margin-top: 1rem; -} - -.preset-preview h6 { - color: #495057; - margin-bottom: 0.5rem; -} - -.preset-preview .preview-params { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: 0.5rem; -} - -.preset-preview .preview-param { - display: flex; - justify-content: space-between; - padding: 0.25rem 0; - border-bottom: 1px solid #e9ecef; -} - -.preset-preview .preview-param:last-child { - border-bottom: none; -} - -.preset-preview .preview-param strong { - color: #495057; - font-size: 0.875rem; -} - -.preset-preview .preview-param span { - color: #6c757d; - font-size: 0.8rem; -} +/* TSP助手预警管理系统样式 */ + +body { + background-color: #f8f9fa; + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; +} + +.navbar-brand { + font-weight: bold; + font-size: 1.5rem; +} + +/* 健康状态圆圈 */ +.health-score { + text-align: center; +} + +.score-circle { + width: 100px; + height: 100px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + margin: 0 auto 10px; + font-size: 1.5rem; + font-weight: bold; + color: white; + position: relative; +} + +.score-circle.excellent { + background: linear-gradient(135deg, #28a745, #20c997); +} + +.score-circle.good { + background: linear-gradient(135deg, #17a2b8, #6f42c1); +} + +.score-circle.fair { + background: linear-gradient(135deg, #ffc107, #fd7e14); +} + +.score-circle.poor { + background: linear-gradient(135deg, #dc3545, #e83e8c); +} + +.score-circle.critical { + background: linear-gradient(135deg, #6c757d, #343a40); +} + +.health-status { + font-size: 0.9rem; + color: #6c757d; + text-transform: capitalize; +} + +/* 预警卡片 */ +.alert-card { + border-left: 4px solid; + margin-bottom: 1rem; + transition: all 0.3s ease; +} + +.alert-card:hover { + transform: translateY(-2px); + box-shadow: 0 4px 8px rgba(0,0,0,0.1); +} + +.alert-card.critical { + border-left-color: #dc3545; +} + +.alert-card.error { + border-left-color: #fd7e14; +} + +.alert-card.warning { + border-left-color: #ffc107; +} + +.alert-card.info { + border-left-color: #17a2b8; +} + +.alert-level { + font-size: 0.8rem; + padding: 0.25rem 0.5rem; + border-radius: 0.25rem; + font-weight: bold; + text-transform: uppercase; +} + +.alert-level.critical { + background-color: #dc3545; + color: white; +} + +.alert-level.error { + background-color: #fd7e14; + color: white; +} + +.alert-level.warning { + background-color: #ffc107; + color: #212529; +} + +.alert-level.info { + background-color: #17a2b8; + color: white; +} + +/* 规则表格 */ +.table th { + background-color: #f8f9fa; + border-top: none; + font-weight: 600; +} + +.rule-status { + font-size: 0.8rem; + padding: 0.25rem 0.5rem; + border-radius: 0.25rem; +} + +.rule-status.enabled { + background-color: #d4edda; + color: #155724; +} + +.rule-status.disabled { + background-color: #f8d7da; + color: #721c24; +} + +/* 统计卡片动画 */ +.card { + transition: all 0.3s ease; +} + +.card:hover { + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(0,0,0,0.15); +} + +/* 按钮样式 */ +.btn { + border-radius: 0.375rem; + font-weight: 500; + transition: all 0.3s ease; +} + +.btn:hover { + transform: translateY(-1px); +} + +/* 加载动画 */ +.loading { + display: inline-block; + width: 20px; + height: 20px; + border: 3px solid #f3f3f3; + border-top: 3px solid #007bff; + border-radius: 50%; + animation: spin 1s linear infinite; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .container-fluid { + padding: 0 15px; + } + + .score-circle { + width: 80px; + height: 80px; + font-size: 1.2rem; + } + + .card-body { + padding: 1rem; + } +} + +/* 自定义滚动条 */ +::-webkit-scrollbar { + width: 8px; +} + +::-webkit-scrollbar-track { + background: #f1f1f1; + border-radius: 4px; +} + +::-webkit-scrollbar-thumb { + background: #c1c1c1; + border-radius: 4px; +} + +::-webkit-scrollbar-thumb:hover { + background: #a8a8a8; +} + +/* 状态指示器 */ +.status-indicator { + display: inline-block; + width: 8px; + height: 8px; + border-radius: 50%; + margin-right: 8px; +} + +.status-indicator.running { + background-color: #28a745; + animation: pulse 2s infinite; +} + +.status-indicator.stopped { + background-color: #dc3545; +} + +.status-indicator.unknown { + background-color: #6c757d; +} + +@keyframes pulse { + 0% { + box-shadow: 0 0 0 0 rgba(40, 167, 69, 0.7); + } + 70% { + box-shadow: 0 0 0 10px rgba(40, 167, 69, 0); + } + 100% { + box-shadow: 0 0 0 0 rgba(40, 167, 69, 0); + } +} + +/* 模态框样式 */ +.modal-content { + border-radius: 0.5rem; + border: none; + box-shadow: 0 10px 30px rgba(0,0,0,0.3); +} + +.modal-header { + border-bottom: 1px solid #e9ecef; + background-color: #f8f9fa; +} + +.modal-footer { + border-top: 1px solid #e9ecef; + background-color: #f8f9fa; +} + +/* 表格样式 */ +.table-hover tbody tr:hover { + background-color: rgba(0,123,255,0.1); +} + +/* 空状态样式 */ +.empty-state { + text-align: center; + padding: 3rem 1rem; + color: #6c757d; +} + +.empty-state i { + font-size: 3rem; + margin-bottom: 1rem; + opacity: 0.5; +} + +/* 工具提示样式 */ +.tooltip { + font-size: 0.875rem; +} + +.tooltip-inner { + background-color: #212529; + border-radius: 0.375rem; +} + +/* 进度条样式 */ +.progress { + height: 8px; + border-radius: 4px; +} + +.progress-bar { + border-radius: 4px; +} + +/* 徽章样式 */ +.badge { + font-size: 0.75rem; + padding: 0.375rem 0.5rem; +} + +/* 卡片标题样式 */ +.card-header h5 { + margin: 0; + font-weight: 600; +} + +.card-header h5 i { + color: #007bff; +} + +/* 统计数字样式 */ +.stat-number { + font-size: 2rem; + font-weight: bold; + line-height: 1; +} + +.stat-label { + font-size: 0.875rem; + opacity: 0.8; + margin-top: 0.25rem; +} + +/* 预警数据展示优化 */ +.alert-data { + background-color: #f8f9fa; + border: 1px solid #e9ecef; + border-radius: 4px; + padding: 8px; + font-family: 'Courier New', monospace; + font-size: 12px; + max-height: 100px; + overflow-y: auto; + white-space: pre-wrap; + word-break: break-all; +} + +.alert-message { + font-weight: 500; + margin-bottom: 8px; + line-height: 1.4; +} + +.alert-meta { + font-size: 12px; + color: #6c757d; + margin-bottom: 8px; +} + +/* 过滤和排序控件 */ +.alert-controls { + display: flex; + gap: 10px; + align-items: center; + flex-wrap: wrap; +} + +.alert-controls .form-select { + min-width: 120px; +} + +/* 预警卡片内容优化 */ +.alert-card .card-body { + padding: 1rem; +} + +.alert-card .d-flex { + align-items: flex-start; +} + +.alert-card .flex-grow-1 { + min-width: 0; +} + +/* 规则表格操作按钮 */ +.table .btn-sm { + padding: 0.25rem 0.5rem; + font-size: 0.75rem; + margin-right: 0.25rem; +} + +/* 响应式设计优化 */ +@media (max-width: 768px) { + .alert-controls { + flex-direction: column; + align-items: stretch; + } + + .alert-controls .form-select { + min-width: auto; + } + + .alert-card .d-flex { + flex-direction: column; + } + + .alert-card .ms-3 { + margin-left: 0 !important; + margin-top: 10px; + } + + .alert-data { + font-size: 10px; + max-height: 80px; + } +} + +/* 预警级别颜色优化 */ +.alert-card.critical { + background-color: #f8d7da; + border-color: #dc3545; +} + +.alert-card.error { + background-color: #fff3cd; + border-color: #fd7e14; +} + +.alert-card.warning { + background-color: #fff3cd; + border-color: #ffc107; +} + +.alert-card.info { + background-color: #d1ecf1; + border-color: #17a2b8; +} + +/* 预设规则卡片样式 */ +.preset-card { + cursor: pointer; + transition: all 0.3s ease; + border: 2px solid transparent; + height: 100%; +} + +.preset-card:hover { + transform: translateY(-5px); + box-shadow: 0 8px 25px rgba(0,0,0,0.15); + border-color: #007bff; +} + +.preset-card.selected { + border-color: #28a745; + background-color: #f8fff9; +} + +.preset-card .card-body { + padding: 1.5rem; + text-align: center; +} + +.preset-card h6 { + margin-bottom: 0.5rem; + font-weight: 600; + color: #333; +} + +.preset-card p { + margin-bottom: 1rem; + color: #6c757d; + font-size: 0.875rem; + line-height: 1.4; +} + +.preset-params { + display: flex; + justify-content: center; + gap: 0.5rem; + flex-wrap: wrap; +} + +.preset-params .badge { + font-size: 0.7rem; + padding: 0.25rem 0.5rem; +} + +/* 预设模板模态框样式 */ +#presetModal .modal-dialog { + max-width: 1200px; +} + +#presetModal .modal-body { + max-height: 70vh; + overflow-y: auto; +} + +/* 预设规则分类标题 */ +#presetModal h6 { + font-weight: 600; + margin-bottom: 1rem; + padding-bottom: 0.5rem; + border-bottom: 2px solid; +} + +#presetModal h6.text-primary { + border-bottom-color: #007bff; +} + +#presetModal h6.text-success { + border-bottom-color: #28a745; +} + +#presetModal h6.text-info { + border-bottom-color: #17a2b8; +} + +#presetModal h6.text-warning { + border-bottom-color: #ffc107; +} + +/* 预设卡片图标样式 */ +.preset-card i { + transition: all 0.3s ease; +} + +.preset-card:hover i { + transform: scale(1.1); +} + +/* 预设卡片选中状态 */ +.preset-card.selected i { + color: #28a745 !important; +} + +.preset-card.selected h6 { + color: #28a745; +} + +/* 响应式预设卡片 */ +@media (max-width: 768px) { + .preset-card .card-body { + padding: 1rem; + } + + .preset-card h6 { + font-size: 0.9rem; + } + + .preset-card p { + font-size: 0.8rem; + } + + .preset-params .badge { + font-size: 0.65rem; + padding: 0.2rem 0.4rem; + } +} + +/* 预设规则快速选择 */ +.preset-quick-select { + display: flex; + gap: 0.5rem; + margin-bottom: 1rem; + flex-wrap: wrap; +} + +.preset-quick-select .btn { + font-size: 0.8rem; + padding: 0.25rem 0.75rem; +} + +/* 预设规则预览 */ +.preset-preview { + background-color: #f8f9fa; + border: 1px solid #e9ecef; + border-radius: 0.375rem; + padding: 1rem; + margin-top: 1rem; +} + +.preset-preview h6 { + color: #495057; + margin-bottom: 0.5rem; +} + +.preset-preview .preview-params { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 0.5rem; +} + +.preset-preview .preview-param { + display: flex; + justify-content: space-between; + padding: 0.25rem 0; + border-bottom: 1px solid #e9ecef; +} + +.preset-preview .preview-param:last-child { + border-bottom: none; +} + +.preset-preview .preview-param strong { + color: #495057; + font-size: 0.875rem; +} + +.preset-preview .preview-param span { + color: #6c757d; + font-size: 0.8rem; +} + + +/* fpencaSGr7h_ */ +.vehicle-data-card { + background: linear-gradient(135deg, #e8f5e8, #f0f8f0); + border: 1px solid #4caf50; + border-radius: 10px; + margin: 10px 0; + padding: 15px; + box-shadow: 0 2px 10px rgba(76, 175, 80, 0.1); +} + +.vehicle-data-header { + border-bottom: 1px solid #4caf50; + padding-bottom: 10px; + margin-bottom: 15px; +} + +.vehicle-data-header h5 { + color: #2e7d32; + margin: 0; + font-size: 1.1rem; +} + +.vehicle-data-content { + padding: 0; +} + +.vehicle-info { + background: white; + border-radius: 8px; + padding: 12px; + margin-bottom: 10px; + border-left: 4px solid #4caf50; +} + +.vehicle-info h6 { + color: #1976d2; + margin-bottom: 8px; + font-size: 1rem; +} + +.vehicle-details p { + margin: 5px 0; + font-size: 0.9rem; + color: #333; +} + +.vehicle-details strong { + color: #2e7d32; +} + +.vehicle-error { + background: #ffebee; + color: #c62828; + padding: 10px; + border-radius: 5px; + border-left: 4px solid #f44336; + font-style: italic; +} + \ No newline at end of file diff --git a/src/web/static/js/dashboard.js b/src/web/static/js/dashboard.js index 460b726..8e9430c 100644 --- a/src/web/static/js/dashboard.js +++ b/src/web/static/js/dashboard.js @@ -13,6 +13,65 @@ class TSPDashboard { this.restorePageState(); } + async generateAISuggestion(workorderId) { + try { + const resp = await fetch(`/api/workorders/${workorderId}/ai-suggestion`, { method: 'POST' }); + const data = await resp.json(); + if (data.success) { + const ta = document.getElementById(`aiSuggestion_${workorderId}`); + if (ta) ta.value = data.ai_suggestion || ''; + this.showNotification('AI建议已生成', 'success'); + } else { + throw new Error(data.error || '生成失败'); + } + } catch (e) { + console.error('生成AI建议失败:', e); + this.showNotification('生成AI建议失败: ' + e.message, 'error'); + } + } + + async saveHumanResolution(workorderId) { + try { + const text = document.getElementById(`humanResolution_${workorderId}`).value.trim(); + if (!text) { this.showNotification('请输入人工描述', 'warning'); return; } + const resp = await fetch(`/api/workorders/${workorderId}/human-resolution`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ human_resolution: text }) + }); + const data = await resp.json(); + if (data.success) { + const simEl = document.getElementById(`aiSim_${workorderId}`); + const apprEl = document.getElementById(`aiApproved_${workorderId}`); + const approveBtn = document.getElementById(`approveBtn_${workorderId}`); + const percent = Math.round((data.similarity || 0) * 100); + if (simEl) { simEl.textContent = `相似度: ${percent}%`; simEl.className = `badge ${percent>=95?'bg-success':percent>=70?'bg-warning':'bg-secondary'}`; } + if (apprEl) { apprEl.textContent = data.approved ? '已自动审批' : '未审批'; apprEl.className = `badge ${data.approved?'bg-success':'bg-secondary'}`; } + if (approveBtn) approveBtn.disabled = !data.approved; + this.showNotification('人工描述已保存并评估完成', 'success'); + } else { + throw new Error(data.error || '保存失败'); + } + } catch (e) { + console.error('保存人工描述失败:', e); + this.showNotification('保存人工描述失败: ' + e.message, 'error'); + } + } + + async approveToKnowledge(workorderId) { + try { + const resp = await fetch(`/api/workorders/${workorderId}/approve-to-knowledge`, { method: 'POST' }); + const data = await resp.json(); + if (data.success) { + this.showNotification('已入库为知识条目', 'success'); + } else { + throw new Error(data.error || '入库失败'); + } + } catch (e) { + console.error('入库失败:', e); + this.showNotification('入库失败: ' + e.message, 'error'); + } + } init() { this.bindEvents(); this.loadInitialData(); @@ -99,6 +158,27 @@ class TSPDashboard { e.preventDefault(); this.saveSystemSettings(); }); + + // API测试按钮事件 + const testApiBtn = document.getElementById('test-api-connection'); + if (testApiBtn) { + testApiBtn.addEventListener('click', () => this.testApiConnection()); + } + + const testModelBtn = document.getElementById('test-model-response'); + if (testModelBtn) { + testModelBtn.addEventListener('click', () => this.testModelResponse()); + } + + // 重启服务按钮事件 + const restartBtn = document.getElementById('restart-service'); + if (restartBtn) { + restartBtn.addEventListener('click', () => { + if (confirm('确定要重启服务吗?这将中断当前连接。')) { + this.showNotification('重启服务功能待实现', 'info'); + } + }); + } } switchTab(tabName) { @@ -180,10 +260,10 @@ class TSPDashboard { } startAutoRefresh() { - // 每5秒刷新健康状态 + // 每15秒刷新健康状态(减少 /api/health 日志) this.refreshIntervals.health = setInterval(() => { this.loadHealth(); - }, 5000); + }, 15000); // 每10秒刷新当前标签页数据 this.refreshIntervals.currentTab = setInterval(() => { @@ -305,7 +385,10 @@ class TSPDashboard { document.getElementById('knowledge-confidence').textContent = `${confidencePercent}%`; // 更新性能图表 - this.updatePerformanceChart(sessions, alerts, workorders); + await this.updatePerformanceChart(sessions, alerts, workorders); + + // 更新系统健康状态 + await this.updateSystemHealth(); } catch (error) { console.error('加载仪表板数据失败:', error); @@ -323,13 +406,13 @@ class TSPDashboard { data: { labels: [], datasets: [{ - label: '活跃会话', + label: '工单数量', data: [], borderColor: '#007bff', backgroundColor: 'rgba(0, 123, 255, 0.1)', tension: 0.4 }, { - label: '活跃预警', + label: '预警数量', data: [], borderColor: '#dc3545', backgroundColor: 'rgba(220, 53, 69, 0.1)', @@ -407,26 +490,96 @@ class TSPDashboard { } } - updatePerformanceChart(sessions, alerts, workorders) { + async updatePerformanceChart(sessions, alerts, workorders) { if (!this.charts.performance) return; - const now = new Date(); - const labels = []; - const sessionData = []; - const alertData = []; - - // 生成过去24小时的数据点 - for (let i = 23; i >= 0; i--) { - const time = new Date(now.getTime() - i * 60 * 60 * 1000); - labels.push(time.getHours() + ':00'); - sessionData.push(Math.floor(Math.random() * 10) + 5); // 模拟数据 - alertData.push(Math.floor(Math.random() * 5)); // 模拟数据 + try { + // 获取真实的分析数据 + const response = await fetch('/api/analytics?days=7&dimension=performance'); + const analyticsData = await response.json(); + + if (analyticsData.trend && analyticsData.trend.length > 0) { + // 使用真实数据 + const labels = analyticsData.trend.map(item => { + const date = new Date(item.date); + return `${date.getMonth() + 1}/${date.getDate()}`; + }); + + const workorderData = analyticsData.trend.map(item => item.workorders || 0); + const alertData = analyticsData.trend.map(item => item.alerts || 0); + + this.charts.performance.data.labels = labels; + this.charts.performance.data.datasets[0].data = workorderData; + this.charts.performance.data.datasets[1].data = alertData; + this.charts.performance.update(); + } else { + // 如果没有真实数据,显示提示 + this.charts.performance.data.labels = ['暂无数据']; + this.charts.performance.data.datasets[0].data = [0]; + this.charts.performance.data.datasets[1].data = [0]; + this.charts.performance.update(); + } + } catch (error) { + console.error('获取性能趋势数据失败:', error); + // 出错时显示空数据 + this.charts.performance.data.labels = ['数据加载失败']; + this.charts.performance.data.datasets[0].data = [0]; + this.charts.performance.data.datasets[1].data = [0]; + this.charts.performance.update(); } + } - this.charts.performance.data.labels = labels; - this.charts.performance.data.datasets[0].data = sessionData; - this.charts.performance.data.datasets[1].data = alertData; - this.charts.performance.update(); + // 更新系统健康状态显示 + async updateSystemHealth() { + try { + const response = await fetch('/api/settings'); + const settings = await response.json(); + + // 更新健康分数 + const healthScore = Math.max(0, 100 - (settings.memory_usage_percent || 0) - (settings.cpu_usage_percent || 0)); + const healthProgress = document.getElementById('health-progress'); + const healthDot = document.getElementById('system-health-dot'); + const healthText = document.getElementById('system-health-text'); + + if (healthProgress) { + healthProgress.style.width = `${healthScore}%`; + healthProgress.setAttribute('aria-valuenow', healthScore); + } + + if (healthDot) { + healthDot.className = 'health-dot'; + if (healthScore >= 80) healthDot.classList.add('excellent'); + else if (healthScore >= 60) healthDot.classList.add('good'); + else if (healthScore >= 40) healthDot.classList.add('fair'); + else if (healthScore >= 20) healthDot.classList.add('poor'); + else healthDot.classList.add('critical'); + } + + if (healthText) { + const statusText = healthScore >= 80 ? '优秀' : + healthScore >= 60 ? '良好' : + healthScore >= 40 ? '一般' : + healthScore >= 20 ? '较差' : '严重'; + healthText.textContent = `${statusText} (${healthScore}%)`; + } + + // 更新内存使用 + const memoryProgress = document.getElementById('memory-progress'); + if (memoryProgress && settings.memory_usage_percent !== undefined) { + memoryProgress.style.width = `${settings.memory_usage_percent}%`; + memoryProgress.setAttribute('aria-valuenow', settings.memory_usage_percent); + } + + // 更新CPU使用 + const cpuProgress = document.getElementById('cpu-progress'); + if (cpuProgress && settings.cpu_usage_percent !== undefined) { + cpuProgress.style.width = `${settings.cpu_usage_percent}%`; + cpuProgress.setAttribute('aria-valuenow', settings.cpu_usage_percent); + } + + } catch (error) { + console.error('更新系统健康状态失败:', error); + } } // 对话功能 @@ -506,6 +659,9 @@ class TSPDashboard { this.addMessage('user', message); messageInput.value = ''; + // 显示占位提示:小奇正在查询中 + const typingId = this.showTypingIndicator(); + // 发送消息到服务器 try { const response = await fetch('/api/chat/message', { @@ -521,16 +677,70 @@ class TSPDashboard { const data = await response.json(); if (data.success) { - this.addMessage('assistant', data.response, data.knowledge_used); + this.updateTypingIndicator(typingId, data.response, data.knowledge_used); } else { - this.addMessage('assistant', '抱歉,处理您的消息时出现了错误。', null, true); + this.updateTypingIndicator(typingId, '抱歉,处理您的消息时出现了错误。', null, true); } } catch (error) { console.error('发送消息失败:', error); - this.addMessage('assistant', '网络连接错误,请稍后重试。', null, true); + this.updateTypingIndicator(typingId, '网络连接错误,请稍后重试。', null, true); } } + showTypingIndicator() { + const messagesContainer = document.getElementById('chat-messages'); + const id = `typing-${Date.now()}`; + const messageDiv = document.createElement('div'); + messageDiv.className = 'message assistant'; + messageDiv.id = id; + const avatar = document.createElement('div'); + avatar.className = 'message-avatar'; + avatar.innerHTML = ''; + const contentDiv = document.createElement('div'); + contentDiv.className = 'message-content'; + contentDiv.innerHTML = ` +
小奇正在查询中,请稍后…
+
${new Date().toLocaleTimeString()}
+ `; + messageDiv.appendChild(avatar); + messageDiv.appendChild(contentDiv); + messagesContainer.appendChild(messageDiv); + messagesContainer.scrollTop = messagesContainer.scrollHeight; + return id; + } + + updateTypingIndicator(typingId, content, knowledgeUsed = null, isError = false) { + const node = document.getElementById(typingId); + if (!node) { + // 回退:若占位不存在则直接追加 + this.addMessage('assistant', content, knowledgeUsed, isError); + return; + } + const contentDiv = node.querySelector('.message-content'); + if (contentDiv) { + contentDiv.innerHTML = ` +
${content}
+
${new Date().toLocaleTimeString()}
+ `; + if (knowledgeUsed && knowledgeUsed.length > 0) { + const knowledgeDiv = document.createElement('div'); + knowledgeDiv.className = 'knowledge-info'; + knowledgeDiv.innerHTML = ` + + 使用了知识库: ${knowledgeUsed.map(k => k.question || k.source || '实时数据').join(', ')} + `; + contentDiv.appendChild(knowledgeDiv); + } + if (isError) { + contentDiv.style.borderLeft = '4px solid #dc3545'; + } else { + contentDiv.style.borderLeft = ''; + } + } + const messagesContainer = document.getElementById('chat-messages'); + messagesContainer.scrollTop = messagesContainer.scrollHeight; + } + addMessage(role, content, knowledgeUsed = null, isError = false) { const messagesContainer = document.getElementById('chat-messages'); @@ -603,16 +813,21 @@ class TSPDashboard { async loadAgentData() { try { - const response = await fetch('/api/agent/status'); - const data = await response.json(); + const [statusResp, toolsResp] = await Promise.all([ + fetch('/api/agent/status'), + fetch('/api/agent/tools/stats') + ]); + const data = await statusResp.json(); + const toolsData = await toolsResp.json(); if (data.success) { document.getElementById('agent-current-state').textContent = data.status || '未知'; document.getElementById('agent-active-goals').textContent = data.active_goals || 0; - document.getElementById('agent-available-tools').textContent = data.available_tools || 0; + const tools = (toolsData.success ? toolsData.tools : (data.tools || [])) || []; + document.getElementById('agent-available-tools').textContent = tools.length || 0; - // 更新工具列表 - this.updateToolsList(data.tools || []); + // 更新工具列表(使用真实统计) + this.updateToolsList(tools); // 更新执行历史 this.updateAgentExecutionHistory(data.execution_history || []); @@ -624,27 +839,64 @@ class TSPDashboard { updateToolsList(tools) { const toolsList = document.getElementById('tools-list'); - if (tools.length === 0) { + if (!tools || tools.length === 0) { toolsList.innerHTML = '

暂无工具

'; return; } - const toolsHtml = tools.map(tool => ` -
-
- ${tool.name} -
- 使用次数: ${tool.usage_count || 0} + const toolsHtml = tools.map(tool => { + const usage = tool.usage_count || 0; + const success = Math.round((tool.success_rate || 0) * 100); + const meta = tool.metadata || {}; + return ` +
+
+ ${tool.name} + ${meta.description ? `
${meta.description}
` : ''} + 使用次数: ${usage} +
+
+ ${success}% +
-
- - ${Math.round((tool.success_rate || 0) * 100)}% - -
-
- `).join(''); + `; + }).join(''); toolsList.innerHTML = toolsHtml; + + // 追加自定义工具注册入口 + const addDiv = document.createElement('div'); + addDiv.className = 'mt-3'; + addDiv.innerHTML = ` +
+ + + +
+ `; + toolsList.appendChild(addDiv); + document.getElementById('register-tool-btn').addEventListener('click', async () => { + const name = document.getElementById('custom-tool-name').value.trim(); + const description = document.getElementById('custom-tool-desc').value.trim(); + if (!name) { this.showNotification('请输入工具名称', 'warning'); return; } + try { + const resp = await fetch('/api/agent/tools/register', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ name, description }) + }); + const res = await resp.json(); + if (res.success) { + this.showNotification('工具注册成功', 'success'); + this.loadAgentData(); + } else { + this.showNotification(res.error || '工具注册失败', 'error'); + } + } catch (e) { + console.error('注册工具失败:', e); + this.showNotification('注册工具失败', 'error'); + } + }); } updateExecutionHistory(history) { @@ -1349,6 +1601,32 @@ class TSPDashboard { ${workorder.satisfaction_score}/5.0
` : ''} +
AI建议与人工描述
+
+
+ +
+
+ + +
+
+ + +
+
+ + 相似度: -- + 未审批 + +
+
@@ -1582,22 +1860,19 @@ class TSPDashboard { async downloadTemplate() { try { - const response = await fetch('/api/workorders/import/template'); - const result = await response.json(); - - if (result.success) { - // 创建下载链接 - const link = document.createElement('a'); - link.href = result.template_url; - link.download = '工单导入模板.xlsx'; - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); - - this.showNotification('模板下载成功', 'success'); - } else { - throw new Error(result.error || '下载模板失败'); - } + // 直接请求文件接口,避免浏览器跨源/权限限制 + const resp = await fetch('/api/workorders/import/template/file'); + if (!resp.ok) throw new Error('下载接口返回错误'); + const blob = await resp.blob(); + const blobUrl = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = blobUrl; + a.download = '工单导入模板.xlsx'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + window.URL.revokeObjectURL(blobUrl); + this.showNotification('模板下载成功', 'success'); } catch (error) { console.error('下载模板失败:', error); this.showNotification('下载模板失败: ' + error.message, 'error'); @@ -2348,11 +2623,40 @@ class TSPDashboard { } updateSettingsDisplay(settings) { - if (settings.api_timeout) document.getElementById('api-timeout').value = settings.api_timeout; - if (settings.max_history) document.getElementById('max-history').value = settings.max_history; - if (settings.refresh_interval) document.getElementById('refresh-interval').value = settings.refresh_interval; + if (settings.api_timeout !== undefined) document.getElementById('api-timeout').value = settings.api_timeout; + if (settings.max_history !== undefined) document.getElementById('max-history').value = settings.max_history; + if (settings.refresh_interval !== undefined) document.getElementById('refresh-interval').value = settings.refresh_interval; if (settings.auto_monitoring !== undefined) document.getElementById('auto-monitoring').checked = settings.auto_monitoring; if (settings.agent_mode !== undefined) document.getElementById('agent-mode').checked = settings.agent_mode; + // 新增:API与模型、端口、日志级别(如页面存在对应输入框则填充) + const map = [ + ['api-provider','api_provider'], + ['api-base-url','api_base_url'], + ['api-key','api_key'], + ['model-name','model_name'], + ['model-temperature','model_temperature'], + ['model-max-tokens','model_max_tokens'], + ['server-port','server_port'], + ['websocket-port','websocket_port'], + ['log-level','log_level'] + ]; + map.forEach(([id, key]) => { + const el = document.getElementById(id); + if (el && settings[key] !== undefined) el.value = settings[key]; + }); + + // 更新温度滑块显示值 + const tempSlider = document.getElementById('model-temperature'); + const tempValue = document.getElementById('temperature-value'); + if (tempSlider && tempValue) { + tempSlider.addEventListener('input', function() { + tempValue.textContent = this.value; + }); + tempValue.textContent = tempSlider.value; + } + + // 更新服务状态显示 + this.updateServiceStatus(settings); } async saveSystemSettings() { @@ -2361,7 +2665,16 @@ class TSPDashboard { max_history: parseInt(document.getElementById('max-history').value), refresh_interval: parseInt(document.getElementById('refresh-interval').value), auto_monitoring: document.getElementById('auto-monitoring').checked, - agent_mode: document.getElementById('agent-mode').checked + agent_mode: document.getElementById('agent-mode').checked, + api_provider: document.getElementById('api-provider')?.value || '', + api_base_url: document.getElementById('api-base-url')?.value || '', + api_key: document.getElementById('api-key')?.value || '', + model_name: document.getElementById('model-name')?.value || '', + model_temperature: parseFloat(document.getElementById('model-temperature')?.value || 0.7), + model_max_tokens: parseInt(document.getElementById('model-max-tokens')?.value || 1000), + server_port: parseInt(document.getElementById('server-port')?.value || 5000), + websocket_port: parseInt(document.getElementById('websocket-port')?.value || 8765), + log_level: document.getElementById('log-level')?.value || 'INFO' }; try { @@ -2385,6 +2698,113 @@ class TSPDashboard { } } + // 更新服务状态显示 + updateServiceStatus(settings) { + // 更新仪表板服务状态卡片 + if (settings.current_server_port !== undefined) { + const webPortEl = document.getElementById('web-port-status'); + if (webPortEl) webPortEl.textContent = settings.current_server_port; + } + if (settings.current_websocket_port !== undefined) { + const wsPortEl = document.getElementById('ws-port-status'); + if (wsPortEl) wsPortEl.textContent = settings.current_websocket_port; + } + if (settings.log_level !== undefined) { + const logLevelEl = document.getElementById('log-level-status'); + if (logLevelEl) logLevelEl.textContent = settings.log_level; + } + if (settings.uptime_seconds !== undefined) { + const uptimeEl = document.getElementById('uptime-status'); + if (uptimeEl) { + const hours = Math.floor(settings.uptime_seconds / 3600); + const minutes = Math.floor((settings.uptime_seconds % 3600) / 60); + uptimeEl.textContent = `${hours}小时${minutes}分钟`; + } + } + + // 更新系统设置页面的当前端口显示 + const currentPortEl = document.getElementById('current-server-port'); + if (currentPortEl && settings.current_server_port !== undefined) { + currentPortEl.textContent = settings.current_server_port; + } + } + + // 刷新服务状态 + async refreshServiceStatus() { + try { + const response = await fetch('/api/settings'); + const settings = await response.json(); + this.updateServiceStatus(settings); + this.showNotification('服务状态已刷新', 'success'); + } catch (error) { + console.error('刷新服务状态失败:', error); + this.showNotification('刷新服务状态失败', 'error'); + } + } + + // 测试API连接 + async testApiConnection() { + try { + const apiProvider = document.getElementById('api-provider').value; + const apiBaseUrl = document.getElementById('api-base-url').value; + const apiKey = document.getElementById('api-key').value; + const modelName = document.getElementById('model-name').value; + + const response = await fetch('/api/test/connection', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + api_provider: apiProvider, + api_base_url: apiBaseUrl, + api_key: apiKey, + model_name: modelName + }) + }); + + const result = await response.json(); + if (result.success) { + this.showNotification(`API连接测试成功: ${result.message}`, 'success'); + } else { + this.showNotification(`API连接测试失败: ${result.error}`, 'error'); + } + } catch (error) { + console.error('API连接测试失败:', error); + this.showNotification('API连接测试失败', 'error'); + } + } + + // 测试模型回答 + async testModelResponse() { + try { + const testMessage = prompt('请输入测试消息:', '你好,请简单介绍一下你自己'); + if (!testMessage) return; + + const response = await fetch('/api/test/model', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + test_message: testMessage + }) + }); + + const result = await response.json(); + if (result.success) { + const message = `模型回答测试成功:\n\n问题: ${result.test_message}\n\n回答: ${result.response}\n\n响应时间: ${result.response_time}`; + alert(message); + this.showNotification('模型回答测试成功', 'success'); + } else { + this.showNotification(`模型回答测试失败: ${result.error}`, 'error'); + } + } catch (error) { + console.error('模型回答测试失败:', error); + this.showNotification('模型回答测试失败', 'error'); + } + } + async loadSystemInfo() { try { const response = await fetch('/api/system/info'); diff --git a/src/web/templates/dashboard.html b/src/web/templates/dashboard.html index 6febed6..2ba5654 100644 --- a/src/web/templates/dashboard.html +++ b/src/web/templates/dashboard.html @@ -461,7 +461,7 @@
-
+
系统性能趋势
@@ -473,7 +473,7 @@
-
+
系统健康状态
@@ -504,6 +504,44 @@
+
+
+
+
服务运行状态
+
+
+
+
+ Web服务端口 + 5000 +
+
+
+
+ WebSocket端口 + 8765 +
+
+
+
+ 日志级别 + INFO +
+
+
+
+ 运行时间 + 计算中... +
+
+
+ +
+
+
+
@@ -1148,10 +1186,11 @@