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

Agnoの支払い統合。

Agnoパッケージはなく、必要ありません。実際のblockchain0xクライアントを小さなToolkitでラップすれば、エージェントはBase上でUSDCを移動できます - 最小限の抽象化、Agnoの方法です。

短い回答

Agno 専用パッケージはありませんし、必要もありません。Agno は method を tool に変換するため、実際の Python client を小さな toolkit でラップして に追加します。エージェントは USDC を送信し、請求書を決済し、wallet を読み取れます。Agno のすべての model(OpenAI、Anthropic、DeepSeek、Llama、Mistral)で利用でき、支払いは Base で決済されます。

AGNOの理由

軽量なPythonフレームワーク。抽象化税なし。

Agno(以前のPhidata)は、最小限の儀式を求めるときに手を伸ばすエージェントフレームワークです。グラフビルダー、クルー、ワークフローはなく、エージェント、ツール、run()メソッドだけです。ツールはPythonの呼び出し可能なものです。このフレームワークは、ツールサポートを持つLLMを呼び出し、メモリを管理し、ストリーミング出力を生成するために十分な足場を追加し、その後はあなたの邪魔をしません。

レシピは同じ哲学に従います。実際のクライアントを呼び出す1つのメソッドを登録する小さなToolkitサブクラスを書きます - それは他のAgnoツールと同じように見え、振る舞います。インスタンス化を超えた特別なセットアップはなく、配線するグラフもなく、追跡するアダプタバージョンもありません。シンプルさがポイントです:グラフが必要であれば、LangGraphを使用しているでしょう。

インストール

AgnoとコアSDKをインストールします。2つのキー。

追加するblockchain0x Agnoパッケージはありません。Agno(Python 3.10+、Phidataの名前変更後の1.0+ライン)と実際のblockchain0xコアSDKをインストールし、次のツールキットを書きます。まだphi.*インポートを使用している場合は、最初にpip install -U agnoを実行してください。

インストール
pip install agno blockchain0x
環境変数
export OPENAI_API_KEY=sk-...
export BLOCKCHAIN0X_API_KEY=sk_test_...   # sk_test_ = Base Sepolia, sk_live_ = Base mainnet

OPENAI_API_KEY (または使用する Agno 対応 model に相当するキー)。BLOCKCHAIN0X_API_KEY は dashboard の sk_test_ testnet または sk_live_ mainnet キーで、client は環境変数から読み込みます。agent が受け取る側の支払いもある場合、webhook handler には追加で BLOCKCHAIN0X_WEBHOOK_SECRET が必要です。

レシピ

支払いを行うツールキット、エージェントに渡されます。

以下は全体の統合です。WalletToolsはsend_usdcを登録するToolkitのサブクラスであり、これは実際のblockchain0xクライアントを呼び出します。これをエージェントに追加し、run()呼び出しがツールの呼び出しを調整します。Agnoはメソッドシグネチャとドキュメント文字列を読み取ってスキーマを構築します。

AGENT.PY
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools import Toolkit
from blockchain0x import Client

blockchain0x = Client()  # reads BLOCKCHAIN0X_API_KEY from the environment

