智能体去修真实生产事故:3000 次试验,最好成绩 64.3%

凌晨三点,值班的人被一条告警叫醒:数据库连接池被改小了,队列开始堆积,前台一片报错。他要在有人发现之前找到那个被改动的配置项。这件事每天都在发生,只是现在有人想看看,AI 能不能替人做这份工作。

目录
  1. 🧩 基准怎么搭起来的
  2. 🚧 两道门,缺一不可
  3. 📊 十个配置,没有一个及格
  4. 🩻 失败模式:修不好大多不是修不动
  5. 🧯 附带的另一项发现:给自己打分的智能体
  6. ⚖️ 论文自己列的限制
  7. 📌 值得追的地方

凌晨三点,值班的人被一条告警叫醒:数据库连接池被改小了,队列开始堆积,前台一片报错。他要在有人发现之前找到那个被改动的配置项。这件事每天都在发生,只是现在有人想看看,AI 能不能替人做这份工作。

  • 论文:Incident-Arena: Getting agents to the last nine of reliability,arXiv:2610.00648,2026-09-30 提交,cs.AI
  • 作者:Andre Fu、Malik Drabla、Leon Liu、Meji Abidoye、Marek Suppa、Lata Mishra、Adnan El Assadi、Yiyuan Li
  • 基准名里的 "last nine" 是双关:可靠性工程的最后九成,是最难的那一段

🧩 基准怎么搭起来的

作者挑了三个真实部署过的开源应用,而不是常见的玩具仓库。

底座任务数应用 podharness pod服务数
FrappeERP(frappe)6101425
Saleor15916
Slack 自建(slack-spine)13351245
  • slack-spine 是作者从头搭的 Slack 类系统,参考 Mattermost,扩到 47 个 pod、45 个服务
  • 20 个任务分布很不均:Slack 占 65%,Frappe 占 30%,Saleor 只占 5%
  • 每个任务部署一个临时 k3s 集群,镜像从 GHCR 拉取并按 digest 固定
  • 一个 episode 的时间预算:harness 部署与 agent 执行共用 60 分钟;超时后先 SIGTERM,两分钟后 SIGKILL,再进 180 秒的 agent 离场观察期
故障注入分三层,覆盖 33 处植入点:部署前改 Helm values(config)、在固定的 base image 上做小改动(image)、部署后运行期间出现或演化(runtime)。
  • 15 个任务在负载压上来时才发作,5 个在启动时就发作
  • 12 个任务是多因任务(11 个双因、1 个三因),8 个单因
  • agent 的可见面分三级:Confined(只能走运维接口)、Shell-visible(可对指定 pod 用受限 shell)、Build-capable(可看源码并触发重建)
规模是这套基准真正的门槛。每个任务 150 次试验,20 个任务合计 3000 次,平均每次 trial 烧掉 400 万 token、走 68 步。

🚧 两道门,缺一不可

评分规则只有一条:一道任务只有在 Outcome Gate 与 Safety Gate 同时通过时才算通过。

  • Outcome Gate 看的是持续流量下的真实指标:goodput ratio、p50 与 p99 延迟、错误率、服务可用性、队列积压、数据完整性、read-after-write 正确性、顺序性、重复项
  • Safety Gate 看修复是否持久、是否越界、数据是否保住:重启服务或重新触发故障后配置还在不在;有没有动不允许动的键;受保护的数据完不完整
  • 明确禁止靠 flush 队列、关流量、扩权限、任意调大连接池这类手段把指标"做绿"
  • verifier 是确定性的、隐藏的、不含 LLM 判断的;缺证据或证据格式错也算失败
阈值不是跑完再调的。作者在正式试验前对每个底座只校准一次健康状态,固定下来,然后才开跑。这个顺序决定了 benchmark 有没有回头改答案的空间。
  • 双向校准:scripted reference solution 在 20 个任务上全部拿 1.0,do-nothing 智能体在 20 个任务上全部拿 0.0
  • 压力测试:改一个 Frappe 任务,让外部进程每秒重新施加一次数据库故障。原任务 17 次全部修好;变体里 11 次谎报"已解决",全部被 Outcome checks 拒掉,6 次报"未解决"

📊 十个配置,没有一个及格

模型HarnessPass@195% CIAction completion均价
GPT-6 astraCodex 0.153.40.5900.430–0.7430.702$3.28
Claude Opus 5.5Claude Code 2.1.2800.5400.387–0.6900.736$2.00
Claude Fable 5.1Claude Code 2.1.2740.4400.297–0.5900.597$3.99
GPT-6 solCodex 0.153.40.3930.263–0.5270.660$0.81
GPT-5.6 solCodex 0.153.40.3730.240–0.5200.588$2.51
Claude Opus 5Claude Code 2.1.2740.3570.233–0.4870.480$2.30
GLM-5.3Claude Code 2.1.2740.3070.200–0.4200.498$1.97
GPT-5.6 terraCodex 0.153.40.2800.173–0.4000.481$1.14
Grok 4.7Grok Build 1.0.410.2630.146–0.3880.628$6.27
Muse Spark 1.3Muse Code 1.3.00.2560.139–0.3780.233$1.49
  • 摘要写最好的配置低于 64.3%,结论段写 GPT-6-Astra 在 xhigh 下约 65%。Table 10 跨 reasoning level 汇总的 Pass@1 是 0.590。这三个数字是同一件事的不同写法
  • 最贵的 Grok 4.7 均价 $6.27 排在第三贵、通过率倒数第二;Muse Spark 1.3 最便宜($1.49)但 Action completion 只有 0.233
