feat(offline): 问题排查助手离线 Q&A 模式和容器化部署
离线模式:OFFLINE_MODE 环境变量控制,跳过 Claude API 直接返回 TF-IDF 匹配结果
容器化:Dockerfile + docker-compose.yml + requirements.txt + .dockerignore
同进程依赖:补 cryptography/paramiko(service_monitor 子包依赖,PRD §4.6)
详细变更:
- utils/offline_config.py:离线开关读取(env OFFLINE_MODE → bool,进程级缓存)
- services/ai_service.py:新增 build_offline_response(),兼容原始/格式化两种输入
- routes/troubleshoot.py:troubleshoot/analyze/analyze_stream/health 四处离线分支
- 离线流式保留 SSE 协议,单帧推送后 close(前端无需改动)
- 离线跳过缓存读写(<1s 无需缓存)
- health 响应新增 offline_mode 字段
- tests/test_offline_mode.py:22 用例全绿(离线配置/响应构建/路由/回归)
- Dockerfile:python:3.10-slim,gunicorn 多 worker,WORKDIR /app/web
- docker-compose.yml:restart always,records/users/config 只读挂载,logs 持久化
- .dockerignore:排除 搜索向量.json(强制 TF-IDF),排除测试/缓存/临时文件
- requirements.txt:flask/gunicorn/scikit-learn/scipy/numpy/jieba/werkzeug/requests
+ cryptography/paramiko(同进程 service_monitor 硬依赖)
- .env.example:补 OFFLINE_MODE 说明
- PRD v2.2 + 计划执行文档(增加 §4.6 同进程依赖耦合说明 + T8 任务)
测试:新增 22 用例全绿,回归 218 全绿(问题排查助手 167 + service_monitor 51)
隔离:未改 service_monitor / service_manage 代码,仅补其依赖到 requirements
Co-Authored-By:
Claude <noreply@anthropic.com>
正在显示
.dockerignore
0 → 100644
Dockerfile
0 → 100644
docker-compose.yml
0 → 100644
requirements.txt
0 → 100644
| flask==3.0.3 | ||
| gunicorn==22.0.0 | ||
| scikit-learn==1.4.2 | ||
| scipy==1.13.0 | ||
| numpy==1.26.4 | ||
| jieba==0.42.1 | ||
| werkzeug==3.0.3 | ||
| requests==2.32.3 | ||
| # 同进程 service_monitor 子包依赖(PRD §4.6) | ||
| # cryptography 模块级导入,缺失则 create_app() 启动即崩,连累问题排查助手 | ||
| # paramiko 延迟导入(SSH 监测时),缺失则用到时崩 | ||
| # 版本以本地实测通过为准(service_monitor 51 用例 + 问题排查助手 167 用例全绿) | ||
| cryptography==46.0.7 | ||
| paramiko==4.0.0 |
请
注册
或者
登录
后发表评论