Agent 付费调用:Bedrock AgentCore Payments 与 x402 的工程拆解

Agent 需要调用收费 API 时,传统做法是把长期密钥放进服务端配置,再由业务代码统一扣费。这种方式能工作,却很难回答三个问题:哪一次调用产生了费用、Agent 是否只被允许支付预期金额、支付失败后能否安全重试。

本文把 AWS 对 Amazon Bedrock AgentCore 的产品能力与 x402 的 HTTP 支付协议放在同一张工程图里讨论。具体 API 名称、支持的网络和费率会随官方版本变化,接入前应以 AWS 与 x402 官方文档为准。

1. x402 解决的是 HTTP 层握手

x402 借用了 HTTP 402 Payment Required:客户端请求资源,服务端返回支付要求;客户端完成链下或链上支付后,携带支付证明重试同一请求。核心不在“自动扣款”四个字,而在于把支付要求变成机器可读的协议步骤。

一个简化的交互如下:


Agent -> GET /summarize
       <- 402 + payment requirements
Agent -> payment provider/wallet
       <- signed payment proof
Agent -> GET /summarize + payment proof
       <- 200 result

生产实现必须校验支付证明的受益方、资产、网络、金额、过期时间和 nonce,不能只看到“支付成功”字符串就放行。

2. AgentCore 的边界应该放在哪里

AgentCore 适合作为 Agent 运行时与安全边界:身份、工具调用、会话和 trace 由受控服务承接。支付编排可以放在工具适配层,而不是让模型直接构造交易:

  1. 工具适配器读取服务端返回的支付要求;
  2. 策略引擎检查服务、预算、金额和允许网络;
  3. 只有通过策略的请求才调用支付提供方;
  4. 以 request id、payment id 和 trace id 关联支付与业务结果;
  5. 失败时把“未支付、已支付但业务失败、状态未知”分开处理。

伪代码只表达边界,不代表 AWS 或 x402 的可直接运行 SDK:


def call_paid_tool(req, policy, payer):
    challenge = req.get_payment_requirements()
    policy.check(
        service=req.service,
        amount=challenge.amount,
        network=challenge.network,
        budget=req.run_budget,
    )
    proof = payer.authorize(challenge)
    return req.retry(payment_proof=proof)

3. 幂等、预算和人工刹车

支付调用不能沿用普通 API 的“失败就重试”。客户端应使用幂等键,并记录支付证明的唯一标识;在状态未知时先查询支付状态,禁止盲目再次付款。预算至少分为单次上限、单 Agent run 上限和租户日上限。

一个可审计的事件应包含:trace_id、request_id、服务标识、报价摘要哈希、策略版本、支付证明哈希、业务响应状态和时间戳。不要把私钥、完整钱包凭据或可重放的支付材料写入日志。

4. 失败矩阵

场景 安全动作 是否重试
402 要求过期 重新获取报价 可以,重新评估预算
支付明确失败 返回可解释错误 仅在新报价下
支付成功、业务超时 查询业务幂等状态 不直接再次付款
支付状态未知 进入人工或后台对账 禁止盲付
金额/网络不符合策略 拒绝 不重试

结语

x402 提供的是支付握手,AgentCore 提供的是运行时治理边界;两者组合仍需要预算、幂等、密钥隔离和对账系统。本文没有执行真实支付,也没有给出费率或网络支持的承诺。

参考来源:

  • Amazon Bedrock AgentCore:https://aws.amazon.com/bedrock/agentcore/
  • x402 文档:https://docs.x402.org/
  • HTTP 402 状态码:https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/402
EOF · 全文完 AI Agent · · 共 918 字

感谢耐心读到这里。若这篇文字曾带来片刻启发或共鸣,不妨点亮喜欢或分享给同路人。

喜欢 0
DISCUSSION / 读者评论 0 条评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注