AI Agent 账单失控怎么防 2026:步数上限、重试熔断、预算硬顶,和支付层到底会不会拒付

AI Agent 账单失控怎么防 2026:步数上限、重试熔断、预算硬顶,和支付层到底会不会拒付

一觉醒来多出一笔四位数的 AI 账单,通常不是模型突然变聪明或者变疯了,是这套系统把「可以继续尝试」写成了默认路径,却没有同时写死最大步数、重试上限、超时和预算阈值。

消费提醒不是停止条件。提醒到达之前,机器一直在花钱。真正管用的做法是把停止条件放在三个互不依赖的层级:Agent 自己、调用 API 的那一层、以及支付授权。任何一层失守,下一层还能把损失截住。

Agent 的本质就是一个循环,终止条件是人写的

LangChain 现行文档对 Agent 的定义只有一句话:一个模型在循环中调用工具,直到给定任务完成。:white_check_mark:

「直到任务完成」听起来像有个终点,实际上这个判断权在模型手里。LangGraph 的文档把工程约束写得更直白:创建带循环的图时,必须有一个终止机制,最常见的做法是加一条条件边,在满足终止条件时路由到 END 节点。:white_check_mark:

它还提供了一道兜底:recursion limit 限定图在报错之前允许执行的 super-step 数量;调用时传 recursion_limit 即可,超过就抛 GraphRecursionError,由你捕获处理。:white_check_mark:

这里有个细节值得当心。官方的 GRAPH_RECURSION_LIMIT 排错页第一句就是「你的图在碰到停止条件之前达到了最大步数」,并且把最常见的原因指向死循环,给的第一条建议是检查逻辑里有没有环。第二条建议才是:复杂的图可能自然达到默认上限,这时可以在 config 里传一个更大的 recursion_limit。:white_check_mark:

两条建议的顺序不能颠倒。把「调高上限」当成默认处置,等于把刚刚响过的那个熔断器拆掉。

挂夜间任务之前,先问四个数字有没有写死:最多执行多少步、同一错误最多重试几次、最长运行多久、最多花多少钱。只写「直到完成」,就是把停止权完全交给模型。

第二类失控:HTTP 200,业务却没成

传输成功不等于业务成功。外部 API 可能返回 200,但需要的字段是空的、格式变了,或者工具确实执行了却没达成目标。Agent 如果只看状态码不校验响应内容,就会把同一个动作反复重试。

工程上更稳的规则是:同一工具、同一参数、同一类错误连续出现若干次就进熔断,而不是让模型自己决定要不要「再试一次」。网络超时可以指数退避,业务错误不行。

关键在于失败次数存在哪里。它应该是结构化状态里的一个字段,不是对话文本里的一句话——原因见下一节。

上下文压缩会放大「忘了自己失败过」,但它不是必然元凶

长任务的上下文会不断增长。LangGraph 文档列出的三种处理办法是裁剪(移除前 N 条或后 N 条消息)、删除(从状态里永久删除)和摘要(把更早的消息压成一段摘要来替代)。:white_check_mark:

这解释了一个常见的放大器:如果「前三次已经失败、不要再调用这个工具」这条信息只活在即将被裁剪的对话里,而没有写进结构化状态或外部检查点,后面的步骤就可能重新走回旧路。

但不能反过来写成「主流框架都会自动压缩,所以必然死循环」。是否压缩、何时压缩、保留什么,取决于具体框架和你的配置。可操作的结论只有一条:重试计数、已失败动作、预算余额和终止原因,要存成机器可检查的字段,不能只靠模型记得。

OWASP 里,账单爆掉对应的其实是两个不同条目

这一点很多中文资料混着写。LLM06:2025 Excessive Agency 属于 OWASP Top 10 for LLM Applications 2025,它的三个成因是过度功能、过度权限和过度自主性。
触发来源里明确包含直接与间接提示注入,也包含多 Agent 系统里被攻陷的同伴 Agent。缓解措施包括最小工具集、最小权限,以及对高影响动作要求人工审批。:white_check_mark:

