docs(README/PROGRESS): 文档收尾,与架构重构代码对齐

1. README 8.3 节:fam-core 配置示例更新(video_dir 生产路径 + chat_handler.qa_url),fam-edge 配置示例对齐新架构(role/usage=qa_fallback、gemini-flash-latest、实际 timeout)
2. README 1.3 节:历史视频积压标记已处理(forward-only);吞吐不足表述更新(无本地融合)
3. README 5.3 节:改名为云端结构化输出 JSON Schema,描述适配器解析 + format_cloud_result 校验两阶段
4. README 6.2 节:移除融合 timeout 行,num_predict 更新为 512,已知问题改述为专职问答兜底
5. README 10.5/10.6 节:Gemini 模型名修正为 gemini-flash-latest;NVIDIA 验证状态更新为已验证
6. README 12 节:架构重构与双端部署验证纳入已完成;v1.1 待办移除已完成项 1-5,保留单元测试/Tailscale/daily_summaries
7. PROGRESS.md:服务状态表更新(新架构、qwen2.5:7b);任务进度追加 32-38;技术决策记录追加云端直出直存与 Q&A 降级;聊天链路验证段更新为 run_qa 编排
This commit is contained in:
ericwyuan
2026-08-20 10:45:29 +08:00
parent babf5b09a9
commit 2e43afb6b2
2 changed files with 73 additions and 62 deletions

View File

