Agent 中断后,原任务如何安全接管?从恢复标记到效果事实

Agent 中断后,原任务如何安全接管?从恢复标记到效果事实

排查 Agent 异常退出时,任务文件还在、报告还在、任务所处的生命周期目录也没丢。工程师很容易得出一个结论:换一个 Agent,读取文件,继续执行。

这个方向是对的,但"文件还在"只解决了任务身份和工作上下文,没有回答最危险的一句:原 Agent 在中断前,动作做到哪里了?

如果它尚未开始,新的执行者可能获准重新执行;如果它已经修改了外部系统、只差写收尾报告,再做一次就会制造第二个效果;如果无法确认,自动执行只是在用猜测代替事实。本文研究的不是如何新建任务或重新派单。相反,研究对象始终是 FCoP 五桶中的同一张 TASK:Agent 中断后,谁可以接管,以及依据什么决定重新执行、对账或待核对。

CodeFlowMu 是我们开发的本地多 Agent 协作 Runtime:它以 FCoP TASK/REPORT 文件组织工程协作,并维护 Session、lease、调度、审批和证据。本文固定检查 V2.1.2 基线 919c3b48 的真实代码和测试;数据属于该固定基线。至 2026-09-02 公开稿,后续接管合同已经冻结;本文不主张新能力已实现、通过独立 QA 或发版。

本文根据完整研究稿整理,保留原实验数据和证据边界。

1. 外部项目提出的是"中断后的不确定性"

OpenAI Codex 是 OpenAI 维护的开源编程 Agent;其 #41916 处理重新连接后的 active thread,但对可能已经提交、状态却不明确的输入选择保留给人工审阅,而不是自动重发。它说明连接恢复并不能证明动作未发生。

AG2 是开源多 Agent 框架;其已合入的 #3222 允许跨连接、跨进程加载持久历史,同时明确没有跨进程 lease。历史可读取,和另一个执行者有权接管,是两件不同的事。

Orkas 是一个开源多模型聊天应用。其 #53则把重复 terminal/process 事件当作 replay,并确保只接受一次 finalization。它提醒我们:恢复通道变多时,旧执行者的迟到回写也必须被控制。

这些项目不是 CodeFlowMu 的依赖,也没有替我们证明缺陷。它们把问题收窄为一个可验证的命题:中断首先是一项技术事实,而不是"原动作已经失败"的业务事实。

2. TASK 身份仍在,Session 不能原地复活

FCoP 文件落盘后,原 TASK 不会因为 Agent 进程消失而变成一张新任务。接管者应沿用同一 task_id、文件路径、线程归属和生命周期位置;不能创建第二张 TASK,也不应把原任务伪装成新的派发请求。

但原 Session 的内存、SDK 连接和本地执行句柄可能已经不存在。因此 Runtime 需要先处理执行权:先检查托管外部作业和旧 owner 是否仍有效;有效时保留执行权、不制造 successor。只有满足既有回收条件时才处理旧 lease,再判断接管准入。

V2.1.2 已有重要保护。reconcileLostSessions 对仍存活的托管作业保留运行状态和 lease,不制造第二次调度资格;对无 live handle 的记录收敛为 SESSION_LOST。另一组探针还验证:重启后的 successor 已接管时,旧 Session 的迟到 settle 不会覆盖已收敛的旧记录。这些能力应保留。

可见,正确的问题不是"能不能恢复旧 Agent",而是:旧执行者还能不能写,新执行者能不能开始,以及原动作事实是什么。

3. recoverable 不是"动作没有发生"

当前 Runtime 有一条将未结算 Session 识别为 recoverable 的技术路径:例如 Session 未完成且没有 REPORT,界面/队列可以建议 recover。它适合表达"Runtime 需要处理一次中断",却不包含外部动作是否发生的判断。

因此,我们没有只凭静态字段推断缺陷,也没有假设一次真实支付、邮件或 Issue 已经发生重复。受控探针直接进入实际 Dispatcher 的普通恢复方法,固定退避为零,只隔离"它会作出什么恢复决定"。输入分别是:

场景 合成事件声明的效果语义 建议的安全动作 当前观察
RA-7 effect 已确认存在 reconcile_only 被恢复到 inbox
RA-8 effect 未知 hold_for_review 同样被恢复到 inbox

两种语义不同的输入获得了同一个自动恢复前置状态。代码路径没有消费 operation_fingerprintoperation_outcomeretry_policynext_safe_action。这不证明线上已经产生重复副作用;它证明的是更窄的工程断点:中断后的普通恢复尚未把效果事实纳入接管准入。

这里需要特别避免一个措辞错误。当前实现中有一些方法名和队列状态使用 failed,但本研究的入口不是 failed。意外关机、进程消失、lease 失联或收尾未写完,首先是 interrupted。把它立刻翻译为"动作失败、可重新执行",恰好跳过了最需要确认的事实。

因此,至少应把三个概念分开:

text 复制代码
技术中断 ≠ 动作未发生 ≠ 可重新执行

RA-7/RA-8 的输入是合成事件,不是对真实外部系统查询得到的事实。两项观察的转录、原研究 fixture 与限制见证据包

4. 接管之前,先确认动作到底发生没有

这不是要在五桶之外另加一个任务池。它是同一 TASK 的一次受控确认:

text 复制代码
中断
  → 检查外部执行与原 owner 的有效性
  → 执行权未释放时阻断接管
  → 确认效果事实
  → 同 TASK 重新执行 / 仅对账 / 待核对

先检查一个前置条件:

  • 外部执行仍活,或原 owner 仍有有效执行权 :记录 not_admitted,保留原 owner,不创建 successor。owner 有效不等于动作正在运行;阻断理由和效果事实必须分开。

