第十一部 Agentic 制片系统与自动化
第 58 章 调度、预算和故障恢复#
本章目录
58.1 工作流 DAG、质量闸门与并发重试#
工作流是一张 DAG。
任务按依赖形成有向无环图。视频依赖批准关键帧,关键帧依赖分镜与资产;字幕依赖最终音频;发布依赖母版、权利和 QC。调度器只运行依赖已满足的任务。
闸门高于吞吐。
并行生成能更快烧掉错误。剧本、资产和关键帧未批准时,昂贵任务保持 blocked。批量扩大前先完成少量 canary 镜头,确认模型路线和成本。
Task Record。
task:
id: TASK_MOTION_E001_S09
type: motion_generation
dependencies: [KF_E001_S09_APPROVED, CONT_E001_S09_VALID]
input_hash: abc123
budget: {attempts: 4, cost: 20, wall_time: 30m}
retry_policy: technical_errors_only
status: ready
idempotency_key: E001_S09_motion_v04
并发限制。
按供应商额度、网络、人工审片能力和同一资产风险限制并发。一次生成一百镜却只有一人审核,会积压错误;先小批通过再扩。
超时与重试。
网络超时、服务限流可指数退避重试;内容失败不能原样自动重试。每次重试记录原因和参数变化。达到上限创建 Issue。
58.2 预算、恢复、降级与人工接管#
预算。
预算分项目、阶段、集、镜头和任务。调度前预留,完成后结算真实成本。高价值镜头可申请追加,低价值镜头超限自动进入改分镜评审。
断点恢复。
每个任务输出原子写入:文件先临时保存,校验成功后标完成。进程中断后读取 Task Record,不重复已完成且哈希一致的任务。
供应商不可用。
路由表保存首选、备选和输入转换。备选必须提前通过回归集。切换后先生成 canary,不直接迁移全部队列。
人工接管。
连续失败、事实冲突、权利阻断、预算超限和审美判断进入人工队列。人工可重路由、改输入、批准豁免或停止,不直接改数据库绕过事件。
SOP。
第一步,从依赖图生成 DAG。第二步,为任务设预算和幂等键。第三步,只调度通过闸门的任务。第四步,小批 canary 后扩并发。第五步,区分技术与内容重试。第六步,原子写入和校验。第七步,准备备选路由。第八步,人工接管写回事件。
58.3 故障诊断、任务实例与崩溃演练#
故障树。
**症状:恢复后重复扣费。**无幂等键或输出哈希。使用任务身份去重。
**症状:批量完成才发现资产错。**没有 canary 与闸门。先小批验证。
**症状:供应商故障全线停摆。**备选未测试。维护回归通过的替代路线。
检查表、练习与交付物。
检查 DAG 是否无环;预算是否分层;重试是否分类;任务是否幂等;输出是否原子;备选是否验证;人工接管是否留日志。
练习一:画 E001 从 Pack 到发布的 DAG。练习二:设计断电恢复。练习三:模拟视频供应商中断的 canary 切换。
本章交付物:Task DAG、Scheduler Policy、Budget Reservations、Retry Rules、Recovery Runbook、Fallback Routing、Human Queue。
E001 任务 DAG。
E001_PACK_APPROVED
├─ ASSET_RESOLVE
│ ├─ CHARACTER_REFS_READY
│ ├─ LOCATION_READY
│ └─ PROP_GRAPHICS_READY
├─ CONTINUITY_INITIALIZED
└─ STORYBOARD_E001
└─ STORYBOARD_APPROVED
└─ KEYFRAMES_S01-S19
└─ KEYFRAME_QC
└─ MOTION_S01-S19
└─ MOTION_QC
└─ ASSEMBLY_EDIT
├─ AUDIO_FINAL
└─ GRAPHICS_FINAL
└─ PICTURE_LOCK → MIX/SUBTITLE/COLOR → RELEASE_GATE
分镜批准后,关键帧可并行;同一人物新黄金版本未稳定前限制并发,避免一次生成十九个共同错误。
预算预留与结算。
任务进入 running 前,从项目额度预留最坏允许成本;完成后按真实成本结算并释放余量。没有预留的任务不能调用付费生成。追加预算需要说明此前尝试、根因和替代方案。
预算不只以货币表达,也包括人工审核分钟、并发槽和截止时间。生成便宜但需要二十分钟人工筛选,仍可能被调度器降级。
崩溃恢复演练。
假设运动批次生成到 S12 时进程崩溃。恢复器读取任务:S01–S08 已有文件、哈希和 QC,保持完成;S09–S10 文件存在但未提交,校验后转 needs_review;S11 正在上传且文件不完整,删除临时对象并重试;S12 尚未调用,不扣费。
如果供应商返回成功但本地超时,使用供应商请求 ID 查询结果,而不是重新调用。无法查询时将潜在重复费用写入成本异常。
58.4 优先级、熔断、死信、背压与扇出#
优先级与饥饿。
阻断发布的 P1 修复高于新集探索;但长期探索任务不能永远饿死。调度器按项目阶段、截止时间、阻断程度和资源类型分队列,并为低优先级保留少量容量。
人工审核队列同样排序:权利和事实错误优先,英雄镜头高于背景美化。同一根因的镜头成组审,减少重复判断。
熔断与降级。
某模型连续出现高错误率、超时或费用异常时触发熔断,暂停新任务。系统可以降级为静态动效、减少运动、使用备选模型或改分镜,但任何降级都需保持故事状态和验收标准。
降级不是自动降低质量门槛。无法满足核心镜头时保持 blocked,交由人决定。
死信队列。
超过重试上限、依赖永久缺失或输出持续无法验证的任务进入 Dead Letter Queue。每项保留原任务、尝试、错误、费用和建议工位。人工修复输入后创建恢复事件,不能点击“再试一次”清空历史。
灾难恢复指标。
定义可接受数据丢失窗口与恢复时间。事实账、权利和批准资产使用更严格备份;可重新生成的低价值候选可用较低等级。定期演练数据库损坏、对象存储丢失、密钥轮换和供应商账号不可用。
恢复成功不是服务重新启动,而是能从快照和事件重建指定 RC,并让哈希、字幕、音频和权利记录一致。
背压。
当关键帧审片积压、GPU 队列拥堵或人工修复超时,调度器向上游施加背压:减少新分镜批次、暂停低优先级变体并保留发布阻断任务。没有背压,系统会把局部瓶颈扩成数百个过期候选和更高存储成本。
背压解除同样记录时间、原因与负责人。
批次编排与扇出控制。
任务图允许并行,不代表应一次扇出全部镜头。调度器先选择每种 Shot Class 的 canary,验证资产、路线、成本和评测器,再按批准批量扩展。共同引用新角色版本的镜头尤其要限制扇出,否则一个身份错误会同时污染几十项任务。
批次大小根据下游审核能力动态调整。关键帧队列等待超过阈值时,停止新的构图探索;混音阻断发布时,减少后续集视频生成,把资源转向已接近完成的批次。
58.5 补偿事务、SLO 与生产恢复能力#
补偿事务。
媒体生产很难像数据库一样原地回滚。一个任务完成后可能已触发计费、上传、人工审核和下游合成。失败恢复需要补偿动作:将错误资产标记失效、取消尚未开始的依赖任务、释放预留预算、保留已产生日志,并创建替代路线。
补偿不删除历史。若错误视频已进入粗剪,系统创建新 Edit 任务替换源片,并使旧导出失效;不能只在文件夹里覆盖同名视频。每个高影响任务在设计时就应声明 compensation_action。
生产 SLO 与可观测性。
系统至少监控任务成功率、队列时长、一次通过率、重试率、每可用秒成本、人工审核等待、失效传播时间和 RC 重建成功率。服务在线不代表生产健康:生成接口 99.9% 可用,但通过率骤降,同样应熔断。
告警按观众与项目后果排序。权利过期、事实冲突和发布文件哈希变化是立即告警;单个背景候选超时可以自动重排。仪表盘显示趋势与基线,不把所有黄色警告堆给同一名制片人。
人工队列也是正式工作流。
人工接管项必须带上下文包、失败历史、已花预算、候选方案和所需决定。只发一条“请看一下”会让人重新调查整条链。人工决定写成事件,调度器据此恢复、改路由、追加预算或终止。
队列设置响应时限和替补责任人。高风险项目不能依赖某个导演上线后才知道发生了什么;值班人应能从审批包理解最小充分上下文,同时无权改动不属于自己的事实。
工作流实例与状态恢复。
DAG 模板描述可能路径,Workflow Instance 记录某一集实际走过的节点、输入哈希、尝试、成本和决定。服务重启后,调度器读取实例状态,只恢复未完成或可安全重试的节点,不把已计费且成功上传的生成任务重新执行。
节点状态至少包括 pending、leased、running、waiting_human、succeeded、failed、compensating、cancelled 和 stale。running 超时后先查询供应商结果,再决定接管;直接重试可能产生重复费用和两个竞争结果。
预算是工作流资源,不是月底报表。
任务开始前预留预算,结束后按实际结算并释放余额。重试、人工修复、供应商切换和存储都消耗同一 Production Unit。达到软上限时降低变体和并发,达到硬上限时停止并请求批准,不能让智能体用“再试一次”无限透支。
预算策略按镜头价值区分。英雄卡点可保留更多修复尝试,背景过场达到上限后改用简化方案。调度器同时考虑金钱、GPU、人工分钟和交付时间,避免只优化接口费用却把成本转嫁给剪辑师。
故障注入与恢复演练。
在非交付高峰定期注入可控故障:模型接口超时、对象哈希不符、审批人离线、权利事件突然阻断、数据库从快照恢复和平台上传失败。观察告警、背压、人工接管、补偿和 RC 重建是否按 Runbook 发生。
演练记录恢复时间、数据丢失、重复费用、孤儿任务和人工认知负荷。Runbook 若只在理想流程可用,就不是真正的恢复能力。每次演练只改少量规则,再复测,防止为一次事故加入大量互相冲突的自动化。