自主 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,这个模型的重要价值不是“自动转账”本身,而是付款可以成为工具调用状态机的一部分:
- OpenClaw 请求付费 API、MCP 工具或网页资源。
- 服务端返回
402以及价格、网络、资产和收款方等支付要求。 aws-agents-pay解析要求,并把交易交给 AgentCore payments 管理。- 支付策略检查单笔上限、累计预算、目标域名和网络。
- 达到审批条件时暂停任务,等待人类确认。
- 支付成功后,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 可以承担连接工作,但真正决定系统能否投入使用的,是独立于模型的预算、审批、幂等和审计机制。