BotOf TechAI / IoT / Full-Stack / 植物养护知识分享
返回首页Agent 遇到 HTTP 402 之后:支付能力必须由预算运行时接管

Agent 遇到 HTTP 402 之后:支付能力必须由预算运行时接管

2026 年 10 月 13 日,AWS 发布 Anchor Browser 与 Amazon Bedrock AgentCore payments 的 Agent 支付方案。当浏览器 Agent 访问按次收费的数据或 API,服务器返回 HTTP 402 以及金额、支付方式和地址;支付层在基础设施侧检查预算、签名和结算,再携带付款证明重放原请求。钱包私钥不会进入 Agent Runtime。

这条链路揭示了 Agent 工程的一条基本边界:模型可以提出“值得购买这个数据”,但不能直接持有钱、构造任意付款或决定重放。支付是强副作用,必须由确定性状态机接管。

流程图:HTTP 402 挑战经过预算门禁、独立签名和幂等结算后,原请求才会安全重放。

把支付工具暴露给模型,不等于让模型拥有钱包;它只应提交受约束的购买意图。

402 是协议分支,不是普通错误

Agent 发起请求后,运行时先区分普通 4xx 与支付挑战。挑战对象需要规范化并验证域名、金额、币种、方案、资源摘要和有效期。任何重定向后的收款方变化,都必须重新判定。

@dataclass(frozen=True)
class PaymentIntent:
    run_id: str
    request_hash: str
    merchant: str
    amount_minor: int
    currency: str
    resource_hash: str

def decide(intent: PaymentIntent, policy: BudgetPolicy) -> str:
    if intent.merchant not in policy.allowed_merchants:
        return "deny"
    if intent.amount_minor > policy.per_tx_limit:
        return "require_approval"
    if policy.spent + policy.reserved + intent.amount_minor > policy.run_limit:
        return "deny"
    return "reserve"

金额使用最小货币单位整数,避免浮点误差;request_hash 绑定方法、最终 URL、请求体和会话,防止同一付款证明被用于另一个资源。

预算需要先预留再结算

并发子代理可能同时购买资源。若每个请求只读取“当前已花费”,它们都可能认为预算充足。运行时应采用 available → reserved → settled/released 的账本:授权时原子预留,支付成功后结算,超时或拒绝则释放。

UPDATE budgets
SET reserved = reserved + :amount, version = version + 1
WHERE run_id = :run_id
  AND version = :expected_version
  AND spent + reserved + :amount <= hard_limit;

更新影响零行说明发生竞争或余额不足,调用方重新读取,而不是自行重试付款。预算还应分为单笔、单次运行、每日租户和商户四层;高风险商户即使金额很小,也可以强制人工批准。

私钥和付款证明不能进入上下文

官方方案由 Payment Manager、AgentCore Identity 和外部钱包基础设施完成签名。模型只得到支付结果和资源是否可继续,不得到私钥、助记词或可复用 token。签名服务校验 workload identity、策略决定与一次性 nonce,再生成证明。

日志也要避免记录完整付款头。审计保存 intent ID、商户、金额、策略版本、批准主体、结算 ID 与请求哈希,敏感证明单独加密保留。这样既能对账,又不会让可观测系统成为资金凭证仓库。

重放必须与浏览器状态一致

402 可能发生在带 cookie、CSRF token 或一次性表单状态的请求中。支付后重试不能由模型重新“点一次”,而应由浏览器基础设施在同一受控会话中重放已绑定请求。使用幂等键避免网络超时导致重复扣款,并在未知状态时先查结算状态。

一个可审计状态机可以是:

REQUESTED -> CHALLENGED -> RESERVED -> SIGNED -> SETTLED -> REPLAYED
                                |          |
                              DENIED     UNKNOWN -> RECONCILE

UNKNOWN 不能自动再付一次。对账任务查询支付提供方,确认已结算则继续重放,未结算才释放预留。

生产验收要主动制造资金边界故障

测试同一 402 并发到达、付款成功但响应丢失、商户重定向、金额在签名前变化、预算被另一个子代理耗尽、用户中途撤销授权。验证系统不会重复支付、不会把付款证明泄漏给模型,并能把每笔费用归因到 run、用户和业务产物。

Agent 支付真正增加的不是一个工具,而是一类新的运行时责任:价值判断可以由模型辅助,资金控制必须由策略、账本和密码学执行。

参考资料