@@ -1,15 +1,15 @@
# 项目进度追踪
> 最后更新: 2026-08-20 02:10
> 最后更新: 2026-08-20 10:45
## 服务运行状态
| 服务 | 节点 | 地址 | 状态 | 验证结果 |
|------|------|------|------|---------|
| FAM-Core | NAS | 0.0.0.0:8000 | ✅ 运行中 | health=ok, Python 3.10 venv, API 全部测试通过 |
| FAM-Edge | Oracle | 0.0.0.0:5000 | ✅ 运行中 | health=ok, chat proxy 已验证 |
| FAM-Edge | Oracle | 0.0.0.0:5000 | ✅ 运行中 | 新架构已部署(云端直出直存);`/api/edge/chat/ask` 实测 provider=nvidiaGemini→NVIDIA 降级成功) |
| MariaDB | NAS | 127.0.0.1:3306 | ✅ 运行中 | 10.11.11, 6 张表, utf8mb4 |
| Ollama | Oracle | 127.0.0.1:11434 | ✅ 运行中 | llava-phi3, 通过 FAM-Edge 代理访问 |
| Ollama | Oracle | 127.0.0.1:11434 | ✅ 运行中 | qwen2.5:7b仅智能问答兜底不参与视觉/融合) |
| Tailscale | Oracle ↔ NAS | 100.74 ↔ 100.70 | ⚠️ 待修复 | Tailscale 运行但端口不通当前用公网IP |
| FAM-UI | NAS | 0.0.0.0:8501 | ✅ 运行中 | Streamlit 1.61.1, HTTP 200, health=ok |
@@ -23,7 +23,7 @@
| pip | 25.0.1 (venv内) | |
| FFmpeg | 已安装 | apt 安装 |
| Ollama | 0.32.14 | |
| llava-phi3:latest | 2.9 GB 已拉取 | |
| qwen2.5:7b | 已拉取 | 纯文本模型,仅问答兜底(原 llava-phi3 已废弃) |
| Python 依赖 | 全部安装成功 | flask, gunicorn, requests, PyYAML, opencv, numpy |
| 模块导入验证 | PASS | FAM-Edge 全部 8 个模块导入正常 |
| 代码部署 | /opt/fam-edge/ | rsync 同步 |
@@ -109,27 +109,36 @@
| 29 | 关键帧提取改为自适应帧数 (随视频时长动态计算) | ✅ 完成 | 2026-08-20 |
| 30 | FFmpeg 快速 seek 替代 fps 滤镜 (6-8x 提速) | `7ce8aff` | 2026-08-20 |
| 31 | 真实视频性能基准测试 (30min 360MB 视频) | ✅ 完成 | 2026-08-20 |
| 32 | 视频端到端集成测试 (task 289 → SUCCESS, 落库正确) | ✅ 完成 | 2026-08-20 |
| 33 | 生产目录切换 forward-only (285 历史视频占位跳过) | ✅ 完成 | 2026-08-20 |
| 34 | 今日 17 片段诊断根因Ollama 本地融合 300s 超时) | ✅ 完成 | 2026-08-20 |
| 35 | **架构重构**移除本地融合run_text_fusion云端 VLM 直出 JSON → format_cloud_result → 直存 DB | `babf5b0` | 2026-08-20 |
| 36 | 适配器 chat() 方法 + run_qa 三模型降级Gemini→NVIDIA→Ollama 兜底) | `babf5b0` | 2026-08-20 |
| 37 | 端点 /api/edge/chat/ask + chat_handler 改走 Edge 编排qa_url | `babf5b0` | 2026-08-20 |
| 38 | 双端部署验证Oracle 7 文件 + 重启NAS chat_handler + config 手术 + HUP实测 /api/edge/chat/ask provider=nvidia、NAS→Edge 编排 43s 落库 | ✅ 完成 | 2026-08-20 |
### 待完成
| # | 任务 | 依赖 | 优先级 |
|---|------|------|--------|
| 32 | 视频端到端集成测试 | FAM-UI ✅ | |
| 33 | 单元测试 (JSON parser, circuit breaker, schema) | - | |
| 34 | Tailscale 防火墙修复 (NAS↔Oracle) | - | 低 |
| 39 | 单元测试 (JSON parser, circuit breaker, schema) | - | |
| 40 | Tailscale 防火墙修复 (NAS↔Oracle) | - | |
| 41 | daily_summaries 每日摘要 | - | 低 |
## 技术决策记录
1. **移除 google-generativeai SDK 硬依赖** - 代码用 requests 直接调 REST API兼容 Python 3.8
2. **rsync 替代 git clone** - Oracle 无法直连 NAS Gitea (无 Tailscale),用 rsync 从本地同步
3. **num_predict 参数** - ARM CPU 上 llava-phi3 生成速度较慢,限制输出 token 数控制延迟
3. **num_predict 参数** - ARM CPU 上 qwen2.5:7b 生成速度较慢,限制输出 token 数控制延迟
4. **PyMySQL 替代 mysql-connector-python** - 45KB 纯 Python 替代 19MB C 扩展NAS 无需编译
5. **MariaDB JSON 路径兼容** - MariaDB 10.11 不支持 MySQL 的 `$[*]` 通配符 JSON 路径和 `->` 操作符name_member() 改用 Python 层解析 + 逐行 UPDATE
6. **Python 3.10 venv** - NAS 系统 Python 3.8 过旧,用 Synology Python3.10 包创建 venv
7. **FAM-Edge 聊天代理** - Ollama 端口 11434 未对外暴露FAM-Edge 新增 /api/edge/chat 代理转发至本地 Ollama
8. **Oracle 公网 IP 替代 Tailscale** - Tailscale 两节点在线但端口不通防火墙edge_url 和 ollama_url 改用 Oracle 公网 IP 129.146.203.203
7. **FAM-Edge 聊天代理** - 历史:/api/edge/chat 直连 Ollama 代理;架构重构后被 `/api/edge/chat/ask` 三模型编排端点取代(旧端点保留兼容)
8. **Oracle 公网 IP 替代 Tailscale** - Tailscale 两节点在线但端口不通防火墙edge_url 和 qa_url 改用 Oracle 公网 IP 129.146.203.203
9. **Ollama 模型常驻内存** - systemd 加 `OLLAMA_KEEP_ALIVE=-1`,模型加载后永不卸载,消除 55s 冷启动延迟,常驻占用 4.3GB 内存(系统 12GB 够用)
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 完全移出视频链路:云端 VLMGemini 多图单请求 / NVIDIA 逐帧聚合)直接产出结构化 JSONEdge 仅 `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 <ts> -frames:v 1` 快速 seek仅 33s6-8x 提速)
## 真实视频性能基准测试 (2026-08-20)
@@ -158,13 +167,16 @@ AI 分析瓶颈: 帧5耗时 229s (疑似 ARM CPU 热降频), 其余帧 50-65s
| /api/member/name | POST | 人物A→张三 | ✅ 成功命名, 0 条事件记录回溯更新 |
| /api/chat/ask | POST | "今天有什么事件?" | ✅ 端到端成功, 回答"今天没有观察到张三" |
## 端到端聊天链路验证 (2026-08-20)
## 端到端聊天链路验证 (2026-08-20,新架构)
```
用户 → FAM-Core (NAS:8000) → FAM-Edge (Oracle:5000) → Ollama (Oracle:11434)
/api/edge/chat 代理 /api/generate 本地
用户 → FAM-Core (NAS:8000) → FAM-Edge (Oracle:5000) → Gemini / NVIDIA NIM / 本地 Ollama (兜底)
/api/edge/chat/ask run_qa 三模型降级编排
```
- FAM-Core 调用 `ollama_url` 配置的 `http://129.146.203.203:5000/api/edge/chat`
- FAM-Edge 代理转发至 `http://127.0.0.1:11434/api/generate`
- 回答正常返回chat_history 记录已保存 (chat_id=1)
- FAM-Core Chat-Handler 调用 `qa_url` 配置的 `http://129.146.203.203:5000/api/edge/chat/ask`(不再直连 Ollama
- FAM-Edge `run_qa` 按 Gemini → NVIDIA → 本地 Ollama 顺序调用 `chat()`,首个成功即返回 `{answer, provider}`
- **验证结果**
- Edge 单测:`/api/edge/chat/ask` → 200`provider=nvidia`Gemini 30s 超时后 NVIDIA 兜底成功,耗时 51s
- NAS E2E插入临时事件上下文后 `/api/chat/ask` → 43s 返回模型回答,`context_summary` 命中 1 条事件chat_id 落库;测试数据已清理
- 无上下文时走短路分支(直接返回提示,不调 Edge响应 <1s属正常设计

View File

@@ -34,10 +34,10 @@
| 问题 | 现状 | 影响 |
|------|------|------|
| **llava-phi3 多图单请求失效(已替换)** | 原本地模型 llava-phi3 `analyze_frames` 多图单请求输出长度仅 3~4**已替换为 qwen2.5:7b**(纯文本模型,专职融合与对话 | 历史遗留描述,新方案下视觉走云端,本地不参与视觉分析,该问题随之消除 |
| **吞吐不足** | 30s 视频全流程约 19 分钟(关键帧筛选 10min + VLM 5.5min + 融合 3min30min/360MB 视频实测 929s | 生产视频每 30 分钟新增一个,处理速度勉强跟上但无余量;改用云端模型后该问题随之缓解 |
| **llava-phi3 多图单请求失效(已替换)** | 原本地模型 llava-phi3 `analyze_frames` 多图单请求输出长度仅 3~4**已替换为 qwen2.5:7b**(纯文本模型,专职问答兜底 | 历史遗留描述,新方案下视觉走云端,本地不参与视觉分析,该问题随之消除 |
| **吞吐不足** | 历史本地模型全流程约 19 分钟(关键帧筛选 10min + VLM 5.5min + 融合 3min30min/360MB 视频实测 929s | 已切换到云端 VLM 直出结构化 JSON无本地融合步骤吞吐瓶颈转移至云端调用延迟整体明显改善 |
| **Tailscale 端口不通** | NAS tailscaled 以 userspace 模式运行(无 TUN 网卡Oracle 无法反向访问 NAS当前 NAS→Oracle 走公网 IP | 推送模式已规避反向访问,但流量走公网 |
| **历史视频积压** | 正式目录 `/volume1/surveillance/Generic_ONVIF-001` 有约 285 个历史视频(~100GB288 个历史任务已标记 FAILED 避免全量上传 | 切回生产目录前需确认回补策略 |
| **历史视频积压(已处理)** | 正式目录 `/volume1/surveillance/Generic_ONVIF-001` 有约 285 个历史视频(~100GB已切回生产目录并 forward-only 处理:历史任务占位 FAILEDscheduler dedup 自动跳过,仅处理新增视频 | 已解决;生产目录已生效,新视频正常入链 |
**规划方向(新框架)****云端大模型负责视觉识别与结构化输出、本地大模型仅做智能问答兜底**。按任务类型分工:
@@ -255,9 +255,14 @@ chat_history 独立表
| `/api/member/list` | GET | 全部成员 |
| `/media/<path>?token=xxx` | GET | 视频静态服务token 鉴权,推送模式下备用) |
### 5.3 融合输出 JSON Schema
### 5.3 云端结构化输出 JSON Schema
三层容错解析:直接 `json.loads` → 提取 markdown fence ` ```json ... ``` ` → 贪婪匹配最大 `{...}`;再过 `validate_schema`(必填字段检查 + 脏数据清洗,`action` 由 AI 自由生成无枚举过滤,`is_attention_event` 由 AI 自行判断,`source_providers` 必须非空数组)。三层全失败 → 任务 FAILED 走重试。
云端 VLM 直接产出结构化 JSON经两道处理入库
1. **适配器内三层容错解析**`json_parser.parse_vlm_json`):直接 `json.loads` → 提取 markdown fence ` ```json ... ``` ` → 贪婪匹配最大 `{...}`;失败抛 `VLMOutputInvalidError`
2. **`format_cloud_result` 归一化/校验**(无模型调用):`frame_details` 必须为非空列表并做字段类型归一化;`source_providers` 缺失时补为 `[provider]``compute_provider` 置为本次成功 provider`entities_json` 缺失时由 `frame_details` 按人物去重推导;`global_summary` 缺失时格式化拼接生成
任一步骤失败 → 任务 FAILED 走重试。`action` 由 AI 自由生成无枚举过滤,`is_attention_event` 由 AI 自行判断。
---
@@ -278,13 +283,12 @@ chat_history 独立表
| 参数 | 值 | 依据 |
|------|-----|------|
| `OLLAMA_KEEP_ALIVE=-1` | 模型常驻内存 | 消除 55s 冷启动(常驻约 4.3GB12GB 内存够用) |
| `num_predict=60` | 限制生成 token | ARM 约 5 tok/s500 会单帧跑数分钟触发超时 |
| 视觉/模型 timeout | 600s | 实测 1024px 帧视觉编码 ~36s + 生成 ~12s/60token |
| 融合 timeout | 300s | — |
| `num_predict=512` | 限制生成 token | ARM 约 5 tok/s过长生成会拖慢问答响应 |
| 视觉/模型 timeout | 600s | 实测 1024px 帧视觉编码 ~36s + 生成 ~12s/60token(问答链路改用 config 中各模型 timeout |
| gunicornEdge | `--timeout 1800` | 同步分析模式,默认 30s 会杀 worker |
| push_timeoutNAS | 1800s | 覆盖最坏情况30min 视频实测 929s |
**已知问题**:原 llava-phi3 多图单请求基本失效N 张图一次调用输出长度仅 3~4。**已替换为 qwen2.5:7b**(纯文本模型,专职融合与对话,不涉及视觉多图问题)。
**已知问题**:原 llava-phi3 多图单请求基本失效N 张图一次调用输出长度仅 3~4。**已替换为 qwen2.5:7b**(纯文本模型,专职问答兜底,不涉及视觉多图问题;视频分析已全部由云端 VLM 承担)。
### 6.3 模型适配器架构
@@ -432,54 +436,47 @@ task_id=28930s 测试片段)全链路打通:推送 5.7MB → Edge 分析
### 8.3 配置文件要点
**fam-core/config/config.yaml**NAS
**fam-core/config/config.yaml**NAS,生产值
```yaml
scheduler:
video_dir: "/volume1/web/sentinel-home-ai/e2e-test" # 当前指向 E2E 测试目录
# 正式目录: /volume1/surveillance/Generic_ONVIF-001YYYYMMDDAM/PM 两级子目录,
# os.walk 递归支持;切回前需处理 285 个历史视频积压,避免全量上传 ~100GB
video_dir: "/volume1/surveillance/Generic_ONVIF-001" # 生产目录YYYYMMDDAM/PM 两级子目录
# 285 个历史视频由占位 FAILED 任务占用路径scheduler dedup 自动跳过forward-only 模式)
dispatcher:
edge_url: "http://129.146.203.203:5000/api/edge/video/push"
push_timeout: 1800
chat_handler:
ollama_url: "http://129.146.203.203:5000/api/edge/chat" # Edge 代理
qa_url: "http://129.146.203.203:5000/api/edge/chat/ask" # 问答统一走 Edge 编排Gemini→NVIDIA→Ollama
timeout: 120
```
**fam-edge/config/config.yaml**Oracle多模型池配置
**fam-edge/config/config.yaml**Oracle多模型池配置,新架构
```yaml
# 调度模式配置: fallback(顺序降级) ensemble(并行交叉验证)
# 编排调度模式: fallback(顺序降级, 默认) | ensemble(并行交叉验证)
orchestrator:
mode: "fallback"
overall_timeout: 600
# 关键帧配置
video:
candidate_frames: 30
min_key_frames: 5
max_key_frames: 12
mse_threshold: 500
jpeg_quality: 80
max_long_edge: 1024
# 多模型池配置(视觉: Gemini → NVIDIA NIM 降级;文本: 本地 Ollama
# 多模型池配置(新框架:本地大模型不参与视频分析,仅智能问答兜底)
# 视频分析链路: 云端 VLM 直出结构化 JSON → Edge format_cloud_result 格式化/校验 → 直存 NAS DB无本地融合
# 智能问答链路: Gemini → NVIDIA → 本地 Ollama仅两云端都失败才启用本地兜底
models:
# 1. Google Gemini 1.5 Flash(视觉主)
# 1. Google Gemini视觉主 + 参与问答
- provider: "gemini"
role: "vision" # 视觉分析
role: "vision" # 视觉分析 + 问答vision role 也参与 chat
enabled: true
model_name: "gemini-1.5-flash"
model_name: "gemini-flash-latest" # v1beta 下 gemini-1.5-flash 会 404
api_key: "${GEMINI_API_KEY}"
timeout: 15
timeout: 30
circuit_breaker:
enabled: true
threshold: 3
cooldown: 600
# 2. NVIDIA NIM 托管 API视觉备
# 2. NVIDIA NIM 托管 API视觉备 + 参与问答
- provider: "nvidia"
role: "vision" # 视觉分析
role: "vision" # 视觉分析 + 问答vision role 也参与 chat
enabled: true
model_name: "meta/llama-3.2-11b-vision-instruct" # 或 qwen/qwen2-vl-72b-instruct
base_url: "https://integrate.api.nvidia.com/v1"
@@ -490,13 +487,15 @@ models:
threshold: 3
cooldown: 600
# 3. 本地 Ollama文本融合 + AI 对话,不参与视觉
# 3. 本地 Ollama文本,仅 Q&A 兜底,不参与视觉分析、不参与云端结果融合
- provider: "ollama"
role: "text" # 文本融合 + AI 对话
role: "text" # 仅问答兜底
usage: "qa_fallback" # Gemini/NVIDIA 都失败时才启用
enabled: true
model_name: "qwen2.5:7b"
base_url: "http://localhost:11434"
timeout: 60
timeout: 120
num_predict: 512
circuit_breaker:
enabled: false
```
@@ -604,7 +603,7 @@ cd fam-ui && streamlit run src/app.py
| 项目 | 值 |
|------|-----|
| API Key | AQ.Ab8RN6I0l8hC7hLnNHRY6qOXdch5CTWczDNlS4c1XrneGHipUQ |
| 模型 | `gemini-1.5-flash`(生产配置);`gemini-flash-latest`curl 验证端点别名) |
| 模型 | `gemini-flash-latest`生产配置v1beta 下 `gemini-1.5-flash` 会 404故用别名) |
| 端点 | https://generativelanguage.googleapis.com/v1beta/models/gemini-flash-latest:generateContent |
| 验证状态 | 2026-08-20 测试可用 |
@@ -624,7 +623,7 @@ curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-flash-lates
| Base URL | `https://integrate.api.nvidia.com/v1` |
| 默认模型 | `meta/llama-3.2-11b-vision-instruct`(可替换 `qwen/qwen2-vl-72b-instruct` |
| SDK | `openai` Python SDKNIM 兼容 OpenAI API 规范,直接复用) |
| 验证状态 | 待测2026-08-20 配置完成,单图连通性验证脚本见 8.3 |
| 验证状态 | 已验证2026-08-20 部署验证:`/api/edge/chat/ask` 实测 provider=nvidiaGemini 超时后 NVIDIA 兜底成功;单图连通性验证脚本见 8.3 |
**环境变量**
@@ -663,11 +662,16 @@ export NVIDIA_API_KEY="nvapi-9cFAdO5xdbwPuxS8KGRTnlVimn1gJzbbbzWNhPwHa_Yl3pTe-Pf
- 模型基准测试(原 llava-phi3 预热 4.3s PASS**已替换为 qwen2.5:7b**Ollama 常驻内存
- 架构改为推送模式NAS 上传整段视频 → Edge 同步分析 → 结果随响应返回)
- 关键帧自适应帧数 + FFmpeg 快速 seek6-8x 提速)
- FAM-Core API 全端点测试通过端到端聊天链路Core→Edge→Ollama验证
- FAM-Core API 全端点测试通过
- FAM-UI 部署Streamlit 1.61.1
- 真实视频性能基准30min/360MB → 929s
- **E2E 全链路打通**task 289 → SUCCESSmonitor_events/event_details 落库正确
- 可靠性加固僵尸任务回收、文件日志、datetime 空值兜底、超时按实测调整
- **架构重构(移除本地融合,云端直出直存)**
- 视频分析链路:云端 VLMGemini `gemini-flash-latest` / NVIDIA NIM `llama-3.2-11b-vision-instruct`)直出结构化 JSON → Edge `format_cloud_result` 格式化/校验(无模型调用)→ 直存 NAS DB本地 Ollama 不再参与视频摘要与融合(`run_text_fusion` 已移除)
- 智能问答链路:新增 `chat()` 方法,`run_qa` 按 Gemini → NVIDIA → 本地 Ollama 降级编排;端点 `/api/edge/chat/ask`NAS Chat-Handler 经 Edge 编排(`qa_url`),不再直连 Ollama
- 生产目录已切回 `/volume1/surveillance/Generic_ONVIF-001`285 历史视频 forward-only 占位跳过
- **双端部署验证通过**2026-08-20Oracle Edge 7 文件部署 + 重启,`/api/edge/chat/ask` 实测 provider=nvidiaGemini 超时→NVIDIA 兜底成功NAS chat_handler + config 手术式更新 + HUP 重载,插入临时上下文实测 NAS→Edge 编排链路 43s 返回并落库测试数据已清理Edge 日志确认 task 294360MB以新架构处理中、三模型健康检查全通过
详细进度见 `PROGRESS.md`
@@ -675,14 +679,9 @@ export NVIDIA_API_KEY="nvapi-9cFAdO5xdbwPuxS8KGRTnlVimn1gJzbbbzWNhPwHa_Yl3pTe-Pf
| # | 任务 | 优先级 |
|---|------|--------|
| 1 | 接入云端视觉模型Gemini `gemini-1.5-flash` + NVIDIA NIM `llama-3.2-11b-vision-instruct`),承担全部视觉分析;本地 Ollama 专职文本融合与 AI 对话(不再参与视觉 | |
| 2 | 实现 `NvidiaVisionAdapter`(基于 openai SDKBase64 多图内联,`role: vision`)并在 `build_adapter` 工厂注册 `provider: nvidia` | |
| 3 | Orchestrator 视觉阶段按 `fallback` 降级 Gemini → NVIDIA NIM全失败则任务 FAILED文本阶段固定调本地 Ollama 融合;`compute_provider` / `source_providers` 兼容 `nvidia` 标签 | |
| 4 | analyze_frames 改逐帧请求(云端模型支持多图,但逐帧更稳;同时解决历史 llava-phi3 多图失效问题,新方案本地 qwen2.5:7b 不参与视觉,该问题随之消除) | 高 |
| 5 | 切回生产视频目录(/volume1/surveillance/Generic_ONVIF-001确认历史视频回补策略 | 高 |
| 6 | 单元测试JSON parser / circuit breaker / schema 校验) | 中 |
| 7 | Tailscale 修复NAS userspace 模式升级,流量不走公网) | 低 |
| 8 | daily_summaries 每日摘要 | 低 |
| 1 | 单元测试JSON parser / circuit breaker / schema 校验 | |
| 2 | Tailscale 修复NAS userspace 模式升级,流量不走公网) | |
| 3 | daily_summaries 每日摘要 | |
---