一次37美元账单的教训:如何为AI Agent设置消费限额

共享API限额拦不住多端点重试循环,Agent需在启动前按用途设定硬预算。
一位开发者的研究型 Agent 因错误循环在一天内花掉37美元,暴露出共享 API 限额无法覆盖多端点的问题。作者据此总结了一套无需新基础设施的做法:把预算拆成探索、项目、升级审批三类,并在 Agent 启动前设定;采用默认拒绝的允许列表替代事后封禁的阻止列表,同时附带调用次数和金额上限;对单笔超过阈值的交易强制人工审批,并在调用频率、失败率或支出速度异常时自动冻结账户;给 Agent 一个可见的归属方,便于获得试用额度和沟通。文章最后给出本周即可完成的三件事:盘点付费服务、在代码中强制预算、一 Agent 一密钥。
一次37美元账单的教训:如何为AI Agent设置消费限额
一位开发者给研究型 Agent 买了 API 密钥,只跑一个竞品监控任务,每天最多50次调用,单次成本不到一美分。第三天晚上,账单显示当天花了37美元。
原因是一个子任务进入了错误循环:调用失败、Agent 调整参数、重试、再失败。50次调用的上限没拦住它,因为每个端点都有自己的配额,而那个上限没有覆盖所有端点。
37美元算不上灾难。但它暴露了一个更根本的问题:这位开发者从未设计过 Agent 该怎么花钱。他给每个 Agent 的是一张能用的卡,而不是一个有预算的账户。
以下是事后总结的一套做法,全部不需要新基础设施。
按用途拆分预算,而非只设一个月度总额
给每个 Agent 设一个月度总额太粗放了。更有效的做法是分成三个桶:
- 探索预算:每周5到20美元,用于尝试新 API。用完就停,等到下周再继续。
- 项目预算:为单个任务固定加载一笔金额,比如10美元用来抓取一批竞品的价格。任务结束时,没花完的钱退回。
- 升级审批:超过阈值的任何支出都需要人工批准。Agent 要主动申请,而不是直接花。
关键在于,限额要在 Agent 启动前设定。事后削减支出,教会不了 Agent 任何东西。
预加载预算(prepaid budget) 是从礼品卡和预付费电话继承来的思路:先把钱存进一个隔离账户,花完即止,而不是依赖事后结算的信用额度。对 Agent 而言,区别在于违约成本。信用模式下,失控的循环会持续产生真实扣款,直到人工发现;预加载模式下,账户余额归零就物理上无法再发起调用,把止损从「监控报警」变成「机制本身」。
预加载还带来两个附带好处:一是任务结束时可以把未用完的余额退回主账户,天然对应「项目预算」的语义;二是每个 Agent 的余额是一个可读的数字,你能直接看到「它还剩多少」,而不必去解析一张混在一起的月账单。
用允许列表,而不是阻止列表
过去的做法是默认允许一切,等服务出问题了再逐个封禁。每个新服务都是新风险,你永远慢一步。
现在的逻辑反过来:默认什么都不允许。
- 从已经信任的服务开始,例如 OpenAI、Anthropic 和现有数据源。
- 新服务逐一审核后再加入。
- Agent 如果需要新服务,必须提出申请。
允许列表还应该带上数字。作者会限制每次调用和每天的支出,例如"每天最多5美元、200次调用"。这样一条规则,就能在重试循环的第三轮把它掐断。
允许列表(allowlist)与阻止列表(blocklist) 是访问控制中的一对基本模型。阻止列表是「默认允许、逐个禁止」,安全性取决于你能否穷举所有坏情况;允许列表是「默认拒绝、逐个放行」,安全性取决于你审核了什么。前者在开放环境里必然滞后,因为攻击面和新服务都在不断增加。
这一模型最早在防火墙和邮件网关中普及,后来成为云 IAM 策略、包管理器依赖白名单、容器镜像签名的通用做法。对 Agent 尤其关键:Agent 会自主发现和调用新服务,如果默认允许,一次幻觉产生的不存在的端点也可能触发真实计费。把默认值设为拒绝,等于把「要不要花这笔钱」的决策权从模型手里收回到人手里。
单笔交易设上限,并监控异常
健康的总额并不能说明单笔交易没问题。每个 Agent 账户都该有一条硬规则:任何单笔超过2美元的扣款,都要转给人工处理。
在此基础上,调用频率、失败率或支出速度异常时,账户应被冻结。最便宜的版本只需要一个条件:预算大于零,且没有触发异常标记,Agent 才能花钱。
异常检测中的速率与失败率信号 值得单独说明。重试循环的典型特征是:调用频率在短时间内陡增、失败率同步升高、单次金额很小但笔数极多。因此只看总额往往来不及,需要同时监控三个维度——单位时间调用次数、失败调用占比、单位时间支出速度。
工程上常见的做法是给每个维度设一个滑动窗口阈值,任一触发即冻结账户并通知负责人。冻结优于直接封禁:账户保留,充值或人工复核后即可恢复,避免误伤正常的长任务。条件可以极简,例如「预算余额大于零且无异常标记」,这样判断逻辑本身不容易出错,也不会因为监控系统故障而放行。
给 Agent 一个可见的归属方
当 Agent 调用第三方服务时,它应该表明自己为谁工作,例如显示 yourname.cloudflare.pay 这样的标识,而不是一个匿名账户。
有明确归属方的 Agent 更容易拿到试用额度;出问题时,商户也更可能发邮件联系你,而不是直接封禁。这和人们信任 yourname.com 而不信任一个裸 IP 加端口是同一个道理。
这周就能做的三件事
- 列出所有 Agent 调用的付费服务,以及每项每月花多少钱。总数通常比你想象的高。
- 给每个主要 Agent 一个预算数字,并且在代码里强制执行,而不是写在备忘录里。
- 一个 Agent 一个 API 密钥。账单分开、限额分开,关掉一个不影响其他。
这些事加起来不到一小时。
硬性限额反而带来自由
有了10美元的上限,作者可以放心让 Agent 尝试50个服务而不用盯着。反过来,账户里有1000美元却没有上限,他就得凌晨两点查账单。
这也是他认可 Cloudflare 双层钱包设计的原因:它把"我信不信这个 Agent"变成了"上限是多少"。
正常状态下,一个限额合理的 Agent 系统偶尔会出现"预算耗尽,已暂停"的提示。你充值或调整一下,继续工作。而不是每天醒来第一件事是打开账单。
原文最后提醒:价格和政策会变化,购买前请查阅官方文档。
相关推荐

Kimi K3.1实测:开源模型逼近Opus,视频生成意外抢镜
Kimi K3.1在直播实测中完成运动图形、3D渲染、小游戏与视频生成等复合任务。本文分析其2.8万亿参数MoE架构的真实表现、与Opus/GPT的体感差距,以及被官方忽略的视频生成能力,并讨论多模型并用时代的工作流变化。

Sam Altman:人生重大建议,为何仍需来自人类?
OpenAI CEO Sam Altman 谈 AI 建议的边界:AI 能劝阻冲动邮件,但人生重大建议仍应来自人类。他期待 AI 成为会反驳的资深同事,而非谄媚工具。

“黑色十月”:AI挖出史上3%严重漏洞?
Reddit 热帖称过去一个月发现了史上 3% 的严重软件漏洞,被称为「黑色十月」。本文拆解这一说法的统计口径问题,分析 AI 辅助代码审计如何加速漏洞发现,以及开发者和企业该如何应对补丁窗口缩短的挑战。