如果讨论的是「调用次数没有边界导致经济损失」,更直接的对照是 LLM10:2025 Unbounded Consumption。它把 Denial of Wallet 单列为一类脆弱性:攻击者发起大量操作,利用云上 AI 服务按次计费的模式,制造无法承受的财务负担。:white_check_mark:

同一页给的 12 条缓解措施里,与账单直接相关的有五条。
速率限制与用户配额、动态监控与资源分配管理、对资源密集操作设置超时与节流、把 LLM 对网络资源与内部服务的访问放进沙箱,以及限制排队动作数与总动作数。:white_check_mark:

两个条目的区别值得记住:权限过大解决的是「它能做什么」,消费无上限解决的是「它能做多少次」。只关掉一边,另一边照样能把账单跑出来。

2026 年发布的 OWASP Top 10 for Agentic Applications 换了一套编号 ASI01 到 ASI10,不是把 LLM 那套改了名。公告里给的每一条都挂着真实事件:

  • ASI01 Agent Goal Hijack:隐藏提示把 copilot 变成静默外泄通道,例 EchoLeak
  • ASI02 Tool Misuse:例 Amazon Q
  • ASI04 Agentic Supply Chain:例 GitHub MCP 漏洞
  • ASI05 Unexpected Code Execution:例 AutoGPT RCE
  • ASI06 Memory & Context Poisoning:例 Gemini 记忆攻击
  • ASI08 Cascading Failures
  • ASI10 Rogue Agents:例 Replit 那次
    :white_check_mark:

人工确认这道门,本身也是一个攻击面

这份 2026 榜单里有一条专门打脸「加个人工审批就安全了」:ASI09 Human-Agent Trust Exploitation——自信、漂亮的解释会误导人类操作者去批准有害动作。:white_check_mark:

所以人工网关要收窄到「人能真正判断的事」:付款金额、要删的对象、要发给谁。让人去审核一段模型写的理由,等于让攻击面绕过所有前面的护栏。

同样地,如果 Agent 会读网页、邮件、GitHub issue 或外部文档,它读到的内容里可能夹着写给模型看的指令。
OWASP 给 LLM06 举的场景就是这个:一个只需要读邮件做摘要的助手,用的插件同时带有发送功能,一封精心构造的来信就能让它把收件箱里的敏感信息转发给攻击者。:white_check_mark:

一个只需要读仓库的 Agent,不该同时拥有任意 shell、删库、发邮件和无限网络访问。「任务最多跑 100 步」拦不住这一类。

支付层想当最后一道防线,只有一个判据:会不会拒付

软件预算仍然可能因为程序 bug、供应商配置错误或凭证泄露而失效。支付层的价值在于,让下一笔授权在你的代码之外被拒绝。

判断一个支付工具够不够格当熔断器,只问三个问题:能不能给这张卡单独设消费上限;超过上限是发提醒还是直接拒付;这个限制对订阅和商户的后续扣款是否同样有效。三个答案都明确,才算硬拒付。

Privacy.com 的开发文档可以用来说明这件事在技术上长什么样。它的卡有三种类型 MERCHANT_LOCKED、SINGLE_USE、DIGITAL_WALLET,状态包括 OPEN、PAUSED、CLOSED,spend_limit 的窗口有四种:TRANSACTION、MONTHLY、ANNUALLY、FOREVER。
文档对 spend_limit 的描述里有一句关键的话——超过上限的交易请求会被拒绝。:white_check_mark:

「会被拒绝」这四个字就是标准答案的样子。发提醒不算。

但它不是加拿大读者的答案。Privacy 官方页面写明:目前只面向年满 18 岁、在美国银行或信用合作社持有支票账户的美国公民或美国合法居民开放,不支持国际银行账户或非美国用户。:white_check_mark:

所以这一段的结论对我们是反的:加拿大用户要做的不是去找一个美国支付产品,而是拿上面那三个问题去问自己现有的发卡行或支付服务——有没有每卡独立的硬限额、超限是拒付还是通知、能不能随时冻结而不影响其他扣款。答案是「只能提醒」的,就把它当报警器,别写成保险丝。

