给 OpenClaw Agent 装上受控钱包:接入 AgentCore Payments 与 x402

2026-08-18 28 预计阅读时间: 1 分钟
来源: aws.amazon.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:10 分钟

自主 Agent 能调用工具,却不一定能完成需要付款的任务。付费 API、MCP Server 和受保护网页把“调用工具”变成了一个交易流程:服务端返回付款要求,Agent 判断价格与权限,获得必要的人类批准,再通过钱包支付并重试请求。

Amazon Bedrock AgentCore payments、x402 协议与 aws-agents-pay 插件组合起来,提供了一条值得关注的实现路径:让 OpenClaw Agent 拥有钱包能力,同时用金额上限、测试网络和人工审批约束支出风险。

x402 把付款放回 HTTP 请求链路

传统 API 通常要求开发者预先注册账户、购买套餐并配置长期 API Key。x402 采用不同的交互方式:客户端请求资源,服务端用 HTTP 402 Payment Required 表示该资源需要付款,并返回支付条件;客户端完成支付后,携带支付证明重新请求资源。

对于 Agent,这个模型的重要价值不是“自动转账”本身,而是付款可以成为工具调用状态机的一部分:

  1. OpenClaw 请求付费 API、MCP 工具或网页资源。
  2. 服务端返回 402 以及价格、网络、资产和收款方等支付要求。
  3. aws-agents-pay 解析要求,并把交易交给 AgentCore payments 管理。
  4. 支付策略检查单笔上限、累计预算、目标域名和网络。
  5. 达到审批条件时暂停任务,等待人类确认。
  6. 支付成功后,Agent 携带证明重试原请求。

这套流程把“是否值得购买”与“是否允许付款”分开。前者可以由 Agent 根据任务上下文判断,后者必须由确定性的策略和审批机制裁决。

钱包不是权限边界,策略才是

只给 Agent 一个低余额钱包并不够。错误循环、提示词注入或异常服务都可能让它重复付款。生产级策略至少应覆盖以下维度:

  • 单笔限额:拒绝超过预设金额的支付要求。
  • 任务预算:限制一次 Agent 运行能够累计花费的总额。
  • 审批阈值:小额交易可自动执行,较大交易必须由人确认。
  • 目标白名单:只允许已审核的 API、MCP Server 或域名收款。
  • 网络限制:开发阶段仅允许测试网络,避免误用真实资产。
  • 幂等控制:同一资源和付款要求不能因为重试而重复扣款。
  • 审计记录:保存任务 ID、工具、报价、决策、审批人与交易结果。

尤其需要注意:Agent 输出的“我已经检查过价格”不能视为安全控制。金额解析、域名匹配、预算扣减和审批判断应在插件或支付服务一侧执行,而不是依赖模型遵守自然语言提示。

可以这样实践:先运行本地支付预检

下面是一个可直接运行的最小预检程序。它不发起真实支付,也不代表 AgentCore 或 aws-agents-pay 的正式接口;它用于在接入前验证限额、白名单和人工审批规则。实际项目中,可以把同样的判断放到 OpenClaw 调用支付插件之前。

将以下内容保存为 payment_guard.py,然后运行 python payment_guard.py

from dataclasses import dataclass
from decimal import Decimal
from urllib.parse import urlparse


@dataclass(frozen=True)
class PaymentRequest:
    resource_url: str
    amount: Decimal
    network: str
    task_id: str


ALLOWED_HOSTS = {"api.example.test", "mcp.example.test"}
ALLOWED_NETWORKS = {"testnet"}
MAX_SINGLE_PAYMENT = Decimal("0.10")
AUTO_APPROVE_LIMIT = Decimal("0.02")
TASK_BUDGET = Decimal("0.25")


def evaluate(request: PaymentRequest, spent: Decimal) -> str:
    host = urlparse(request.resource_url).hostname

    if host not in ALLOWED_HOSTS:
        return f"deny: host {host!r} is not allowlisted"
    if request.network not in ALLOWED_NETWORKS:
        return f"deny: network {request.network!r} is not allowed"
    if request.amount <= 0:
        return "deny: amount must be positive"
    if request.amount > MAX_SINGLE_PAYMENT:
        return "deny: single-payment limit exceeded"
    if spent + request.amount > TASK_BUDGET:
        return "deny: task budget exceeded"
    if request.amount > AUTO_APPROVE_LIMIT:
        return "review: human approval required"
    return "approve: payment may proceed"


if __name__ == "__main__":
    quote = PaymentRequest(
        resource_url="https://api.example.test/research/report",
        amount=Decimal("0.03"),
        network="testnet",
        task_id="research-2025-001",
    )
    print(evaluate(quote, spent=Decimal("0.04")))

示例会输出:

review: human approval required

把金额改成 0.01 会进入自动批准区间;把域名改成未列入 ALLOWED_HOSTS 的地址则会被拒绝。金额应使用 Decimal 或资产的最小整数单位处理,避免浮点数舍入影响预算判断。

在 OpenClaw 工作流中插入付款关卡

由于摘要没有给出插件版本和正式配置字段,下面使用示意配置表达集成边界,不能直接视为官方 aws-agents-pay 配置。接入时应按所用版本的文档替换字段名、凭证来源和网络标识。

# openclaw-payments.example.yaml
plugins:
  payments:
    provider: aws-agents-pay
    backend: amazon-bedrock-agentcore-payments
    network: testnet

    policy:
      allowed_hosts:
        - api.example.test
        - mcp.example.test
      max_single_payment: "0.10"
      max_task_spend: "0.25"
      human_approval_above: "0.02"
      deny_unknown_recipients: true

    audit:
      enabled: true
      include_task_id: true
      redact_wallet_secrets: true

Agent 的系统指令也应该明确任务层面的行为,但提示词只负责引导决策,不能代替支付策略:

当工具返回付款要求时:
1. 说明将购买的资源、价格以及它与当前任务的关系。
2. 不得拆分付款来绕过单笔审批阈值。
3. 支付被拒绝后,不得自动更换钱包、网络或收款地址。
4. 需要人工审批时暂停任务,并等待明确批准。
5. 支付成功后只重试原始请求一次;再次收费时停止并报告。

集成测试可以从一个固定报价的测试资源开始。验证时不要只检查最终内容是否返回,还要检查完整状态序列:请求 -> 402 -> 策略判断 -> 审批 -> 测试网支付 -> 携带证明重试 -> 审计记录

上线前的工程检查

建议把引入过程分成三个阶段。第一阶段只解析并记录 x402 报价,不允许支付;第二阶段启用测试网钱包,并要求每笔交易都人工批准;观察重复请求、超时和取消任务的行为后,再为极低金额开放自动批准。

上线前至少确认:

  • 钱包私钥或签名能力不会进入模型上下文、日志或工具返回值。
  • 服务端报价中的金额、资产、网络和收款方均经过结构化校验。
  • HTTP 重试、Agent 重规划和任务恢复不会造成重复付款。
  • 预算状态由可信服务持久化,而不是仅保存在对话历史中。
  • 审批界面展示最终交易内容,批准结果绑定任务与报价摘要。
  • 测试网与生产环境使用不同钱包、配置、告警和访问权限。
  • 支付成功但资源获取失败时,有明确的重试、申诉或退款策略。

给 Agent 钱包之后,它就不再只是一个工具调用器,而是能够产生财务后果的执行主体。AgentCore payments 和 x402 可以打通交易链路,aws-agents-pay 可以承担连接工作,但真正决定系统能否投入使用的,是独立于模型的预算、审批、幂等和审计机制。


相关推荐