01

先定义任务和完成条件

多 Agent 演示很容易做得热闹:一个负责研究,一个负责写作,一个负责配图,屏幕上同时滚动进度。真正上线后,问题往往发生在网络超时、窗口关闭、来源打不开或某个执行者交回半份结果。可恢复工作流要解决的不是让所有人同时忙,而是任何一步停下来以后,系统仍然知道任务身份、当前状态、已完成动作、产物位置和下一位负责人。先选一个边界清楚的样例,例如一篇教程从资料到发布,不要一开始就拿全部网站改版做测试。

02

依赖图决定哪些可以并行

把任务拆成依赖图,而不是按岗位写一串待办。研究去重与官方资料核验可以并行,正文必须等关键事实锁定,配图概念可以提前开始但成图要等结构,发布一定要等正文、图片和多语言审核完成。每个节点写清输入、输出、完成条件、超时、允许重试次数和交接对象。能并行的前提是彼此不争同一份可变状态;两个 Agent 同时改同一篇正文,看上去更快,合并时通常要把时间还回去。

03

Checkpoint 要写到模型之外

Checkpoint 必须保存在模型对话之外,至少包含 taskId、当前状态、已完成动作、来源与产物 URI、使用的模型和提示版本、未解决问题、下一步及更新时间。不要只写研究已完成,这种摘要换个人就接不上。更好的记录会列出确认了哪些来源、拒绝了什么、正文草稿在哪、图片是否生成、哪些语言仍在 review。恢复时新的 Agent 先读状态表,再按产物 URI 验证文件真的存在,不能把旧聊天的最后一句当作真实世界状态。

04

重试不能重复副作用

所有有副作用的节点都要幂等。发布、写数据库、上传图片、发消息与扣费操作使用稳定 idempotencyKey,重试前先查远端结果。客户端超时不等于服务端失败,直接再跑一次可能创建两条内容或发两次消息。节点内部可以采用 prepare、validate、commit:先生成待提交产物,再做校验,最后才执行正式动作。提交成功后把远端 ID 和时间写入 checkpoint;没有远端证据,就不能只凭界面没有响应判断失败。

05

把人工确认放在危险动作前

人工闸门放在发布、付款、删除、外部消息、生产配置与敏感数据前。Agent 可以把变更、来源、差异和风险准备好,Claw 负责把待确认事项交给人,批准以后才进入执行节点。认证和权限错误不自动重试,429 按返回信息退避,网络与 5xx 只做有限重试;同一阻塞连续出现就暂停并说明需要什么外部条件。失败分类清楚以后,系统才不会用无限重试把一个权限问题烧成费用问题。

06

任务表要保存哪些字段

最小任务表可以保存 id、projectId、title、goal、status、ownerAgentId、inputRefs、artifactRefs、checkpoint、attempt、idempotencyKey、createdAt 和 updatedAt。status 不要只写进行中,至少区分 queued、running、waitingReview、waitingExternal、failed、completed。waitingExternal 表示缺登录、权限或外部状态变化,failed 表示执行本身失败,两者恢复方式不同。attempt 只统计真正启动的执行,人工修改说明不应该偷偷增加重试次数。每次状态迁移同时写事件日志,出了问题才能还原谁在什么时候依据什么证据把任务推进。

07

共享产物要有锁和版本

当两个 Agent 可能修改同一份正文、配置或数据库记录时,需要显式所有权。简单做法是在任务表写 owner 与 leaseUntil,执行者定期续租,租约失效后由 Claw 重新分配;更稳的做法是每个 Agent 只产出自己的版本,由负责人通过差异合并。写入时带 expectedVersion,版本不一致就拒绝覆盖并进入人工处理。不要用最后写入者获胜掩盖冲突,那会让一份较新的修改悄悄覆盖另一份更正确的结果。并发规则写清以后,增加 Agent 才不会等于增加随机性。

08

监控的是状态,不是热闹

运行面板要优先显示等待确认、失败原因、最后 checkpoint、执行时长和重试次数,而不是不断滚动的模型文字。长时间没有新 token 不一定失败,已经产生 token 也不代表产物有效。给每类节点设置合理的超时与心跳,只有状态和证据能说明任务是否前进。这样人看到红灯时知道该补权限、修输入还是恢复执行,不会被一堆看似忙碌的日志淹没。

09

用故障演练验收

上线前做故障演练:写作中途终止进程,图片上传完成后让客户端超时,让两个 Agent 同时提交同一 slug,再从 checkpoint 换一个执行者恢复。验收要确认任务没有重复、正式产物没有半份、外部动作没有执行两次、日志能还原过程,并且新执行者不需要翻完整聊天。多 Agent 的价值确实包括速度,但能不能放心交任务,取决于失败以后系统还认不认路。状态写在模型外、副作用幂等、提交与验收分开,这三件事做完,并行才从演示变成工作流。