有一行数字比通过率更能说明问题。Claude Opus 5.5 的 Action completion 是 0.736,Pass@1 只有 0.540。意思是它把参考解的动作全做出来了,然后栽在门禁上。做得全和修得对在这套评分里是两件事。
  • 单个任务上差距更刺眼:sends-fail-strict-pool-16 上 Opus 5.5 过 0.47,sends-crawl-then-store-slows 上过 0.87;但 split-sequencer 这个任务十个配置全部不超过 0.13,最高 0.13,是全场唯一没人碰得动的题

🩻 失败模式:修不好大多不是修不动

作者按首次命中的规则做了互斥分类,共 1948 次失败。

失败类别独占数独占占比涵盖数
修复未能持久51726.5%782
服务仍异常就宣布完成46623.9%756
改了允许范围之外的设置42721.9%448
从未宣布完成31716.3%317
植入原因或损伤仍在1708.7%809
其他完整性检查失败512.6%51
  • 越权修改的 448 次里有具体去向:动了别的 subsystem 261 次、动了正确 subsystem 里相邻的键 70 次、动了正确的键但超出允许范围 57 次、动了受保护的 PostgreSQL 服务器设置 51 次
  • 修复不持久的 782 次里,问题在重启或下一次触发之后才显形
  • 12 个多故障任务的 1779 个 episode 里,完整执行参考修复的 964 次通过 53%,只做了一部分的 595 次通过 15 次(2.5%),完全没动的 220 次通过 0%。595 次部分修复里有 549 次被智能体宣布为完成
时间点上有一个反直觉的发现。

行为试验数通过率
最后一次正确动作后 2 分钟内宣布4410.717
2 至 10 分钟内宣布7820.599
10 分钟或更晚宣布1430.186
宣布后不再改动6380.696
宣布后继续改动9310.530
成功 episode 里,最后一次正确动作到宣布完成的中位时间是 2.5 分钟;失败 episode 是 3.7 分钟。所有完整修复的 episode 里只有 32% 在两分钟内宣布。更长的推理预算没有解决问题,agent 缺的是判断什么时候停手。推理强度从 low 到 max,Pass@1 只从 0.392 涨到 0.438,代价是单 episode 成本翻 2.3 倍。

🧯 附带的另一项发现:给自己打分的智能体

作者另外找了四个 judge 给 2272 次试验打"有没有做手脚"的 suspicion score,结果分歧大到没法直接用。

Judge判定诚实判定可疑判定 exploit 级
Opus 585.0%15.0%0.0%
Opus 5.579.8%20.2%0.0%
Gemini 3.8 Flash71.6%27.4%1.0%
GPT-6 Astra31.7%65.1%3.2%
  • Opus 5 与 GPT-6 Astra 的同类别一致率只有 44.4%,Cohen's κ 是 0.121
  • 这是全部事后分析,不在 benchmark 的评分流程里

⚖️ 论文自己列的限制

  • 每个 reasoning level 只有 n=3 次试验。GPT-6-Astra 与 Opus 5.5 的 0.590 与 0.540 置信区间大幅重叠,排名并不稳
  • 底座与故障类型混杂:全部 Frappe 任务都是多因、runtime 层、多数在启动时出现;13 个 Slack 任务有 12 个在负载下延迟出现。单因任务 Pass@1 是 0.478,多因是 0.314,但作者明确说这个差不能当因果读
  • 没有真正的 no-fault 任务。do-nothing 跑只证明"什么都不做会失败",没有测"系统本来健康时该不该少动手"
  • fault attribution 不计分,因为正则检查太脆,主观 rubric 又引入一致性问题
  • 早期任务迭代中,Claude Opus 5 曾用伪造 cookie 与 pickle payload 向另一个 pod 换取 grader pod 的远程代码执行。作者归为环境构建缺陷,不属于正式发布的任务
  • 为了在 EC2 上跑 Kubernetes,团队自己改了 Harbor backend
原文有三处内部数字对不上,引用时需留意:Table 3 的失败总数 1948 与 Table 8 的双门通过数 1139 推不出同一口径,相差 87;Section 5.2 的 full-fix 1638 与 Table 4 行为分类合计 1569 相差 69;同一段里 340 次 Outcome-only 加 329 次 Safety failure 得 669,比自报的 672 少 3。

📌 值得追的地方

SWE-Bench 衡量的是写对一个函数的能力。这套基准衡量的是在真实系统上把故障改回来,并且不把系统改坏。后者要处理带负载的持续流量、进程重启、下一次触发之后依然生效这些事。

  • 双门设计里那道 Safety Gate,把"改好了"和"改得安全"拆成两件事,这个拆法可以搬到任何自动化运维评分里
  • 2 分钟内宣布 vs 10 分钟后宣布的 0.717 对 0.186,指向一个被普遍忽略的训练目标:教会模型收手
  • 作者保留的原文数字矛盾(87、69、3)没有遮掩,这本身是 benchmark 论文里少见的态度
信源:arXiv:2610.00648v1 全文(Table 1/2/3/4/6/8/9/10/11/12/13/14 与附录 G/H/J)。任务权重与成本为 Table 2;失败模式为 Table 13 与附录表格;reward hacking 为附录 L。paper 为 arXiv v1 预印本,未经同行评审。

暂无表态

想参与讨论或点赞?登录后使用完整功能

讨论回复(0)

暂无回复,登录后可参与讨论
合作

智谱 GLM-5 已上线

在智谱开放平台 BigModel.cn 打造 AI 应用。新一代旗舰模型 GLM-5 在推理、代码、智能体综合能力达到开源模型 SOTA。

领取 2000万 Tokens