处理失败与恢复
区分执行层重试、语义层返工与人工重跑,理解各自的上限、影响范围,以及什么时候应该重建任务。
三种失败处理,不要混用
平台区分三种处理方式,因为它们解决不同性质的问题。
重试处理执行故障:模型网关超时、运行时崩溃、命令超时、节点协议缺失。重试优先恢复原会话,无法可靠恢复时创建新会话。重试不创建新的执行。
返工处理语义缺陷:下游节点确认上游产物在语义上有问题。返工始终创建新的会话、执行与产物版本。
人工重跑处理终态失败任务中的单个节点。重跑改写失败记录的方式是把它追加到历史,而不是抹掉。
区分它们的原因是计数和上限不同。只有下游确认上游产物语义缺陷才增加返工计数;网关抖动不会消耗返工预算。
失败如何被分类
编码驱动把原始错误归一为平台类型:瞬时故障、驱动崩溃、超时、契约违反、认证失败、权限拒绝、预算超限、已取消与语义失败。
监督器不解析运行时的自然语言错误来决定状态迁移。这一点很重要:如果状态迁移依赖模型对错误文本的解读,那么同一个错误在不同措辞下会产生不同行为。
返工的目标选择
下游无法自行修复语义问题时返回结构化失败。监督器校验目标和配额后生成规范化的失败报告,其元数据至少包含失败节点、返工目标、产物身份与版本、失败代码和可重试性。
返工目标必须是相关产物的合法生产节点,不能按执行顺序机械选择上一个节点。这个约束防止把返工错误地指向一个与该产物无关的节点。
上游生成新版本产物后,监督器沿依赖关系使所有消费旧版本的派生节点失效,并仅重跑受影响的子图。无关分支不重跑。
上限
返工同时受三个上限约束:每节点最大执行数、每目标最大返工数、总返工数。加上每次执行的门禁修复上限,全部由流程显式冻结,节点不能覆盖。
任一上限触发后任务失败。这是有意的:返工循环失控的代价远高于一次失败。
失败节点的下游停止,无依赖的独立分支继续执行。
人工重跑单个节点
终态失败的任务允许用户仅重新执行一个失败节点。
重跑不改写失败记录,而是将当前执行追加到历史后创建新的执行。已完成上游的产物与代码修订按冻结证据复用,不重跑。
目标节点成功后,运行器继续执行尚未运行且依赖已满足的下游节点。
重跑会按任务创建者和仓库权限重新解析当前全局 Git 连接器及个人凭据的最新修订,再通过已认证的内部接口刷新沙箱监督器内存中的发布配置。令牌不进入 Agent、提示词、执行规格、快照或路由数据。 任务顶层保留创建时的快照,每次执行单独记录本次解析的非密钥修订。
空响应
模型连续返回无文本、无工具活动且输入输出令牌均为零时,运行器将其分类为空模型响应,按退避策略启动有限次数的恢复会话。
耗尽后保留明确的节点失败,供用户在更新模型或连接器后单独重跑。不把空响应伪装成完成。 这是重要的:静默的空响应会产出一个看似成功但没有内容的节点。
运行中重规划
运行中发现计划不成立时,Agent 可以提议新的流程修订,重新执行编译、权限与风险评估。
初始规格保持不变。后续修订写入追加式计划日志,完整保留旧拓扑、变更原因、发起者与审批记录。
已完成节点只有在调用契约、输入、上游产物、节点模板与能力摘要全部兼容时才可复用;否则显式标记失效并重跑。
重规划不能删除历史证据,也不能把尚未执行的新节点伪装成初始计划的一部分。
等待人工输入
Agent 提问只把当前执行标记为等待输入。相关下游等待,无依赖的并行分支继续运行。
回复绑定节点、执行与问题标识。失效执行的旧问题自动关闭——否则一个已经被新执行取代的问题会继续占用注意力。
问题默认等待一定时长,超时后默认使任务失败,也可以配置为继续假设或仅使该节点失败。
用户主动发送消息时,Agent 忙则进入待处理队列。显式强行插入优先使用运行时原生的插入能力,否则中断当前轮次并恢复。无法可靠恢复的运行时必须明确拒绝强行插入。
待处理消息在送达前允许编辑或撤回,输入区始终显示目标节点、执行与会话。
取消
用户可以取消单个执行后手动重跑,或取消整个任务。
不支持永久跳过必需节点后让依赖图自动继续。 这是刻意的限制:跳过必需节点会破坏产物契约的完整性,让下游消费一个从未被生产的东西。
取消受理、进程退出、持久终态和业务成功是不同的状态事实。缺少退出证据的副作用保持未知,不会被自动重放。
什么时候重建而不是恢复
重建任务读取原任务的业务输入,并以当前操作者身份创建新任务,重新冻结模型与凭据、能力锁和运行时,同时重新签发知识访问策略。旧任务完整保留。
在以下情况重建比恢复更合适:
- 需求本身已经变化;
- 需要更换模型或网关;
- 原任务使用的流程版本已被弃用,你想用新的;
- 你想以另一个人的身份和权限执行。
恢复适合计划仍然成立、只是执行中断的情况。重建适合输入或环境已经改变的情况。