AutoGenの支払い統合。
AutoGenパッケージはなく、必要ありません。実際のblockchain0xクライアントを関数でラップし、それをエージェントに渡せば、Base上でUSDCを移動できます。
AutoGen 専用パッケージはありませんし、必要もありません。AutoGen はすでに通常の型付き関数を tool に変換するため、実際の Python client を関数でラップし、 に 経由で渡せば、エージェントは Base 上で USDC を送信し、請求書を決済し、wallet を読み取れます。 を設定して進めてください。
AutoGenはすでに関数をツールにします。それを使用してください。
AutoGenはPython関数のシグネチャとドキュメント文字列から直接ツールスキーマを構築します。専用のAutoGenアダプタは、私たちが書いたであろう関数をラップするだけであり、その後AutoGenの急速に変化するAPIと同期が外れます。したがって、私たちはそれを出荷しません。実際のblockchain0xクライアントを呼び出す数行を書き、引数、検証、およびエラーハンドリングを完全に制御します。
これは、出荷されたLangChainとCrewAIアダプターが内部でラップしている同じクライアントです。ここでは、自分でラップします。つまり、追跡するアダプターバージョンはなく、エージェントとAPIの間には自分の関数しかありません。マルチエージェントチームは同じように機能します:ウォレット機能を1つのエージェントに与え、他のエージェントには与えず、支出権限は1か所に留まります。
AutoGenとコアSDKをインストールします。1つの環境変数。
追加する専用のAutoGenパッケージはありません。AutoGen(Python 3.10+)と実際のblockchain0xコアSDKをインストールし、次の関数を書きます。それが全依存関係リストです。
pip install autogen-agentchat "autogen-ext[openai]" blockchain0x
export BLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
BLOCKCHAIN0X_API_KEY は dashboard の sk_test_ testnet または sk_live_ mainnet キーで、client は環境変数から読み込みます。agent が受け取る側の支払いもある場合、webhook handler には追加で BLOCKCHAIN0X_WEBHOOK_SECRET が必要です。これは webhook を作成またはローテーションしたときに dashboard が 1 回だけ返します。
支払いを行う関数、AssistantAgentに渡されます。
以下は全体の統合です。send_usdcは実際のblockchain0xクライアントを呼び出します;AssistantAgent(tools=[send_usdc])はそれをモデルが呼び出せるツールに変換します。AutoGenは型ヒントとドキュメント文字列を読み取ってスキーマを構築するため、正直に保ってください。実行すると、エージェントはBase上でUSDCを移動します。
from autogen_agentchat.agents import AssistantAgent from autogen_ext.models.openai import OpenAIChatCompletionClient from blockchain0x import Client blockchain0x = Client() # reads BLOCKCHAIN0X_API_KEY from the environment # AutoGen turns a plain typed function into a tool. No dedicated package needed. def send_usdc(agent_id: str, to: str, amount_wei: str) -> str: """Send a USDC payment from an agent wallet. amount_wei is USDC base units (6 decimals), so "10000" is 0.01 USDC. """ result = blockchain0x.payments.create( body={"agentId": agent_id, "to": to, "amountWei": amount_wei}, ) return str(result) treasurer = AssistantAgent( name="treasurer", model_client=OpenAIChatCompletionClient(model="gpt-4o"), tools=[send_usdc], system_message="You pay vendor invoices in USDC within owner-set limits.", ) result = await treasurer.run( task="Pay 0.01 USDC from agent agt_123 to 0xVendor for the dataset.", )
When the agent decides to pay, it calls send_usdc, the SDK submits the transfer, and you get a transaction hash back. amount_wei is base units, so 0.01 USDC is "10000". A sk_test_ key keeps it on Base Sepolia until you switch to sk_live_. Add more functions - read a wallet, settle an invoice - the same way; each becomes another entry in tools.
署名されたウェブフックで受信支払いを確認します。
もしあなたのエージェントがUSDCを受け取る場合、ポーリングではなくWebhookで確認します。verifyヘルパーはNode SDKに含まれています; Pythonサービスでは、文書化されたHMACに対して手動で検証します。これはヘルパーが行うすべてです。以下のFastAPIの例; 同じコードは任意の非同期Pythonフレームワークで動作します。
import hmac, hashlib, os, time from fastapi import FastAPI, Request, HTTPException app = FastAPI() SECRET = os.environ["BLOCKCHAIN0X_WEBHOOK_SECRET"].encode() @app.post("/webhooks/payment") async def receive(request: Request): raw = await request.body() # RAW bytes - do not parse first sig = request.headers.get("X-Blockchain0x-Signature", "") ts = request.headers.get("X-Blockchain0x-Timestamp", "") parts = dict(p.split("=", 1) for p in sig.split(",") if "=" in p) t, v1 = parts.get("t", ts), parts.get("v1", sig) want = hmac.new(SECRET, t.encode() + b"." + raw, hashlib.sha256).hexdigest() if not hmac.compare_digest(want, v1) or abs(time.time() - int(t)) > 300: raise HTTPException(status_code=401) if request.headers.get("X-Blockchain0x-Event-Type") == "payment.received": await trigger_followup() # USDC landed - run the next step return {"ok": True}
アルゴリズムは、文字列t.rawBodyに対するHMAC-SHA256、定数時間比較、および300秒のリプレイウィンドウです。生のボディをawait request.body()を介して読み取ります。request.json()を再シリアライズしてはいけません。なぜなら、それは署名がカバーするバイトを変更するからです。出荷されたイベントはpayment.received、payment.sent、wallet.deployed、およびwebhook.testです。重いフォローアップ作業の場合は、ジョブをキューに入れ(Celery、RQ、arq)、ハンドラーをブロックするのではなく、すぐに200で応答します。
ラップしているクライアントはオープンです。読んでください。
クローンする AutoGen の starter package はありません - 上の recipe がそのまま integration です。blockchain0x の SDK は GitHub で open source です。この recipe は Python SDK (blockchain0x-python) をラップしており、完全なメソッド一覧は docs にあります。function body の参考として読んでください。
github.com/tosh-labs/blockchain0x-pythonSDK のメソッド一覧とスコープは the docs に記載されています。まずは Base Sepolia で sk_test_ key を使い、関数が想定どおり動いたら sk_live_ に切り替えてください。
グループチャットと非同期に特有の避けるべき5つの罠。
AutoGenのマルチエージェント + 非同期デザインは強力なパターンを解放しますが、独自の落とし穴を導入します。これらは私たちのサポートインボックスから来ています。
AutoGenパッケージはありません - SDKをラップします。
Blockchain0xは、LangChainとCrewAI用のアダプタとMCPサーバーを出荷します。専用のAutoGenパッケージはありません。上記のレシピはサポートされたパスです:実際のblockchain0xクライアントを呼び出すプレーンな型付き関数で、AssistantAgent(tools=[...])に渡されます。AutoGenは関数のシグネチャとドキュメンテーション文字列を読み取ってツールスキーマを構築するので、ドキュメンテーション文字列を正確に保ってください。
金額はUSDCの基本単位であり、文字列として表されます
payments.create takes amountWei: a string of USDC base units, not a float and not a dollar figure. USDC has 6 decimals, so 0.01 USDC is "10000" and 5 USDC is "5000000". Type the tool argument as str and validate it before the call - a float that sneaks through either errors at the backend or moves a millionth of what you meant.
send_paymentは早期に503を返すことがあります
payments.createはデフォルトでは再試行せず、チェーンアダプターがネットワークに接続されるまで503を返すことがあります。失敗した支払いでグループチャットがループしないようにしてください。関数内でエラーをキャッチし、モデルがアクションを実行できる明確なメッセージを返してください。自動生成された冪等性キーに依存し、手動での再試行が二重支払いを引き起こさないようにします。
AutoGen 0.4+は非同期です;SDK呼び出しは同期です
AutoGen 0.4はツールを非同期ループで実行します。blockchain0xクライアント呼び出しは同期的であり、迅速なリクエストには問題ありませんが、遅い呼び出しはループをブロックします。実際のボリュームを移動している場合は、asyncio.to_threadでSDK呼び出しをラップしてイベントループが応答し続けるようにします。1ターンあたりの単一の支払いの場合は、直接呼び出すことができます。
生のボディに対して受信Webhookを確認します。
もしあなたのエージェントが金銭を受け取る場合、ポーリングではなくWebhookで確認します。RAWリクエストバイトに対して署名を検証します (await request.body())、決してrequest.json()を再シリアライズしないでください、なぜならHMACは正確なバイトをカバーするからです。それは300秒のリプレイウィンドウを持つHMAC-SHA256です。以下のハンドラが全体です。