diff --git a/PROGRESS.md b/PROGRESS.md index adcdab2..02fa0da 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -1,13 +1,13 @@ # 项目进度追踪 -> 最后更新: 2026-08-20 11:20 +> 最后更新: 2026-08-20 12:16 ## 服务运行状态 | 服务 | 节点 | 地址 | 状态 | 验证结果 | |------|------|------|------|---------| -| FAM-Core | NAS | 0.0.0.0:8000 | ✅ 运行中 | health=ok, Python 3.10 venv, API 全部测试通过 | -| FAM-Edge | Oracle | 0.0.0.0:5000 | ✅ 运行中 | 新架构已部署(云端直出直存);`/api/edge/chat/ask` 实测 provider=nvidia(Gemini→NVIDIA 降级成功) | +| FAM-Core | NAS | 0.0.0.0:8000 | ✅ 运行中 | health=ok, gunicorn --threads 4, scheduler+dispatcher+poller 全部 running | +| FAM-Edge | Oracle | 0.0.0.0:5000 | ✅ 运行中 | v2.0, SQLite 异步队列 + 消费者线程 + TokenBucket 速率限制 | | MariaDB | NAS | 127.0.0.1:3306 | ✅ 运行中 | 10.11.11, 6 张表, utf8mb4 | | Ollama | Oracle | 127.0.0.1:11434 | ✅ 运行中 | qwen2.5:7b,仅智能问答兜底(不参与视觉/融合) | | Tailscale | Oracle ↔ NAS | 100.74 ↔ 100.70 | ⚠️ 待修复 | Tailscale 运行但端口不通,当前用公网IP | @@ -120,14 +120,20 @@ | 40 | **fix: Gemini timeout 30s→90s + 熔断器 threshold 3→5 cooldown 600→300** | `853cb21` | 2026-08-20 | | 41 | **fix: dispatcher crash on invalid failure_stage** — Edge 返回 'process' 不在 ENUM 中导致 DataError 崩溃,db_layer 加容错映射 + dispatcher per-task try/except | `d75c745` | 2026-08-20 | | 42 | **视频管线批量处理验证** — task 291/297 SUCCESS,NVIDIA 6 帧分析 ~15s/任务,events + event_details 落库正确 | ✅ 完成 | 2026-08-20 | +| 43 | **异步任务队列架构** — Edge 端 SQLite 队列 + TokenBucket 速率限制 (Gemini 1000 RPM, NVIDIA 40 RPM, burst 2x) + 消费者线程 | `02da23e` | 2026-08-20 | +| 44 | **NAS Dispatcher 重构为 enqueue 模式** — 上传视频后立即返回 202,不等 AI 处理结果 | `02da23e` | 2026-08-20 | +| 45 | **NAS Poller 线程** — 定期从 Edge /api/edge/results 拉取处理结果写 MariaDB | `02da23e` | 2026-08-20 | +| 46 | **fix: dispatcher/poller 超时分离模式** — timeout 改为 (connect, read) 元组,stale_timeout 3600→600s | `4f0f19b` | 2026-08-20 | +| 47 | **异步队列端到端验证** — task 312 (5.7MB e2e clip): 上传38s + Edge处理54s + Poller落库 = 93s 总耗时,event_id=12 落库 PASS | ✅ 完成 | 2026-08-20 | ### 待完成 | # | 任务 | 依赖 | 优先级 | |---|------|------|--------| -| 43 | 单元测试 (JSON parser, circuit breaker, schema) | - | 中 | -| 44 | Tailscale 防火墙修复 (NAS↔Oracle) | - | 低 | -| 45 | daily_summaries 每日摘要 | - | 低 | +| 48 | 单元测试 (JSON parser, circuit breaker, schema) | - | 中 | +| 49 | Tailscale 防火墙修复 (NAS↔Oracle) | - | 低 | +| 50 | daily_summaries 每日摘要 | - | 低 | +| 51 | **视频预压缩** — 360MB 生产视频 HTTP 上传超时/断连,需在 NAS 端预压缩后再上传 Edge | - | 高 | ## 技术决策记录 @@ -143,7 +149,10 @@ 10. **关键帧自适应帧数** - 原固定 5-8 帧对长视频太稀疏(30分钟仅8帧=每3.75分钟1帧),改为随视频时长自适应:候选帧 `clamp(duration_min×2, 30, 120)`,关键帧上限 `clamp(duration/150s, 8, 30)`。30分钟→12帧,60分钟→24帧,封顶30帧 11. **云端直出直存(架构重构)** - 本地 Ollama 完全移出视频链路:云端 VLM(Gemini 多图单请求 / NVIDIA 逐帧聚合)直接产出结构化 JSON,Edge 仅 `format_cloud_result` 格式化/校验(无模型调用)后直存 NAS DB。根因:CPU 版 Ollama 对无上限融合 prompt 预填充极慢导致 300s 超时 12. **Q&A 三模型降级编排** - 智能问答由 Edge `run_qa` 编排:Gemini → NVIDIA → 本地 Ollama(仅两云端都失败才启用本地兜底);各适配器实现 `chat()` 纯文本接口 -11. **FFmpeg 快速 seek 替代 fps 滤镜** - 原方案 `ffmpeg -vf fps=1/interval` 需全解码视频,30min 360MB 视频在 ARM CPU 上需 180s+(超 120s 超时)。改为逐帧 `ffmpeg -ss -frames:v 1` 快速 seek,仅 33s(6-8x 提速) +13. **FFmpeg 快速 seek 替代 fps 滤镜** - 原方案 `ffmpeg -vf fps=1/interval` 需全解码视频,30min 360MB 视频在 ARM CPU 上需 180s+(超 120s 超时)。改为逐帧 `ffmpeg -ss -frames:v 1` 快速 seek,仅 33s(6-8x 提速) +14. **异步任务队列架构 (SQLite + TokenBucket)** - 原 Dispatcher 同步推送 360MB 视频至 Edge 等待 AI 处理,单任务阻塞 15+ 分钟导致后续任务积压。重构为:NAS Dispatcher 仅上传视频入 Edge SQLite 队列(202 立即返回)→ Edge 消费者线程异步处理(TokenBucket 按 API 限制 2x 速率:Gemini 1000 RPM / NVIDIA 40 RPM)→ NAS Poller 定期拉取结果写 MariaDB。e2e 验证:5.7MB 视频全链路 93s (上传 38s + 处理 54s + 落库 1s) +15. **超时分离模式** - `requests.post(timeout=300)` 对大文件上传无总超时限制(per-write 不触发),改为 `timeout=(10, 60)` 分离连接/读取超时,配合 stale_timeout 600s 回收僵尸任务 +16. **生产视频预压缩(待实施)** - 360MB 30min 1080p H.264 视频跨公网 HTTP 上传超时/断连,需在 NAS 端 FFmpeg 预压缩(降分辨率/码率)后再上传 ## 真实视频性能基准测试 (2026-08-20)