单笔限额$0.10的Agent跑了100次就花掉$10;per-call cap只是速度限制而非油量表,必须叠加总支出策略;x402客户端确认回调传null等于让Agent随意付钱。
钱包见底了。没有失败:没有回滚、没有超时、没有卡住的交易。每笔支付都经过了授权、每条签名都有效、每个收款方都合法。你的 Agent 只是以每次一毛钱的幅度花了十块钱,全程没有问过一次「是不是该停了」。
第四个最贵的 x402 错误,是没有消费策略就付款。前三个错误都是关于单次支付出问题的:一次意图签了两次、把 verify 当作结算、对已成功的支付重试。这一次说的是一百次支付都成功了,加起来却是一笔没人授权的账单。
两个陷阱使这个问题不可避免:
聚合陷阱。你设了每次调用上限,比如 $0.10,然后上线。这个上限限制的是单次支付金额,而不是支付次数。一个 Agent 在循环任务里调用一百次 $0.10 的接口,就会花掉 $10,而且这每次调用都在限额之内。per-call 上限是限速,不是油表。Cloudflare Agents SDK 对这个机制的说明很直接:它的 x402 客户端接受一个确认回调,在资金流动之前审查支付,而传入 null 而不是回调函数「让 Agent 自动付款。没有判断,没有审查。」从那个 null 引出两种失败模式:per-call 上限不能限制 per-task 支出,重试会导致重复支付。协议层面帮不了忙。x402 不理解你的预算、你的任务、你的意图。每笔支付在局部都是合理的;但加在一起就不是了。
自动化重试风暴。第三篇文章的错误,自动化版本。请求在付款后失败,或者结果一直没有返回,Agent 做了 Agent 该做的事:盲目重试,每次重试都是一次新的签名和新的资金流动授权。没有人会看到这种模糊状态,所以 paid-no-result 事件中的重复支付陷阱会以机器速度一直触发,直到钱包或任务耗尽,以先到者为准。一个开着自动付款且没有预算上限的 Agent,就是一台没人盯着收银台的双花机器。
这两种陷阱的根源是一个协议层面的缺口。x402 让每笔支付都顺畅且不可逆,但对模式不作任何约束。它结算支付,但不管钱。预算、审批和升级在协议中无处存在,这意味着它们要么完全存在于你的代码中,要么根本不存在。
按任务维度预算,而非仅按调用预算。为每个任务或运行设置最大总支出。当 Agent 达到上限时就停止并升级;不要让它去请求更多额度。
审批阈值。超过某个单笔金额就要求人工或策略审批。只在阈值以下才自动审批。确认回调是这道关卡;null 就是撤掉关卡。
保留支付台账。记录每一笔支付:意图、金额、交易哈希、结果。在任何重试之前先查台账。一条已付款的意图绝不再付:重试变成状态查询,而不是第二次付款。
熔断开关。每个钱包在每个时间窗口内的全局支出上限。触发后所有支付暂停,直到人工重置。这是当所有其他控制手段都有 bug 时依然有效的最后防线。
告警。在预算消耗到 50% 和 80% 时通知。沉默的预算是装饰品。
这就是栈的两层交汇的地方。事件处理解决的是你已经遇到的问题;授权策略防止的是下一个问题。callx402 execute 是事件侧的工具体:它用 --max-budget 运行受保护路径作为 per-task 上限,用 --dry-run 走过整个流水线做规划但不执行,用 --approval-threshold 在单笔金额以上时fail-closed而不需要人工审批,以及一个幂等去重——在存储了 UNKNOWN 结算结果后拒绝重试,而不是重新签名。拒绝是显式的,不是沉默的:一条没有实际接线的路由会被报告为未执行,而不是被隐藏。
但一个需要手动调用的工具只能在你想起来保护的那次运行中保护你。持久的答案是 Veyline 的经济Governor:将自然语言消费策略编译成机器可执行的约束,然后对每一个付费步骤进行授权校验。确定性,无 LLM,fail-closed。用 POST /v1/veyline/mandates 创建授权策略(冲突的、被注入的或空的意图会收到 422 并永远不会被存储),订阅和信用路径上的每个付费步骤在任意授权或消耗之前都要经过每条策略的意图防火墙。每个检查返回 ALLOW、DENY 或 ESCALATE_HUMAN 并附带原因。多条策略间取最坏决策,DENY 在信用消耗之前落地,所以已付费的单次使用信用永远不会因为一个被阻止的动作而被消耗。防火墙默认DENY:没有编译消费上限的付费步骤会被拒绝。它强制执行消费上限、提供商和网络白名单、截止时间和重试限制。幂等键是持久化的,所以用不同步骤指纹重用一个键会被当作重放替换拒绝。ESCALATE_HUMAN 只有通过一次性人工审批才能变成 ALLOW,该审批原子消耗且有效期 15 分钟。实时预算可随时查询:已提交、已预留、剩余。
两个诚实的限制:Governor 管理的是轨道上的托管路径。原始 x402 链上支付路径不受策略管理,因为那条路径没有任何组织来持有策略;authorize 端点在订阅和信用路径之外的所有场景中充当顾问级控制面检查。还有,策略的有效性取决于它的文本:在 Agent 行动之前,先把预算、上限和审批阈值写下来。
事件处理解决问题。授权策略防止下一个问题。完整报告和来源见 callx402 故障排除文档:agent auto-pay with no spending cap。实时 Governor 规范发布于 payloadhq.github.io/agents.html 和机器可读的 agents.json。仓库地址是 github.com/Payloadhq/callx402。x402 出问题时,找 callx402。