「虚拟卡」这三个字不代表资金隔离

虚拟描述的是卡号形态,不是资金关系。Privacy 自己的页面写明,它的卡需要绑定一个美国支票账户来供资,钱仍然从那个账户出。:white_check_mark:

同一页还有两个常被忽略的成本项:个人版对境内交易免费,境外交易收 3% 手续费(最低 0.50 美元),Pro 与 Premium 版没有境外手续费。对付美元计价的 AI 订阅来说,这不是小数。:white_check_mark:

单次使用卡解决的主要是卡号复用风险。长期跑着的 AI API 订阅需要的是持续有效的额度控制,两件事不要混。

三层各自的落点

Agent 这一层写死四个数字:最大步数、同类错误最大重试次数、最长运行时间、最大可接受费用;把重试计数、已失败动作和剩余预算存成结构化字段。涉及外部网页或邮件的,把读到的内容当不可信输入,只给完成任务所需的最小工具和权限。

平台这一层是各家控制台上的月度硬上限与配额。这一层各家的开关名字、触发行为和团队权限差别很大,站内另有一篇按平台逐条核过(链接在文末),本文不重复。

支付这一层加一道独立硬限制,并且先确认它是拒付而不是提醒。

真正安全的 Agent 不是永远不出错,是每一次错误最多只能消耗掉你预先允许的那一点权限、时间和钱。

顺着去读

各家平台控制台上的硬上限具体怎么设、触发之后是停到下个周期还是要手动解除、团队里谁能改这个数,站内这篇按 OpenAI、Anthropic、Google Cloud、xAI、Cursor 逐家核过:预算提醒不会停机:让 Agent 通宵跑之前,先砌好这四道墙

如果钱已经被扣掉,问题就从工程转成消费者权利。BC 省 2026 年 8 月生效的订阅新规管得到哪一半、管不到哪一半,见这篇:BC省2026订阅新规已生效:AI自动扣费怎么取消退款,账单硬上限怎么设

这篇哪里可能过时或不适用

最可能出问题的一处:LangChain 与 LangGraph 的文档改得很快,本文引的是核稿当天的页面。recursion_limit 的默认值、参数名和 API 形态都可能变,落地前请以你实际用的版本为准。

第二处:本文没有给任何具体的加拿大支付产品答案。原稿引过 Revolut 的两个帮助页来说明「美国版功能不代表加拿大能开户」,这两页本机取回 403,读不到内容,整段已删除。
同样删掉的还有一条 Privacy 支持中心的供资说明页,也是 403。供资那句改引 Privacy 官网主页面上可读的表述。

第三处:OWASP 的两套榜单会继续更新。LLM06 与 LLM10 属于 2025 年的 LLM Applications Top 10,ASI01 到 ASI10 属于 2025 年 12 月发布的 Agentic Applications Top 10,编号体系不同,引用时不要混编。

第四处:本文列的那些真实事件(EchoLeak、Amazon Q、GitHub MCP 漏洞、AutoGPT RCE、Gemini 记忆攻击、Replit 那次)是 OWASP 在榜单公告里给出的例子,本文没有逐个回到各事件的一手报告去核,引用的是 OWASP 对它们的归类。

第五处:原稿引过三条社区帖子来支撑「有人一夜烧掉四位数」。这些链接本机全部返回 403,读不到正文,也无从确认发帖时间与金额,已整段删除。本文因此不含任何具体的事故金额——那些数字在中文互联网上流传很广,但我们核不到,就不写。

标记::white_check_mark:源=LangChain 与 LangGraph 官方文档、OWASP GenAI 项目的 LLM06:2025 与 LLM10:2025 条目页、OWASP 2026 Agentic Applications Top 10 发布公告。
还有 Privacy.com 的开发者文档与官网产品页。支付产品页是商家自述,只用来说明「硬拒付」在技术上如何实现,不构成对任何产品的推荐。