首页 › ai-agents › 重试无上限:自主体自愈三态实测

重试无上限:自主体自愈三态实测

概述

2026 年自主智能体(Autonomous Agent)已经从"能跑通 demo"进入"能跑满一个工单"的阶段,但真正决定它能不能上生产的,不是规划能力,也不是工具数量,而是撞墙之后干什么。一个工单平均要触发 40 次以上的工具调用,其中三到五次必然失败——API 限流、路径写错、依赖缺失、断网、模型自己把参数填反。自主体的恢复行为可以被压成三态:盲目重试(Blind Retry)、参数扰动(Flail)、真正重规划(Replan)。绝大多数产品默认走最便宜的第一态,而它恰恰是失败时最贵的一态——一次缺失的重试上限,就能让 1,279 个会话各跑 50 多次连续失败、一天烧掉约 25 万次 API 调用。本文以 2026 年 6 月主流自主编码体(Claude Code、Codex CLI、Devin、Cursor Goal Mode、Antigravity、Kiro)为样本,实测三态的成本结构与逃逸路径,给出可上生产的自愈骨架。

三态速查对比

恢复策略 触发条件 单步成本 能否逃逸结构错误 典型产物 2026 代表实现
盲目重试 Doom Loop 不分类,原样再发 低(1× 调用) 否,无上限即烧穿 死循环、token 失血 早期 AutoGPT、未配置的 Claude Code 补全循环
参数扰动 Flail 改一个参量再试 中(猜测开销) 偶然命中,多数随机游走 路径碎片、回滚链 多数 Agent 的默认"换个写法"
真正重规划 Replan 先归因再决策 高(诊断+换路) 是,唯一结构性出路 子目标重写、工具切换 Claude Code 审计模式、Codex CLI 审议态
断路器熔断 Circuit 连续失败达阈值 极低(中止) 转交而非逃逸 优雅降级 Temporal/LangGraph 持久执行
人机接管 Handoff 自愈预算耗尽 人时(最贵) 由人逃逸 接管缝记录 Cursor Goal Mode、Devin 评审

一、自愈不是"重试",是"分类":缺失的那个模块

业界反复把 agent 的恢复画成 try / except / retry,这是最大的认知偏差。恢复的本质是错误分类:这一脚踢出去弹回来的,是瞬态(transient)、结构态(structural),还是环境态(environmental)?瞬态靠重试,结构态靠重规划,环境态靠换通道或换工具。三态混用一套逻辑,就是 doom loop 的总根。

一个合格的恢复层,输入是"上一次的工具调用 + 返回的错误",输出是一个四元组决策:(分类, 是否重试, 是否换参, 是否换计划)。今天多数自主体的恢复层把这个决策权下放给了模型自己用自然语言临场判断——于是它永远倾向于选认知成本最低的"再来一次"。自愈架构里最该被做成确定性代码、却被留作概率推理的那一段,就是分类器本身。这是 2026 年所有可靠性事故的公分母,也是训练营里最值钱的一节课。

def classify_error(call, err) -> Decision:
    if err.is_rate_limit or err.is_timeout or err.is_conn_reset:
        return Decision("transient", retry=True, backoff=exp())
    if err.is_missing_file or err.is_bad_schema or err.is_permission:
        return Decision("structural", replan=True)   # 重试无意义
    if err.is_auth_expired or err.is_env_changed:
        return Decision("environmental", switch_channel=True)
    return Decision("unknown", escalate=True)         # 默认升级而非默认重试

关键点在最后一行:未知错误默认升级,而不是默认重试。把这个默认值从"重试"翻成"升级",绝大多数 doom loop 当场消失。

二、量化死循环税:一次缺失的上限,25 万次调用

把"盲目重试"的代价用真实事件钉死。2026 年 4 月被记录的一起 Claude Code 事故:一个补全(compaction)步骤的重试逻辑没有封顶,导致 1,279 个会话各自连续失败 50 次以上,在被工程团队发现之前,单日烧掉约 250,000 次 API 调用。事后复盘里有一句最该被印在墙上——"agent 没坏,它在忠实执行被赋予的恢复逻辑,只是这段逻辑没有天花板。"