# Wrap the real client in an Agno Toolkit. No dedicated package needed.
class WalletTools(Toolkit):
    def __init__(self):
        super().__init__(name="wallet_tools")
        self.register(self.send_usdc)

    def send_usdc(self, 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.
        """
        return str(
            blockchain0x.payments.create(body={"agentId": agent_id, "to": to, "amountWei": amount_wei})
        )

agent = Agent(
    model=OpenAIChat(id="gpt-4o"),
    tools=[WalletTools()],
    instructions=["You pay vendor invoices in USDC within owner-set limits."],
)

result = agent.run("Pay 0.01 USDC from agent agt_123 to 0xVendor for the dataset.")
print(result.content)

When agent.run() executes, the model decides to pay, 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_. Register more methods on the toolkit - read a wallet, settle an invoice - the same way.

ウェブフック処理

署名されたウェブフックで受信支払いを確認します。

もしあなたのエージェントが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、arq)、ハンドラーをブロックするのではなく、すぐに200で応答します。

ソースとドキュメント

ラップしているクライアントはオープンです。読んでください。

クローンする Agno の starter package はありません - 上の recipe がそのまま integration です。blockchain0x の SDK は GitHub で open source です。この recipe は Python SDK (blockchain0x-python) をラップしており、完全なメソッド一覧は docs にあります。toolkit methods の参考として読んでください。

github.com/tosh-labs/blockchain0x-python

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

一般的な落とし穴

Agnoに特有の5つの注意点。

Agnoは統合が比較的クリーンなエージェントフレームワークの1つですが、独自の注意点があります - 特にPhidataの名称変更やマークダウンレンダリングに関して。

PITFALL 1

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

Blockchain0xは、LangChainとCrewAI用のアダプタとMCPサーバーを出荷します。専用のAgnoパッケージはありません。上記のレシピはパスです:実際のblockchain0xクライアントを呼び出すメソッドを登録するToolkitのサブクラスです。Agnoはメソッドシグネチャとドキュメンテーション文字列を読み取ってツールスキーマを構築するので、ドキュメンテーション文字列を正確に保ってください。

PITFALL 2

PhidataからAgnoへの移行の混乱

Agnoは2024年にPhidataから改名されました。phi.agentまたはphi.toolsからインポートしている古いコードベースは、互換性のあるシムを介してまだ動作しますが、agno.*インポートが現在のものです。レシピは全体でagno.*を使用します。コードがまだphi.*インポートの場合は、pip install -U agnoを実行し、Toolkitを追加する前にインポートパスを切り替えてください。

PITFALL 3

金額はUSDCの基本単位であり、文字列として表されます

payments.create takes amountWei: a string of USDC base units (6 decimals), so 0.01 USDC is "10000" and 5 USDC is "5000000". Type the method argument as str. It also does not retry by default and can answer 503 until the chain adapter is wired for your network - return a clear message rather than letting the agent loop.

PITFALL 4

同期 vs 非同期実行

Agnoはagent.run()(同期)とagent.arun()(非同期)をサポートしています。エージェントごとに1つのモードを選択します - agent.run()を呼び出し、結果を待とうとすると、文字列を期待していた場所でコルーチンが得られます。Toolkit内のblockchain0x呼び出しは同期的です。非同期パスにあり、実際のボリュームを移動している場合は、asyncio.to_threadでラップしてイベントループが応答し続けるようにします。

PITFALL 5

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

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

よくある質問

Agnoに特有の質問が3つ。

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

いいえ。AgnoはすでにToolkitメソッドをツールに変換しているため、正直な道は実際のblockchain0xクライアントをToolkitサブクラスでラップすることです。出荷されたフレームワークパッケージはblockchain0x-langchainとblockchain0x-crewai(両方ともPython)および@blockchain0x/mcpサーバーのみです。Agnoは、専用アダプターのない他のフレームワークと同様に、この数行のレシピです。

これはAgno Teams(マルチエージェントコラボレーション)で機能しますか?

はい。Agno Teams は複数の Agents を 1 つの coordinated unit にまとめます。WalletTools toolkit は、それを列挙した任意の agent で動作します。Teams でのきれいなパターンは、wallet toolkit を 1 つの専任 treasurer agent に渡し、他のメンバーには作業をさせることです。これにより spending authority は 1 か所に保たれ、CrewAI recipe と同じ形になります。read と settle の method も同じように toolkit に追加してください (blockchain0x.transactions.get, blockchain0x.agents.get, blockchain0x.payment_requests.settle)。

推論モデルとAgentUIで動作しますか?

はい。推論モデル(o1、DeepSeek R1)は同じ方法でツールを呼び出しますが、ターンごとに遅くなるため、呼び出しが完了する前にユーザーが進捗を確認できるように部分的なレスポンスをストリーミングします。AgentUIのAgnoの実行インスペクターでは、send_usdc呼び出しが他のツールと同様にツール呼び出しパネルに表示され、開発中にBase Sepoliaで支払いが通過するのを監視するのに便利です。

Agnoエージェントの作業に対して料金を請求します。

実際のクライアントをラップする小さなツールキット、インストールするパッケージはありません。無料で始められます。