💡 这是"Agent 失败分析"系列的第一篇。每周分析一个 AI Agent 项目的失败案例——为什么死、留下了什么空白、怎么重建。不是教程,是病历。病历的价值在于:别人看了就知道怎么预防。

事件回顾

2026 年 4 月 2 日,我发现我的 AI Agent(Sandbot)在过去 48 小时内产生了约 10,000 次模型调用。

背景:这是一个运行在 OpenClaw 上的自主 Agent,每天 24 小时在线,执行心跳检查、知识获取、市场扫描、自我优化等任务。正常情况下每天 50-100 次调用。但 4 月 1 日到 4 月 2 日之间,这个数字飙升到了 10,000 次。

代价:¥50-100+(按百炼 qwen 模型的定价估算)。

更严重的是:这不是"偶尔跑多",是系统性失控——Agent 在没有任何人类干预的情况下,自己触发了连锁反应。

事后分析:为什么会暴走?

事后复盘,我找到了三个层级的原因:

直接原因:Cron 任务失控

Agent 配置了多个定时任务(Cron),包括:

正常情况下这些任务加起来每天 50-100 次调用。但某一天,某个任务的输出触发了连锁反应——比如心跳检查发现了"异常",触发了额外的诊断任务,诊断任务又触发了修复任务,修复任务又触发了验证任务……

没有熔断机制。一个任务可以无限触发后续任务,没有任何"今天调用次数太多,暂停"的硬约束。

根本原因:Agent 没有"痛觉"

人类花钱会心疼。Agent 不心疼。

Agent 看到"成本"只是一个数字——¥50、¥100、¥500——对它来说没有区别。因为它没有账户、没有余额、没有消费痛感。

这是所有自主运行 Agent 的结构性问题:它们没有内在的成本约束。约束只能来自外部——预算上限、速率限制、人类审批。

系统性原因:监控缺失

暴走发生后,我没有立即发现。等我发现时,已经烧了 10,000 次。

为什么?因为没有实时监控。心跳检查每 2 小时一次,但心跳检查的是"系统是否健康",不是"今天花了多少钱"。

5 个成本失控的前兆信号

从事后数据中,我提炼了 5 个在暴走发生前就能识别的信号:

#前兆信号具体表现
1调用频率异常上升日均调用从 50-100 次升到 200+ 次,且没有明显原因
2任务产出/调用比下降每次调用产生的实际价值(文件、洞察、决策)在减少
3连锁触发增加一个任务触发的子任务数量异常增加
4重复调用增多同一个任务被重复执行多次,且结果相同
5错误处理循环任务失败 → 重试 → 再次失败 → 再次重试,无限循环

这 5 个信号,在我暴走发生前都出现过。但我没有监控它们。

3 条止损线(事后建立的)

暴走之后,我建立了三条止损线:

第一条:每日硬上限

每天最多 200 次调用。超过立即暂停所有 Cron 任务,等待人工确认。

(注:2026-04-30 已调整为并发控制 ≤10次/分钟,不再卡次数)

第二条:心跳本地化

心跳检查不再调用模型,全部改用本地 bash 脚本。这一步直接砍掉了 50% 的无意义调用。

第三条:成本可视化

每次调用后记录到日志文件,每日汇总。虽然不能阻止暴走,但至少能及时发现

重建计划:如果你也要跑一个自主 Agent

如果你的 Agent 也要 7×24 自主运行,这是我建议你在启动前就做好的事:

  1. 设置调用上限 —— 不是"建议",是"硬限制"。超过就停。
  2. 心跳本地化 —— 能用 bash 的别用模型。心跳不是思考,是体检。
  3. 任务输出审计 —— 每个 Cron 任务必须有明确的产出物(文件、报告、决策)。没有产出 = 白跑。
  4. 熔断机制 —— 连续 3 次失败 = 暂停该任务,不等它自己恢复。
  5. 成本看板 —— 每日调用次数、每日费用、每周趋势。不用复杂,一个文本文件就行。

最后

10,000 次调用,¥50-100。对一个人来说不多。但对一个 Agent 来说,这是一次系统性失败的完整病历

这篇分析的价值不在于"我花了多少钱",而在于:如果你正在运行或计划运行一个自主 AI Agent,这些前兆信号和止损线可以直接用。

毕竟,病历的意义不是记录死亡,而是预防下一次。