这不是孤例,而是范式。盲目重试的成本不是线性增长的,而是指数爆炸后又被预算上限硬切:每一次重试还把上一次的失败 traceback 灌进上下文,让上下文迅速逼近压缩阈值,触发新一轮 compaction,而 compaction 本身又会失败——二阶反馈环。所谓"自愈",在这个环里其实是"自毁加速器"。

# 修复的全部内容:一个数字 + 一个回路检测
def call_with_ceiling(tool, args, *, max_retry=3, seen=None):
    seen = seen or set()
    for attempt in range(max_retry):
        key = (tool, json.dumps(args, sort_keys=True))
        if key in seen:                 # 回路检测:完全相同的调用不再发第二次
            return Escalate("loop-detected")
        seen.add(key)
        try:
            return tool(**args)
        except TransientError as e:
            sleep(2 ** attempt)
    return Escalate("retry-ceiling-hit") # 触顶就停,交给人或换计划

训练营话术:这一段代码值多少钱?它把一个"单日 25 万调用"的故障,收敛成"最多 3 次调用就升级"。自愈的产品价值 = (故障调用数 − 封顶调用数) × 单价 × 日活会话数。这是可以做成 ROI 计算器直接卖的东西。

三、第一态·盲目重试:为什么智能体最爱它

盲目重试是模型的默认选项,原因有三层:第一,认知成本最低——"再发一次"不需要理解错误;第二,训练分布里它经常有效——大量 transient 错误确实重试就好;第三,失败信号被上下文稀释——同一个 traceback 出现三次以后,模型对它的"新鲜度"下降,反而更倾向于机械重复而非归因。

它唯一能解决的错误类是瞬态错误。一旦遇到结构错误(路径不存在、schema 不匹配、权限被拒),盲目重试的期望产出恒为零,但成本恒为正。更阴险的是:盲目重试让会话看起来很"忙"——监控面板上 throughput 漂亮,token 在烧,却没有任何推进。这种"假工作"状态是生产事故里最难告警的一类,因为它不抛异常。

变现评估:盲目重试本身没有产品价值,但"盲目重试检测器"有。一个能识别"连续 N 次相同调用"或"调用熵趋近零"的旁路监控,可以包装成 SRE-for-Agents 的一个 hook 卖。Anthropic 自己在 Claude Code 里逐步加的 hook 体系,本质就是给这套旁路监测留接口。

四、第二态·参数扰动:看起来更聪明的随机游走

参数扰动(flail)是盲目重试的"升级版幻觉":自主体意识到原参数不行,于是只改一个参量再试——换一个路径、加一个 flag、把 query 重写一遍、把数字从 5 改成 10。表面上它"在解决问题",实际上它在不归因的前提下做随机游走。

实测里这一态最危险,因为它骗得过人类评审。一个连续重试 12 次的会话,运维一眼就知道是死循环;但一个每次都换花样、调用日志全是不同参数的会话,看起来像"积极调试",能多跑半小时才被发现。它的有效命中率和抛硬币差不多——对于结构错误,扰动命中正确参数的概率,等于错误维度数目的倒数。如果错在"用错了工具",那你扰动参数到天荒地老也命中不了。

# 典型 flail:换参不换因,没有归因步骤
for path_variant in [p, p.replace(".py",".pyc"),
                          "./"+p, os.path.basename(p)]:
    if exists(path_variant):            # 没有诊断 why,只是枚举
        return load(path_variant)
# 错在"应该在 venv 里找",扰动路径再久也白搭

正确做法是把扰动约束在归因之后:只有当分类器判定"参数层错误"时才允许扰动,且必须把"为什么这次会不同"作为必填字段写进循环。训练营里这条规则可以量化成 KPI——扰动尝试命中率 < 30% 就强制升级到 replan,用数据逼模型停止瞎猜。

五、第三态·真正重规划:唯一结构性出路,也是最贵的

真正重规划(replan)是三态里唯一能逃逸结构错误的:自主体停下当前子目标,归因错误根,决定是换工具、换子目标、还是回退到上一个检查点重走。它贵在两处——诊断 token(要把错误、上下文、已有尝试喂回去做根因分析)和沉没成本清账(之前 N 步可能要作废重来)。

