第十一部 Agentic 制片系统与自动化
第 56 章 项目状态、账本和事件系统#
本章目录
56.1 稳定身份、事实事件与状态机#
聊天记录不是数据库。
项目真相必须存在结构化账本。聊天可解释决定,不能作为角色服装、镜头状态和发布版本的唯一来源。
稳定 ID。
项目、人物、服装、地点、道具、声音、集、beat、shot、generation、edit、QC、广告和指标都使用稳定 ID。文件移动和版本变化不改变身份。
事实、决定、事件。
事实记录当前有效值;决定记录为何选择;事件记录值如何变化。当前状态由批准事件重放得到,因此可以审计和回滚。
event:
id: EVT_00421
type: asset_version_promoted
entity: CH_LINYUN_FACE
from: v02
to: v03
reason: 侧脸结构修正
approved_by: ART_DIRECTOR_01
affects: [38_keyframes, 21_motion_clips]
依赖图。
Shot 依赖 Episode Beat、人物、服装、地点和道具;Generation 依赖 Shot 和关键帧;Edit 依赖 Generation 与 Audio;Release 依赖 Edit、Subtitle、Rights 和 QC。

图 56-1 身份从 v02 提升到 v03 后,事件先追加到日志并更新当前状态;依赖图找出受影响的关键帧、动态、剪辑和发布候选,使其失效;修复任务完成后生成新快照,历史版本仍然保留。
关键点是“先记录事件,再传播失效,再调度修复”。系统不能先覆盖人物文件,再依靠团队回忆哪些镜头使用过旧版。新快照代表新的当前状态,但不会把旧 RC 的生产事实改写成从未发生。
修改一项资产时沿图查询直接和下游影响,不靠全项目人工搜索。
状态机。
每种工件有合法状态转换。例如关键帧从 needed 到 candidate、review、approved、locked;不能从 needed 直接 exported。非法转换拒绝并记录。
56.2 并发、任务驱动、回滚与故障诊断#
乐观并发与冲突。
两个智能体同时修改同一 Episode Pack 时,使用版本检查。后提交者必须重新读取差异,不能静默覆盖。人工决议进入 Decision Log。
事件驱动任务。
episode_pack_approved 触发资产解析和分镜任务;asset_changed 触发影响分析;picture_locked 触发最终字幕、混音和导出;P1_opened 阻断闸门。
事件只安排任务,不自动绕过审批。
快照与回滚。
重要闸门保存项目快照。回滚创建新事件指向旧版本,不删除历史。已发布版本永远可重建。
SOP。
第一步,定义实体和稳定 ID。第二步,确定每类账本所有者。第三步,写状态转换。第四步,建立依赖边。第五步,把修改记录为事件。第六步,处理并发冲突。第七步,在闸门保存快照。第八步,测试影响分析和回滚。
故障树。
**症状:各部门持有不同真相。**状态散落文件。建立权威账本和版本。
**症状:改资产后漏镜头。**没有依赖图。所有引用用稳定 ID。
**症状:回滚丢失后续工作。**覆盖文件而非事件版本。保留不可变历史。
56.3 实体关系、事件溯源与冲突案例#
检查表、练习与交付物。
检查所有实体是否有 ID;事实、决定和事件是否分开;状态转换是否合法;依赖是否完整;并发是否防覆盖;发布版本是否可重建。
练习一:画 E001_S09 依赖图。练习二:模拟服装更新影响分析。练习三:从 picture lock 回滚到上一版。
本章交付物:Entity Model、Event Log、Dependency Graph、State Machines、Snapshots、Rollback Report。
《逆光收购》的实体关系。
MD_BOOK_001 包含 E001;E001 包含 B01–B06;B04 被 E001_S08–S12 实现;S09 引用林筠身份、灰西装、董事会议室、授权书、授权图形、光线状态和声音 cue;运动结果被 Edit Timeline 与广告素材引用。
因此一次授权书签名日期修改,不是换一张图片:它会影响图形资产、S09 关键帧、运动合成、正片、广告、字幕或对白中的日期,以及所有已导出 RC。依赖图让系统得到这张清单。
事件溯源示例。
- id: EVT_101
type: fact_changed
entity: GRAPHIC_AUTHORIZATION
field: signature_date
from: 2026-07-02
to: 2026-07-03
cause: SCRIPT_FIX_018
- id: EVT_102
type: dependencies_invalidated
entities: [KF_E001_S09, GEN_E001_S09_004, EDIT_E001_V12]
- id: EVT_103
type: regeneration_approved
scope: graphic_and_composite_only
系统没有删除旧日期;它记录旧事实何时失效。过去发布版本仍能按当时状态重建。
物化视图。
事件日志适合审计,但每次从头重放可能慢。系统定期生成快照:当前资产版本、当前人物状态、当前开放 Issue 和任务状态。快照是日志的可重建视图,不是另一个独立真相。
写入顺序是先验证事件,再追加日志,再更新视图;更新失败可从日志恢复。不要先改 JSON 文件,随后“有空再补日志”。
并发冲突案例。
编剧在 v09 把父亲账户金额改为 300 万,图形设计师同时基于 v08 制作 320 万总账。设计提交时发现父版本已过期,任务进入 conflict。界面显示字段差异,由设计师重新生成,不允许“最后保存者获胜”。
对无冲突字段可以自动合并,例如编剧修改对白,声音导演补充发音;但任何合并仍产生新版本和父版本列表。
56.4 删除保留、不变量、审计与迁移#
删除也是事件。
删除镜头不应直接抹去。记录 shot_deprecated,取消未开始任务,保留已生成素材的历史引用,并检查音乐、字幕和编号是否需要重排。已发布素材仍可引用旧镜头,但新版本不得自动检索。
数据保留层级。
永久保存批准事实、权利、事件、母版和关键生成参数;项目期保存所有候选与中间文件;可按政策清理大体积拒绝素材,但保留缩略图、哈希和失败标签。任何清理不得破坏发布版本重建。
状态不变量。
除了 Schema,还要定义跨实体不变量:批准镜头只能引用 approved/locked 资产;同一人物同一时间只有一个有效基础服装;Release Candidate 的文件哈希必须与 QC 证据一致;P0/P1 开放时 can_advance=false;权利过期自动使相关 RC 失效。
不变量在事件提交前检查。若授权资产退役,系统允许历史版本保留,但阻止新 RC 使用,并创建下架或重新授权任务。
审计查询。
系统至少能回答:谁在何时把角色 v02 提升为 v03;错误金额进入了哪些文件;E001 发布时使用哪个模型和音乐许可;一次客户变更增加多少返工;某 P2 为何豁免。无法回答,日志只是堆积而非生产记忆。
Schema 迁移。
数据结构升级不能直接重写旧项目。迁移脚本保留原值、生成迁移事件并验证发布版本仍可重建;无法映射的字段进入人工队列。迁移前制作快照,迁移后比较实体数量、引用完整性和关键哈希。新旧智能体在过渡期必须声明支持的 Schema 版本。
迁移报告本身也属于永久审计记录。
三层真相模型。
系统同时管理规范真相、生产真相和发布真相。规范真相是当前批准的人物、故事、资产和权利;生产真相是某项任务实际使用的输入版本与结果;发布真相是某个 RC 在某一时间真实包含的文件。三者不能被一个“当前版本”字段混在一起。
林筠身份已经从 v02 升到 v03,不代表旧 RC 从未使用 v02;当前规范金额改为 3.2 亿元,也不能改写已下架测试版曾显示 3 亿元的历史。审计必须能在任何时点重建三层状态。
56.5 业务事件、存储架构与确定性边界#
失效不等于删除。
上游变化时,下游工件进入 stale 或 invalidated,而不是立即删除。stale 表示输入已变化但结果可能仍可通过复核,例如轻微服装纹理更新;invalidated 表示关键事实、身份或权利变化,结果不得继续推进。
失效事件要携带原因、变更字段、传播路径和建议动作。调度器暂停受影响任务,已发布 RC 进入风险评估,人工决定重验、重算、豁免或下架。自动重生成所有依赖既昂贵,也可能破坏已批准表演。
事件应表达业务语义。
“文件已修改”不是有用事件。系统需要 character_identity_promoted、episode_pack_approved、rights_expired、picture_lock_revoked 等业务语义,因为不同事件有不同传播和权限。对象存储上传成功只是技术事件,不能自动等于资产批准。
事件至少包含行为者、时间、实体、前后版本、原因、证据、权限上下文和幂等键。同一请求重复到达时,幂等键阻止写入两个批准事件。
最小可运行存储架构。
小团队不必先建设复杂平台,但至少分开四类存储:关系或文档数据库保存实体与状态;追加式事件日志保存变化;对象存储保存图像、音视频和工程文件;搜索索引提供文本与相似检索。数据库只保存对象 URI 与哈希,不把大型媒体塞进聊天历史。
所有层共享稳定 ID。备份策略优先保护事实、权利、批准事件和 RC;可重新生成的拒绝候选可以按保留策略清理。系统每月随机抽一个已发布版本做重建演练,验证所谓“可追溯”不是纸面承诺。
幂等、顺序和重复事件。
外部服务重试、网络超时和消息队列可能让同一事件到达多次。每个业务动作带幂等键,写入前检查是否已处理;重复 asset_approved 不能再次触发预算、通知和下游任务。事件消费者保存处理位置,并能在崩溃后从上次确认点继续。
跨实体事件可能乱序。motion_generated 若先于 keyframe_approved 到达,系统不应假装前置闸门已通过,而应暂存、拒绝或标为孤儿。依赖条件由状态机验证,消息时间戳不能替代业务顺序。
事件重放与确定性边界。
从快照重放事件应重建相同的结构化状态,但不重新调用随机生成模型。事件记录的是“哪个候选被批准”和其内容哈希,不是要求重放时再次生成一张相似图。确定性属于状态恢复,媒体生成结果由对象存储保存。
重放测试选取随机项目和时间点,比较实体数量、关键字段、依赖边、RC 清单与哈希。发现差异时先检查非确定性迁移、隐式副作用和缺失事件。任何只能依靠当前数据库、无法从历史解释的字段都是审计缺口。
数据删除、隐私与审计的冲突处理。
权利方或隐私主体要求删除数据时,系统需要在法律义务、合同和审计之间做受控处理。敏感原文或生物特征可删除或隔离,事件日志保留不可逆匿名标识、删除时间、依据和受影响工件,证明系统执行过删除而不继续暴露内容。
删除传播到缓存、搜索索引、训练集、备份恢复策略和第三方供应商。只删主数据库而旧备份恢复后重新出现,等于没有完成。正式项目应由专业法律意见确定具体保留与删除边界,本书只提供工程控制框架。