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

9.5 KiB
Raw Permalink Blame History

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.pyVLM 请求构建、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.ymlvLLM 与 RTSP 服务容器编排。

Current Workflow Batch

[项目: /Users/yoilun/AI-train/video-ai-analysis-poc]
[工作流批次: v1.0 本地视频批处理PoC]

派发任何子 agent 时,任务首段必须包含:

[项目: /Users/yoilun/AI-train/video-ai-analysis-poc]
[工作流批次: v1.0 本地视频批处理PoC]
[阶段: 阶段 x <阶段名>]
[角色: <角色名>]
[子agent名称: <从指定名单中选择>]

子 agent 名称必须从以下列表选择:

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.systemprompt.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_timesclip 内参与推理帧的相对秒数或 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:8679chat_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