StableOps
常見問題

怎麼設定 Agent 自主支付和人工審批?

透過來源、收款地址、網路、自動付款閾值、多人審批層級、單筆限額和兩級每日預算,為 Agent 劃定安全的自主支付邊界。瞭解哪些付款會自動放行、進入人工審批或被硬約束直接拒絕,並正確使用統一的六位預算金額單位。

透過 Agent 的支出策略設定。日常、低風險付款可以在明確邊界內自動放行。未知目標或較高金額進入人工審批,超過硬限額的付款直接拒絕。

錢包簽名不等於人工審批。每筆新付款仍需錢包簽名,但客戶自行部署的簽名器伴隨服務會在校驗短時執行授權後自動完成簽名,不需要使用者開啟錢包或守在電腦旁。

預設行為

建立付款 Agent 的預設策略採用保守設定:

  • allowedOriginsallowedPayTo 為空。
  • automaticPaymentThresholdAtomic0
  • 未知來源和未知收款地址必須人工審批。

因此,在建立並啟用明確的策略版本前,正常付款都會進入人工審批。策略版本不可變。調整規則時應建立新版本並啟用,而不是修改舊版本。

設定自主支付範圍

你可以任選以下一種方式完成設定。兩種方式寫入的是同一份支出策略,最終生效的自主支付和人工審批規則完全相同:

  • 控制台:進入「付款 Agent」,找到目標 Agent 後點選「管理」。在 Agent 詳情頁的「建立支出策略版本」區域填寫策略,然後點選「建立策略版本」。新版本不會自動生效,還需要在下方的「支出策略版本」列表中點選對應版本的「啟用」。
  • 程式碼:執行下面的管理 SDK 示例,以程式設計方式建立並啟用等效策略。只需手動設定一次時可使用控制台;需要在多個環境重複設定或納入基礎設施程式碼時,可使用管理 SDK。

下面的沙盒示例允許 Agent 自動向一個已知服務支付不超過 0.25 USDC 的費用。同一目標超過自動閾值但不超過 1 USDC 時進入人工審批,超過 1 USDC 時直接拒絕:

const version = await management.agents.createPolicyVersion(agent.id, {
  networks: [
    {
      network: 'eip155:84532',
      asset: {
        symbol: 'USDC',
        contractAddress: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',
      },
    },
  ],
  allowedOrigins: ['https://resource.example.com'],
  allowedPayTo: ['0x1234567890abcdef1234567890abcdef12345678'],
  automaticPaymentThresholdAtomic: '250000', // 0.25 USDC
  perPaymentLimitAtomic: '1000000', // 1 USDC
  agentDailyLimitAtomic: '5000000', // 5 USDC
  requireApprovalForUnknownOrigin: true,
  requireApprovalForUnknownPayTo: true,
  approvalTiers: [{ minimumAmountAtomic: '500000', requiredApprovals: 2 }],
})

await management.agents.activatePolicyVersion(agent.id, version.id)

所有網路的策略閾值、單筆限額和預算都統一使用 6 位 USDC 預算單位,因此 1000000 始終表示 1 USDC。支付報價和回執才使用該網路所設定代幣自身的小數位數。目前網路與代幣設定以支援範圍為準。

同一策略可以覆蓋多個網路,但只應加入收費服務實際接受且業務確實需要的網路。在 networks 中列出網路,不會讓收費服務支援更多網路。沙盒推薦使用 Base Sepolia,正式環境推薦使用 Base。選擇其它網路時,先完成一筆需要人工審批的小額付款。

啟用後,每筆付款按以下順序判斷:

條件結果
網路或資產不匹配,或者金額超過 perPaymentLimitAtomic直接拒絕,審批不能覆蓋
來源和收款地址均在允許列表,且金額不超過 automaticPaymentThresholdAtomic自動放行並自動簽名
來源或收款地址未知,或者金額超過自動閾值但沒有超過單筆限額等待人工審批,所需人數由匹配的審批層級決定
組織或 Agent 每日預算不足,或者風險門禁、暫停狀態等其它硬約束不滿足直接拒絕,審批不能覆蓋

自動付款閾值不得超過單筆限額。實際可用的每日金額還會同時受到策略中的 Agent 日限額、Agent 預算、組織預算和平台上限約束,其中最嚴格的限制生效。

approvalTiers 可以按 6 位預算金額要求 1 至 5 名不同管理員批准,滿足條件的最高 minimumAmountAtomic 層級生效。每名管理員只能投票一次。即使要求多人批准,只要有一人拒絕,付款就會立即被拒絕。

如何選擇邊界

建議從最小許可權開始設定:

  1. 只加入確實需要訪問的 HTTPS 來源,不要使用寬泛的域名範圍。
  2. 只加入賣方公佈並經過核對的收款地址,不要接受 Agent 自行提供的地址。
  3. 把自動付款閾值設定為日常單次呼叫所需的小額範圍。
  4. 把單筆限額設定為必須經過人工確認的最高金額邊界。
  5. 用 Agent 和組織每日預算限制失控迴圈造成的累計損失。
  6. 沙盒與正式環境分別使用策略、錢包、簽名器和預算。

不要為了無人值守執行而把管理 API Key、管理員會話或通用錢包簽名許可權交給 Agent。這樣會繞過自主支付與人工審批之間的安全邊界。

無人值守時如何簽名

簽名器伴隨服務應與 Agent 執行時一起作為常駐服務部署,並滿足以下要求:

  • 只監聽本地迴環地址,並設定高強度伴隨服務令牌。
  • 使用持久化授權儲存,避免重啟後失去重放保護。
  • 為程序設定自動重啟、健康檢查和告警。
  • EVM 沙盒使用本地測試簽名器,EVM 正式環境使用 AWS KMS,Solana 使用客戶自行部署的本地簽名器。

每筆新的付款授權會觸發一次自動簽名。相同執行授權的安全重試會複用已儲存的簽名結果,不需要人工操作,也不會生成另一筆不同付款。

進入人工審批後怎麼辦

awaiting_approval 應被當作可持久化的業務狀態,而不是讓 Agent 程序一直等待:

  1. 儲存返回的 intentIdapprovalIdapprovalExpiresAt
  2. 透過 agent_payment.intent.awaiting_approval Webhook 或自己的通知系統提醒管理員。
  3. 讓 Agent 繼續處理不依賴這筆付款的其它任務。
  4. 管理員批准後,呼叫 agent.resumeX402Purchase(intentId, resourceUrl) 恢復原付款。

審批預設有效 30 分鐘。審批只能授權當時鎖定的請求方法、網址、請求體摘要、內容型別、來源、收款地址、網路、資產和最高金額,不會自動修改支出策略。詳細恢復流程見為什麼支付在等待審批,應該如何恢復?

相關內容

這篇文件怎麼樣?

最後更新

本頁內容