メインコンテンツにスキップ
AUTOGEN統合

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を移動します。

AGENT.PY
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フレームワークで動作します。

WEBHOOK.PY
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-python

SDK のメソッド一覧とスコープは the docs に記載されています。まずは Base Sepolia で sk_test_ key を使い、関数が想定どおり動いたら sk_live_ に切り替えてください。

一般的な落とし穴

グループチャットと非同期に特有の避けるべき5つの罠。

AutoGenのマルチエージェント + 非同期デザインは強力なパターンを解放しますが、独自の落とし穴を導入します。これらは私たちのサポートインボックスから来ています。

PITFALL 1

AutoGenパッケージはありません - SDKをラップします。

Blockchain0xは、LangChainとCrewAI用のアダプタとMCPサーバーを出荷します。専用のAutoGenパッケージはありません。上記のレシピはサポートされたパスです:実際のblockchain0xクライアントを呼び出すプレーンな型付き関数で、AssistantAgent(tools=[...])に渡されます。AutoGenは関数のシグネチャとドキュメンテーション文字列を読み取ってツールスキーマを構築するので、ドキュメンテーション文字列を正確に保ってください。

PITFALL 2

金額は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.

PITFALL 3

send_paymentは早期に503を返すことがあります

payments.createはデフォルトでは再試行せず、チェーンアダプターがネットワークに接続されるまで503を返すことがあります。失敗した支払いでグループチャットがループしないようにしてください。関数内でエラーをキャッチし、モデルがアクションを実行できる明確なメッセージを返してください。自動生成された冪等性キーに依存し、手動での再試行が二重支払いを引き起こさないようにします。

PITFALL 4

AutoGen 0.4+は非同期です;SDK呼び出しは同期です

AutoGen 0.4はツールを非同期ループで実行します。blockchain0xクライアント呼び出しは同期的であり、迅速なリクエストには問題ありませんが、遅い呼び出しはループをブロックします。実際のボリュームを移動している場合は、asyncio.to_threadでSDK呼び出しをラップしてイベントループが応答し続けるようにします。1ターンあたりの単一の支払いの場合は、直接呼び出すことができます。

PITFALL 5

生のボディに対して受信Webhookを確認します。

もしあなたのエージェントが金銭を受け取る場合、ポーリングではなくWebhookで確認します。RAWリクエストバイトに対して署名を検証します (await request.body())、決してrequest.json()を再シリアライズしないでください、なぜならHMACは正確なバイトをカバーするからです。それは300秒のリプレイウィンドウを持つHMAC-SHA256です。以下のハンドラが全体です。

よくある質問

AutoGenに特有の質問が3つ。

インストールするための専用のAutoGenパッケージはありますか?

いいえ。専用のAutoGenアダプターはありません。これは意図的です - AutoGenはすでにプレーンな型付き関数をツールに変換しているため、正直な道は実際のblockchain0xクライアントを関数にラップしてエージェントに渡すことです。出荷されたフレームワークパッケージはblockchain0x-langchainとblockchain0x-crewai(両方ともPython)および@blockchain0x/mcpサーバーのみです。他のすべて、AutoGenを含むものは、この数行のレシピです。

レシピはクラシックAutoGen(0.2.x)および0.4+でも機能しますか?

はい、支払いロジックは単なるPython関数であり、AutoGenバージョン固有のものは何も存在しません。0.4以上では、上記のようにAssistantAgent(tools=[...])を介して渡します。0.2.x ConversableAgentラインでは、同じ関数をregister_functionで登録します。インポートするための.legacyサブモジュールはありません。なぜなら、パッケージが存在しないからです。あなたがその関数を所有しています。

私のエージェントはUSDCを受け取るか、請求書を決済するにはどうすればよいですか、ただ送信するだけではなく?

同じ方法で client の残りもラップしてください。blockchain0x.transactions.get は transaction を読み、blockchain0x.agents.get と blockchain0x.agents.list は wallets を読み、blockchain0x.payment_requests.settle は dashboard で作成した invoice を on-chain proof 付きで settle します。これらはすべて tools list の別の typed function になります。Inbound payment は payment.received webhook で確認します (下の handler で verify してください)。payment requests は dashboard で作成するため、新しい invoice を mint する tool はありません。

AutoGenエージェントにウォレットを提供します。

実際のクライアントをラップするいくつかの行、インストールするパッケージはありません。無料で始められます。