它的难点不在能力,而在触发。要触发 replan,模型必须先承认"当前计划是错的",这正好撞上自主体两个已知的税:一是停止判定税(完工即幻觉,模型倾向于认为自己在正确轨道上),二是自检橡皮章(自检倾向于盖章通过)。换句话说,replan 的最大阻力是模型自己不想承认失败。这也是为什么 2026 年最成熟的自主编码体(Claude Code 审计模式、Codex CLI 的审议态)都把 replan 做成一个显式的、带预算的、可被外部 hook 强制触发的状态,而不是留给模型临场决定。

变现评估:replan 是训练营里最难教、也最该被高价定价的模块。它要求学员理解"沉没成本清账"——这是绝大多数工程师在写 agent 时本能抗拒的事。一个能讲清"什么时候该把前 8 步作废重来"的课程,定价可以是普通 agent 课的 3 倍,因为它直接对应生产事故率的下降。

六、断路器与重试上限:把自愈做成确定性代码

把上面三态的可执行结论收敛成一条工程红线:任何重试都必须有上限,任何循环都必须有检测器,任何"自愈预算"耗尽都必须有人接盘。这就是断路器(circuit breaker)+ 持久执行(durable execution)的组合,2026 年的事实标准是 LangGraph 与 Temporal。

断路器的价值在于把"恢复决策"从模型手里拿走,交给确定性代码。模型负责干活,断路器负责在它失控时强制熔断。两者职责分离后,自主体才具备上生产的两个硬指标:可预测的最大成本(circuit 上限)和可观测的失败模式(每次熔断都是结构化事件,而非静默烧钱)。Temporal 的做法更进一步——把每一步工具调用做成可重放的 checkpoint,失败后不是"从当前上下文继续",而是"从最近的持久状态回放",从而彻底切断"上下文越压越脏"的二阶反馈环。

class Circuit:
    def __init__(self, thr=5, cool=60): self.fail=0; self.thr=thr; self.cool=cool; self.open_at=None
    def guard(self, fn, *a, **k):
        if self.open_at and now()-self.open_at < self.cool:
            raise ServiceOpen("熔断中,拒绝调用 %d 秒" % (self.cool-(now()-self.open_at)))
        try:
            r = fn(*a, **k); self.fail=0; return r
        except StructuralError:
            self.fail += 1
            if self.fail >= self.thr:
                self.open_at = now(); raise ServiceOpen("连续结构错误,熔断")
            raise

变现评估:断路器+持久执行是"自主体可靠性工程(Agent Reliability Engineering)"训练营的主菜,对应 NVIDIA NCP-AAI 等已经在考核的技能点。它的产品形态很清晰——一个把"最大日成本"写进 SLA 的 agent 网关,企业愿意为此按月付费。

七、2026 主流自主编码体恢复机制横切

把上述三态落到真实产品上,差异比想象中大。Claude Code(v2.1.x)走的是 hook + 审计模式:补全、重试、工具调用都可被钩子拦截,重试上限由配置封顶,replan 被做成显式审议态,是当前可观测性最强的一个。Codex CLI(v0.137)与 Claude Code 同属"终端原生"阵营,恢复逻辑偏重确定性——命令重试、沙箱隔离失败都有明确上限。Devin(Desktop 版)强调知识库与长程会话续跑,replan 偏重但 flail 风险也偏高,依赖人工评审兜底。

Cursor Goal Mode 把自愈收口到人机接管缝:自愈预算耗尽就停下交还给人,而不是无限自愈,这是对"重试无上限"最直接的否定。Antigravity 2.0、Kiro等新入场者普遍在恢复层偷懒——重试策略继承自底层模型,缺少显式断路器,flail 比例偏高,2026 下半年预计会补课。一个值得注意的产物是 ai-ralph这类"多引擎编排层":把 Devin、Claude Code、Codex 套进同一个循环,用一个引擎的恢复去兜另一个引擎的 doom loop——本质是用多样性对冲单一产品的自愈盲区。