只有确认原执行不再运行,才进入三种 admission disposition:

  • 效果确定未发生 :在当前授权、效果事实与 successor ownership 都有效时,由 successor 对同一 TASK reexecute
  • 效果已确认:禁止重做原动作,只补 REPORT、审计或对账;
  • 效果未知:阻断自动执行,交给既有 FCoP 的事实核查和审核责任链;

另外,旧 owner 迟到终态:作为独立 fencing 事件拒绝覆盖 successor 的权威状态,最多保留诊断记录;它不改变当前 admission disposition。

这比"失败就重试"多了一步,却避免把最昂贵的判断交给运气。对于只读操作或具稳定幂等键的执行器,确认过程可能很快;对于无法查询且不可安全去重的外部操作,unknown 不是失败,而是诚实的安全结论。

图 1:冻结合同的接管判断摘要,不是 V2.1.2 已实现流程。仍在运行或原 owner 有效时先阻断;进入判断后,效果事实决定三种处置,旧 owner 迟到写入独立处理。来源:RUN-002、冻结合同 Rev.2;研究限制见证据说明。

点击查看高清图

5. 复用既有能力,冻结窄接管合同

CodeFlowMu 不需要重做整个 Agent 平台。外部平台可以提供会话恢复、执行状态和工具回执;CodeFlowMu 继续负责同 TASK 的 lease、FCoP 生命周期、事实核查和最终处置。

已有的 recoverTaskExecution 也已经具备治理快照、revision 二次校验、recovery fence 和 live Session 阻断。下一步不应发明"大而全的 Recovery Epoch 框架",而是在既有技术中断接管入口前使用已冻结的窄合同。以下是设计要求,不是基线能力:

text 复制代码
输入 = 当前 TASK/attempt/lease 身份
     + 已核验的效果事实
     + 当前 revision 下有效的授权

结论 = reexecute | reconcile_only | hold_for_review

陈旧 owner 终态 = stale-owner fencing event(不覆盖上述结论)

其中 hold_for_review 是接管结论,不是第六个生命周期桶;它必须在既有五桶中有明确的展示、阻断和再准入责任人。

更重要的是,这个判断不能只挂在某一个 UI 按钮或一条恢复路径上。任何处理 technical interruption takeover、创建该次中断 successor 的入口,都必须经过同一份 recovery admission 合同。正常 PM/ADMIN 授权的 rework、reassign 和新 round retry 保留原路径,不创建 interruption case;混合入口由服务端依据持久状态分类,不能由调用方自报绕过。底层 startSession 不应自行推导"是否可以重新执行"。否则,即使一个恢复入口修正了,另一个旁路仍可能绕过效果事实检查。

6. 证据边界与下一步

本轮复跑包括 Session/lease、Dispatcher、治理、事实核查、EVAL 与证据关联等路径。关于"决定如何留下、但不越权"的第二个研究在配套文章中单独讨论。两项研究不能互相代偿:前者确认动作事实,后者确认接管决定的证据与授权连续性。

本研究未执行真实掉电、浏览器端到端流程或真实外部副作用;RA-7/RA-8 固定了退避以观察恢复判定。因此它不能给出线上重复率,也不应被写成"CodeFlowMu 已经自动重复执行"。它支持的结论更具体:FCoP 的文件让任务身份在 Agent 中断后仍然连续;但任务身份连续,不等于执行许可连续。要让另一个 Agent 安全接管同一 TASK,Runtime 还必须确认中断前的效果事实,并重新验证当前执行授权。

后续冻结合同区分两条重执行分支:可信未开始证明对应 none_verified,需要当前 recovery authority 与 successor ownership;重做已识别动作的 single_verified 还需要 operation binding 与可用的 operation authority。无法解释的证据或未分类的多动作保持待核对。IA-1~IA-12、DC-1~DC-3 与独立 QA 是后续实现验收,不是本轮研究成绩。

资料与语言版本

证据说明与可下载研究模板 · 配套研究 · English version

证据包检查的是已保留的研究观察与文件摘要,不是新一轮产品复跑或独立 QA。

研究主页

相关推荐
武汉星际互动13 分钟前
从“反复跑”到“一次办”:边聊边办如何打通政务咨询与办理?
人工智能·政务
人工智能培训16 分钟前
人工智能性别与地域偏见的成因及消解路径
大数据·人工智能·算法·生活
段一凡-华北理工大学16 分钟前
高炉炉况智能诊断与预警实战~系列文章24:炉况诊断实战全景复盘:从需求到价值的完整案例
大数据·人工智能·机器学习·模型可解释性·高炉智能化·高炉炉况诊断·高炉炉况预警
算法大模型备案干货咪21 分钟前
《大模型备案工程实操:语料标注规则、关键词拦截列表与测试题集的设计》
数据库·人工智能
小白说大模型27 分钟前
基于 Qwen3.8-Max 构建 AI 合同精审系统:文档解析、多轮条款分析 Pipeline 工程实战
数据库·人工智能·spring·机器学习·自然语言处理
2601_9676598930 分钟前
2026政务大厅服务机器人选型:咨询导览业务分流四类场景
人工智能·机器人·政务
qq_3391911432 分钟前
go cpu占比高排查,cpu100%排查,go pprof cpu命令
开发语言·后端·golang
AI工具测评家33 分钟前
2026实测对比|论文降AI改写底层技术解析:同义词替换≠真正去除AI写作特征
人工智能·机器学习·ai写作·降重·ai检测·查重·降ai
m4Rk_33 分钟前
【论文阅读】Agent 记忆机制(56):R2D2——把历史网页轨迹变成可搜索地图与反思记忆
论文阅读·人工智能·学习·开源·github