视频编辑任务已经端到端跑通
这次验证用真实 Ignis 对话先生成图片和视频,再通过 video-edit 提交异步 Tobatsu 任务。结果回调后自动进画布,并写入 tobatsu_result,下一轮 agent 再用 SystemReminder 感知。
真实主线:从对话到画布
这不是单独查 DB。主线从 Ignis agent 对话开始,经过工具调用、Tobatsu workflow、callback、R2/file_id、Canvas Service。
生成素材
generate_image 产出 AGmV83.png。create_videos 产出 uL0KBx.mp4。
提交 video-edit
agent 调 skill_toolcall_curl,只传自然语言 instruction 和 file_id。
Gateway 建任务
返回短消息:accepted、gateway_task_id、poll。
Tobatsu 执行
generic_ffmpeg_rendi v6 用 Rendi 主路径合成视频。
callback 插画布
mai.delivery_update 回来,Gateway 导入 R2,Canvas Service 插入。
结果进对话
mai.delivery_result 写一条 session_messages:tobatsu_result。
agent 看到的返回变少了
任务会自己进画布,所以提交时不再给 agent 一堆内部状态。查询也只是只读,不返回 batch_result。
{
"ok": true,
"accepted": true,
"gateway_task_id": "gw_f5f26981-...",
"message": "任务已提交。完成后会自动更新画布...",
"poll": {
"action": "get_task",
"gateway_task_id": "gw_f5f26981-..."
}
}
{
"ok": true,
"gateway_task_id": "gw_f5f26981-...",
"status": "succeeded",
"result": { "summary": "已用 AGmV83.png..." },
"artifacts": [{
"mai_file_id": "3ugwAK.mp4",
"canvas_status": "delivered"
}],
"canvas": { "delivered": true }
}
跑出来的证据
这些是这次实际跑出来的 ID。CC 和 Tobatsu 侧都能按这些 ID 复查。
| 检查点 | 结果 | 证据 |
|---|---|---|
| 素材生成 | AGmV83.png + uL0KBx.mp4 |
CDN HEAD 均为 200;视频输入 video/mp4,811018 bytes |
| Tobatsu 执行 | 87dbe45a... done;run success |
/tmp/tobatsu-mai-v11-e2e-readback.md |
| callback update | HTTP 200;canvas_delivery.status=succeeded |
Canvas job cjob_7d6a409e...,inserted_count=1 |
| Mai artifact | 3ugwAK.mp4 imported |
1280x720,duration_ms=7062,size_bytes=411813 |
| session result | 写入 1 条 tobatsu_result |
sequence_num=283793,frontend poll endpoint 能读到 |
| SystemReminder | 下一轮游标从 0 到 283793 |
turn 完成,无工具调用,没有再崩 MessageType |
对话里实际发生了什么
用户能看到的不是 DB 查询,而是一组真实 agent turn。
生成图片和视频
agent 调 generate_image 和 create_videos。回复列出 AGmV83.png、uL0KBx.mp4。
提交 video-edit
agent 调 skill_toolcall_curl。回复:任务已提交,gateway_task_id=gw_f5f26981...。
回调自动写画布
3ugwAK.mp4 出现在 canvas。没有靠 get_task 二次插入。
下一轮只回复收到
SystemReminder 被消费,cursor 推进。agent 没有自动继续,也没有查询。
显式查询状态
用户要求查状态时才调 get_task。返回只读状态,canvas job 数不变。
这次实际改了什么
改动拆在 Mai backend、tools-backend、Tobatsu Gateway、Canvas Service 和 skills。
Mai backend
新增 tobatsu_result lazy reminder 游标。
agent history 排除 tobatsu_result,避免 MessageType 崩掉。
tools-backend
new_task 返回变短。
get_task 不再返回 batch,也不再暴露 Tobatsu 内部 ID。
Tobatsu Gateway
支持 delivery_update 多次回调。
terminal delivery_result 写一条 session message。
Canvas Service
callback-time 插 canvas 是主路径。
支持同 callback sidecar 贴到主文件 metadata。
skills
video-edit 和 mai-async-gateway 写清楚:不要主动轮询。
用户不满意时才 continue。
Frontend contract
新增 /api/sessions/{id}/tobatsu-results。
前端自己 poll 结果,不走 Mai WS。
本地和 test 都跑了
本地用当前 Python 代码连 test DB 和 tool-test。test 用 Render 后端和已部署 Workers。
| 环境 | 任务 | 输出 | 结论 |
|---|---|---|---|
| test canonical | gw_f5f26981... |
3ugwAK.mp4,canvas rev 3 |
PASS |
| local backend retry | gw_2e071ba2... |
j3txwP.mp4,canvas rev 4 |
PASS |
| local first attempt | gw_7bd366e0... |
无 canvas item | callback 403/1010,失败回调已入库 |
| unit / worker tests | Python + 3 个 Worker 包 | 10 + 20 + 24 + 10 tests | PASS |