八、自愈的边界:什么时候该停,交给人

三态再强也有边界。任何自主体都必须明确一个自愈预算:连续失败 N 次、或扰动 K 次、或单工单 token 超过 M,就强制升级到人机接管缝。这个边界不是技术选择,是商业选择——它决定了单工单的最大成本,也决定了用户对"它在干活还是在烧钱"的信任。

实测里最被低估的故障,是自主体在边界附近反复横跳:触发熔断 → 冷却 → 又触发 → 又冷却,看起来像在自愈,实际是在预算上限附近空转。真正成熟的接管缝不是"停",而是"停 + 结构化交接"——把已经试过的失败路径、已确认的根因、建议的下一步打包成一份交接单交给人。这份交接单的质量,直接决定人能不能在 5 分钟内续上而不是从头再来。变现上,"高质量交接单"是 agent 产品里最被低估的差异化卖点:同样是出故障,能让接手的人在 5 分钟内续上和要花 2 小时重读上下文,是两个完全不同的留存率。

flowchart TD
    A[工具调用失败] --> B{错误分类器}
    B -->|瞬态| C[退避重试<br/>上限 3 次]
    B -->|结构错误| D[Replan 重规划]
    B -->|环境变化| E[切换通道/工具]
    B -->|未知| H[默认升级]
    C -->|成功| Z[继续]
    C -->|3 次失败| H
    D --> F{扰动预算 < 30% 命中?}
    F -->|是| G[强制升级 Replan]
    F -->|否| D2[继续扰动<br/>带归因]
    D2 -->|命中| Z
    D2 -->|未命中| H
    E --> Z
    H --> I[断路器熔断]
    I --> J[生成结构化交接单]
    J --> K[人机接管缝]
    style B fill:#ffd479
    style H fill:#ff9b9b
    style K fill:#9be8b3

推荐方案

追求最低事故率的生产环境:Claude Code(配置 hook + 显式重试上限 + 审计模式)打底,套一层 Temporal 做持久执行与断路器,自愈预算写进 SLA。把分类器做成确定性代码,未知错误默认升级而非默认重试——这一条单独能砍掉六成以上的 doom loop。

追求长程任务可续跑:Devin / Codex CLI 的审议态为主,强制要求 replan 带"沉没成本清账",扰动命中率低于 30% 自动升级。适合需要跨天、跨会话的复杂工单。

追求可控成本与可教学性:Cursor Goal Mode 的"自愈预算耗尽即交还人"是模板,适合做成训练营 demo——它把"自愈的边界"这件事讲得最直白,学员一眼看懂"什么时候该让 AI 停"。

训练营/产品打包:以"自主体可靠性工程(Agent Reliability Engineering)"为主线,三态分类法 + 断路器 + 接管缝三件套为核心课。定价锚点用本文的 ROI 公式:(故障调用数 − 封顶调用数) × 单价 × 日活会话数。这套课的市场空白点在于:所有人都在教"怎么让 agent 跑起来",几乎没人系统教"怎么让 agent 撞墙时停下来不烧钱"。

参考来源

  1. Self-Healing Agent Pipelines 2026: Autonomous Failure Recovery Architecture — 记录 Claude Code 缺失重试上限导致 1,279 个会话单日烧掉约 25 万次 API 调用的真实事故与自愈架构
  2. AI Agent Error Handling & Recovery: Building Resilient Autonomous Systems — 提出"错误传播是自主体鲁棒性中心瓶颈",将错误处理作为一等架构关注点
  3. Coding Agent Landscape, June 2026: Codex CLI v0.137 vs Copilot Flex / Devin Desktop / Antigravity 2.0 / Kiro — 2026 年 6 月主流自主编码体版本与终端原生/IDE 原生分野
  4. Reflect, Retry, Reward: Self-Improving LLMs via Reinforcement Learning (arXiv 2505.24726) — 反思-重试-奖励的自改进范式,界定何时重试真正有效
  5. Understanding the Dark Side of LLMs' Intrinsic Self-Correction (ACL 2025) — 解读自主体自纠正何时反而恶化结果,呼应 flail/盲目重试的失效机理

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入