Files
video-ai-analysis/agent.md
2026-06-17 11:33:54 +08:00

251 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Video AI Analysis PoC Agent Instructions
本文件约束后续 AI 在 `/Users/yoilun/AI-train/video-ai-analysis-poc` 中的开发、审查、测试和文档维护行为。任何业务代码修改前必须先阅读并遵守本文件。
## Repository Snapshot
- 项目名称:`video-ai-analysis-poc`
- 项目目录:`/Users/yoilun/AI-train/video-ai-analysis-poc`
- 项目目标:实现本地视频文件夹离线批处理分析 PoC。
- 外部模型/参考实现目录:`/Users/yoilun/AI-train/zhengxin-vlm-0413`
- 参考 VLM 模型:`/Users/yoilun/AI-train/zhengxin-vlm-0413/models/memai-zhengxin-v3-20260413`
- 测试环境:`ssh xiaozheng@192.168.5.100`,用户说明该环境已有模型。
- 运行目标Ubuntu 24单机 NVIDIA RTX 3080 20GB离线批处理优先吞吐而非低延迟。
## Hard Directory Boundary
`video-ai-analysis-poc` 是本次项目目录。后续代码、配置、计划、文档、测试和输出模板都必须放在这里。
`zhengxin-vlm-0413` 不是本次项目目录,只能作为:
- 已有模型目录。
- 参考实现目录。
- VLM API、prompt、输出解析、部署方式的参考。
默认禁止在 `zhengxin-vlm-0413` 中创建本项目文件或修改业务代码。特别禁止改动、移动、删除或复制:
- `zhengxin-vlm-0413/models/**`
- `zhengxin-vlm-0413/service/config.yaml`
- `zhengxin-vlm-0413/service/config.yaml-bk`
- `zhengxin-vlm-0413/docker/.env`
如果后续确实需要从参考项目复制逻辑,必须复制到本项目目录内,并注明来源和差异。
## Repository Map
当前项目文件:
- `video_ai_analysis_system_plan.md`:前期系统实施方案。
- `agent.md`:本文件,约束后续 AI 工作。
- `task_plan.md`:本次 goal 的阶段计划。
- `findings.md`:代码阅读、约束、关键发现。
- `progress.md`执行记录、测试结果、bug 循环。
- `docs/project.md`:项目目标、架构、配置、运行方式和风险。
- `memories.md`:主 agent 对用户要求和关键决策的长期记忆。
参考目录关键文件:
- `/Users/yoilun/AI-train/zhengxin-vlm-0413/service/rtsp_service.py`:实时 RTSP 服务入口。
- `/Users/yoilun/AI-train/zhengxin-vlm-0413/service/config.yaml`现有推理、摄像头、prompt、服务、YOLO 配置,包含敏感信息。
- `/Users/yoilun/AI-train/zhengxin-vlm-0413/shared/vlm_client.py`VLM 请求构建、OpenAI-compatible API 调用、Action 解析。
- `/Users/yoilun/AI-train/zhengxin-vlm-0413/shared/frame_utils.py`:已有本地视频抽帧辅助函数,但不满足本次完整离线批处理需求。
- `/Users/yoilun/AI-train/zhengxin-vlm-0413/docker/docker-compose.yml`vLLM 与 RTSP 服务容器编排。
## Current Workflow Batch
```text
[项目: /Users/yoilun/AI-train/video-ai-analysis-poc]
[工作流批次: v1.0 本地视频批处理PoC]
```
派发任何子 agent 时,任务首段必须包含:
```text
[项目: /Users/yoilun/AI-train/video-ai-analysis-poc]
[工作流批次: v1.0 本地视频批处理PoC]
[阶段: 阶段 x <阶段名>]
[角色: <角色名>]
[子agent名称: <从指定名单中选择>]
```
子 agent 名称必须从以下列表选择:
```text
huzenan, jiangzhiyou, linjiayu, hujiarui, wangchiheng, niwenhao,
caiziquan, yepeijun, lizheng, zhengchenda, chenruihao, yangyilun, donglele
```
## Required Workflow
### 1. Agent Rules Before Code
`agent.md` 未确定前,不允许修改业务代码。
阶段 0 允许修改:
- `agent.md`
- `task_plan.md`
- `findings.md`
- `progress.md`
- `docs/project.md`
- `memories.md`
### 2. File-Based Planning Is Mandatory
非简单任务必须维护:
- `task_plan.md`
- `findings.md`
- `progress.md`
- `docs/project.md`
- `memories.md`
每个阶段开始前,主 agent 必须读取这些文件,确认当前目标和下一步。每个阶段完成后,必须更新阶段状态、验证记录、关键文件和剩余风险。
### 3. Sub Agent Workflow
每个实现阶段至少使用:
- coding agent只实现当前阶段不处理未来阶段不做无关重构。
- testing/review agent只测试、审查、复现问题和报告 bug不直接修改代码。
如果 testing/review agent 发现 bug
1. 主 agent 将 bug report 记录到 `progress.md`
2. 主 agent 将 bug report 转发给当前阶段 coding agent。
3. coding agent 只修复报告中的问题。
4. testing/review agent 复测。
5. 同一问题最多 3 轮,仍失败则暂停并向用户报告。
### 4. TDD And Verification
新增功能或 bugfix 必须优先写测试或最小可复现验证,再写实现。无法自动化测试的 GPU/视频/环境行为,必须写清楚 smoke test 命令、输入样例和人工判定标准。
完成任何阶段前,必须有新鲜验证证据:
- 单元测试。
- CLI smoke test。
- FFmpeg 命令检查。
- vLLM health check。
- 输出 JSON schema/字段检查。
不能只根据代码阅读声称完成。
## Local Batch PoC Requirements
### 1. Input
本次 PoC 优先支持本地视频文件夹:
- 通过 CLI 参数或 config 选择输入目录。
- 递归或非递归行为必须可配置。
- 支持常见视频格式,例如 `.mp4``.mov``.mkv``.avi``.flv``.ts``.m4v`
- 不支持或损坏的视频要记录失败原因,不能阻塞整个文件夹。
### 2. Video Processing
- 必须优先使用 FFmpeg + NVDEC GPU 解码。
- 默认 1 FPS 抽帧。
- 默认 clip 长度 10 秒,允许配置 10-20 秒。
- 禁止逐帧 LLM 推理,必须 clip 级推理。
- Clip 输入帧数要小,默认 8-10 帧,避免 RTX 3080 20GB OOM。
- 输出目录保存 manifest、抽帧中间结果、clip 结果和汇总 JSON。
### 3. Prompt Configuration
- prompt 必须从 config 读取,不能硬编码在业务逻辑中。
- 支持 `prompt.system``prompt.user`
- Prompt 必须要求模型输出严格 JSON。
- Prompt 必须要求输出画面时间字段;如果画面时间不可读,要保留 clip 的视频相对时间。
### 4. Timeline Output
输出结果必须包含监控画面的时间轴。至少包含:
- `video_id` 或视频文件路径。
- `video_start_time`:如果文件或画面可识别则填写,否则为 `null`
- `clip_start_seconds`
- `clip_end_seconds`
- `clip_start_timecode`,格式如 `HH:MM:SS`
- `clip_end_timecode`,格式如 `HH:MM:SS`
- `frame_times`clip 内参与推理帧的相对秒数或 timecode。
- `screen_time``画面时间`:模型从监控画面 OCR 到的时间,无法读取则为空。
- 事件级 `start_time` / `end_time` 或对应 clip 范围。
不能只输出 `datetime.now()` 这种服务处理时间。
### 5. Model Inference
- 优先兼容 OpenAI-compatible `/v1/chat/completions`
- 默认模型名:`memai-zhengxin-v3-20260413`
- 默认配置使用 `api_base_url: http://localhost:8679``chat_completions_path: /v1/chat/completions`,由代码拼接为完整请求 URL。
- RTX 3080 20GB 上 batch 保守起步,先 batch size 1再逐步尝试 2-4。
- vLLM dtype 和显存参数要在测试环境验证;如 BF16 不稳定,优先 FP16。
## Security And Data Rules
- 不要在新文档、测试夹具或输出示例中复制真实 RTSP 密码、token、Webhook 密钥、Cookie。
- 参考项目 `service/config.yaml` 包含真实内网 RTSP URL 和密码,阅读可以,传播要脱敏。
- 本地视频、抽帧图片、模型输出可能包含门店画面,默认视为敏感数据。
- 不要把视频帧、日志、输出样例批量复制到仓库外部。
- 不要删除用户已有视频或模型文件。
## Implementation Rules
- 所有新增代码放在本项目目录内。
- 不修改参考项目实时 RTSP 主链路。
- 可参考 `shared/vlm_client.py` 的接口设计,但新实现应位于本项目。
- 不引入不必要的分布式系统。
- 不引入大型依赖解决小问题。
- 保持配置、运行命令、文档一致。
- 所有输出文件命名要稳定,支持断点续跑。
- JSON 输出必须可被机器解析;模型 raw response 可以保留,但不能作为唯一结构化结果。
## Validation Matrix
阶段 0 文档/agent 规则:
- 检查文件存在:
- `agent.md`
- `task_plan.md`
- `findings.md`
- `progress.md`
- `docs/project.md`
- `memories.md`
- 检查 `zhengxin-vlm-0413` 下没有本次误放的工作流文件。
本地批处理代码变更后:
- Python 语法检查:
- `python3 -m py_compile <changed python files>`
- 单元测试:
- 如新增 tests运行对应 `python3 -m unittest ...``pytest ...`
- FFmpeg/NVDEC 检查:
- `ffmpeg -hwaccels`
- `ffmpeg -decoders | grep cuvid`
- vLLM health check
- `curl http://localhost:8679/v1/models`
- 最小视频 smoke test
- 使用一个短视频目录运行本地批处理入口。
- 检查输出包含 clip 级时间轴和汇总 JSON。
测试环境验证:
- 通过 `ssh xiaozheng@192.168.5.100` 执行前,先确认路径、依赖和 GPU 状态。
- 远端命令要尽量只读或写入明确输出目录。
- 不要覆盖远端已有模型和配置。
## Definition Of Done
本次 PoC 完成必须满足:
1. 支持本地文件夹所有视频分析。
2. 不依赖海康云眸云存储。
3. 模型提示词可通过 config 调整。
4. 输出包含视频、clip、事件的监控时间轴。
5. 4B VLM 使用现有模型路径或测试环境已有模型。
6. 断点续跑和失败记录有基本支持。
7. 文档更新,包含运行命令、配置项和输出结构。
8. 必要验证命令已运行并记录。
9. 每个阶段的子 agent 审查结论记录在 `progress.md`