乐于分享
好东西不私藏

我的 AI 助手偷偷花了 20 块钱:一次 AI Agent 失控事件的完整复盘

我的 AI 助手偷偷花了 20 块钱:一次 AI Agent 失控事件的完整复盘

我的 AI 助手偷偷花了 20 块钱:一次 AI Agent 失控事件的完整复盘

当 AI 开始自主调用付费 API,谁来为账单买单?


事件起因

前几天准备续费阿里云的 Coding Plan,登录控制台的时候,发现账户里多了一笔约 20 元的账单。

点进去一看,计费项是「大模型图片生成量」,模型是 qwen-image-2.0,时间是 6 月 24 日中午 12 点

我愣住了。

我的 Coding API Key 理论上是不可以调用生图模型的。我也完全没有印象在 6 月 24 号让谁生成过图片。


排查过程

我唯一配置过这个 API Key 的地方,是阿里云百炼的 CLI 工具(bailian.console.aliyun.com/cli[1])。

那是 6 月 4 号安装的,当时测试了一下 bl file upload 功能(免费),发现生成的 URL 是 oss:// 格式,不能直接用浏览器打开,就放着没管了。

之后再也没有用过。

我也没有让 OpenClaw 去调用过百炼的 bl image generate 命令。

所以这次的事情显得非常奇怪。


求助阿里云

我给阿里云提了工单,售后工程师通过 IP 地址帮我确认了调用来源:

「您好,这边查到调用的 IP 地址是 XXX,用户的提示词都是一些风景图的生成。」

我确认了,那确实是我的 OpenClaw 服务器。

工程师建议我删除 API Key,并设置 IP 白名单以防盗用。

但我心里清楚:不是被盗用,是我自己的 AI 干的。


深入调查

回到服务器,我翻遍了所有日志,终于找到了完整的证据链。

6 月 24 日 11:55 — 心跳触发

我的 OpenClaw 系统里有一个 doc-agent(文档处理代理),平时用来处理文档任务。它有一个定时心跳检查机制。

在某个历史 session 中,残留了一个「生成 100 张图片」的任务指令。当心跳运行时,这个任务被恢复了。

11:56 — 第一次尝试失败

AI 首先尝试使用内置的图片生成工具,但全部失败:

模型 错误
Google Gemini 配额超限(HTTP 429)
MiniMax API Key 无效
OpenAI GPT Image API Key 无效
OpenRouter 用户未找到

AI 甚至给我发了一条消息:「批量生成 100 张图片的任务遇到了阻塞,所有图像生成模型的 API 凭证均无效。」

但我没有看到这条消息。

11:59 — 自主切换方案

在内置工具全部失败后,AI 自主决定切换到阿里云百炼 CLI(bl image generate)。

这个 CLI 是 6 月 4 号安装的,API Key 还有效。

12:01-12:14 — 批量调用

AI 启动了 10 个并行子代理,每个负责生成 10 张图片(共 100 张),主题包括:

  • 🌿 自然风光
  • 🏛️ 建筑
  • 🎨 抽象艺术
  • 👤 人像
  • 🏞️ 风景
  • 🚀 科幻
  • 🐉 奇幻
  • 🍕 美食
  • 🐾 动物
  • 💻 科技

13 分钟内,103 次 API 调用,97 次成功,6 次因限流失败。


账单确认

阿里云百炼控制台的账单显示:

  • 产品:大模型服务平台百炼
  • 服务:百炼大模型推理
  • 计费项:大模型图片生成量
  • 模型:qwen-image-2.0
  • 时间:2026-06-24 12:01 ~ 12:14
  • 总费用:约 18 元


根因分析

1. AI 可以自主调用付费 API

AI Agent 拥有执行 shell 命令的权限,可以直接调用 bl image generate 等付费工具,无需人类确认

2. 没有费用控制机制

  • 没有单次调用费用上限
  • 没有每日/每月预算限制
  • 没有批量调用的审批流程

3. Fallback 机制绕过安全边界

当主方案失败时,AI 自动切换到备用方案,这个过程中没有触发任何安全审查

4. 历史任务残留

某个已结束的 session 中残留了「生成 100 张图片」的指令,心跳检查时恢复了该任务。


给 AI Agent 用户的警示

⚠️ 风险 1:AI 会自主花钱

如果你的 AI Agent 有权限调用付费 API(图片生成、语音合成、视频生成、大模型推理等),它可能会在无人监督的情况下产生费用。

⚠️ 风险 2:Fallback 可能绕过限制

即使你配置了主方案的费用限制,AI 可能会在失败时自动切换到没有费用的备用方案。

⚠️ 风险 3:历史任务可能复活

Session 状态中残留的指令可能在未来的心跳检查或任务恢复中被重新执行。

⚠️ 风险 4:并行调用放大损失

AI 可以启动多个并行子代理同时执行任务,10 个子代理 × 10 张图片 = 100 次调用,费用瞬间放大。


防护建议

1. 费用审批机制

任何涉及付费 API 的调用,必须经过人类确认才能执行。

# 示例规则
- 单次调用费用 > 1 元 → 需要确认
- 批量调用 > 10 次 → 需要确认
- 每日总费用 > 10 元 → 需要确认

2. 预算限制

为每个 AI Agent 设置每日/每月预算上限,超出后自动停止调用。

3. 权限最小化

只给 AI Agent 必要的工具权限。如果不需要图片生成,就不要配置相关 API Key。

4. 定期审计

定期检查:

  • API 调用日志
  • 费用账单
  • Agent 的 session 状态
  • 历史任务残留

5. 禁用不用的 Agent

如果某个 Agent 已经不再使用,直接禁用或删除,避免意外触发。

6. API Key 安全

  • 设置 IP 白名单
  • 定期轮换 Key
  • 不用时及时删除

我的修复措施

事件发生后,我立即采取了以下措施:

  1. ✅ 删除了阿里云百炼 CLI 的 API Key
  2. ✅ 卸载了百炼 CLI 工具
  3. ✅ 移除了相关的 Skill 安装
  4. ✅ 禁用了 doc-agent(已很久未使用)
  5. ✅ 在 AGENTS.md 中添加了规则:禁止未经确认的批量 API 调用

写在最后

这次事件虽然只损失了 20 块钱,但暴露了一个严重的问题:AI Agent 的自主决策能力与费用控制机制之间存在巨大鸿沟

随着 AI Agent 越来越强大,它们会被赋予更多工具权限,调用更多付费 API。如果没有完善的费用控制机制,类似的「意外账单」可能会频繁发生。

这不是 AI 的错,是我们在赋予 AI 能力时,没有同步建立相应的约束机制。

希望这次事件能给大家提个醒:在享受 AI 带来便利的同时,别忘了给它们装上「刹车」。


作者:一枫

2026 年 7 月 6 日

引用链接

[1]bailian.console.aliyun.com/cli: https://bailian.console.aliyun.com/cli