OpenAI Agents SDK-Integration.
Es gibt kein Agents SDK-Paket, und Sie benötigen keines. Dekorieren Sie eine Funktion mit @function_tool, rufen Sie den echten blockchain0x-Client auf, und Ihr Agent kann USDC auf Base bewegen.
Es gibt kein OpenAI Agents SDK-Paket, und Sie brauchen auch keines. Das SDK macht mit aus einer dekorierten Funktion ein Tool, also kapseln Sie den echten -Python-Client in eine Funktion und fügen ihn Ihrem hinzu. Der Agent kann USDC senden, Rechnungen begleichen und Wallets lesen - über einzelne Agents, Handoffs und die zugrunde liegende Responses API hinweg. Zahlungen werden auf Base abgewickelt.
Die sauberste Oberfläche für Toolaufrufe, die OpenAI bereitstellt.
Das OpenAI Agents SDK (veröffentlicht 2025) ist OpenAIs empfohlene Methode, um Agenten auf der Responses API aufzubauen. Es abstrahiert den Boilerplate rund um die Toolregistrierung, Nachrichtenloops und Übergaben zwischen Agenten und erzeugt sauberen, typisierten Python-Code. Wenn Sie heute ein OpenAI-zentrisches Agentenprojekt starten und keine Rahmenpräferenzen haben, ist dies das SDK, das wir empfehlen.
Das Rezept ist absichtlich dünn. send_usdc ist eine einfache Funktion, die mit @function_tool dekoriert ist; Sie fügen es der Werkzeugliste eines Agenten hinzu, und der Runner nimmt es auf. Keine spezielle Konfiguration, kein zusätzlicher Wrapper, kein Fork des SDK. Wenn das Agents SDK eine neue Funktion (multi-modale Eingaben, Sprachagenten) veröffentlicht, funktioniert Ihre Funktion weiterhin, da sie auf der standardmäßigen Werkzeugaufrufoberfläche basiert - nichts versionsspezifisches lebt darin.
Installieren Sie das Agents SDK und das Kern-SDK. Zwei Schlüssel.
Es gibt kein blockchain0x Agents SDK-Paket hinzuzufügen. Sie installieren das OpenAI Agents SDK (das openai-agents-Paket, Python 3.10+) und das echte blockchain0x-Kern-SDK und schreiben dann die Funktion unten. Das ist die gesamte Abhängigkeitsliste.
pip install openai-agents blockchain0xexport OPENAI_API_KEY=sk-... export BLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
OPENAI_API_KEY ist Ihr bestehender OpenAI-Schlüssel (das Agents SDK verwendet ihn für die zugrunde liegende Responses API). BLOCKCHAIN0X_API_KEY ist ein sk_test_ Testnet- oder sk_live_ Hauptnetzschlüssel von Ihrem Dashboard; der Client liest ihn aus der Umgebung. Wenn Ihr Agent auch Geld erhält, benötigt der Webhook-Handler zusätzlich BLOCKCHAIN0X_WEBHOOK_SECRET.
Ein @function_tool, das bezahlt, an einen Agenten übergeben.
Unten ist die gesamte Integration. send_usdc ruft den echten blockchain0x-Client auf; @function_tool verwandelt es in ein Tool, und der Runner orchestriert den Aufruf. Das SDK liest die Typ-Hinweise und die Dokumentation, um das Schema zu erstellen, also halten Sie sie ehrlich. Führen Sie es aus, und der Agent bewegt USDC auf Base.
from agents import Agent, Runner, function_tool from blockchain0x import Client blockchain0x = Client() # reads BLOCKCHAIN0X_API_KEY from the environment @function_tool 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. """ return str( blockchain0x.payments.create(body={"agentId": agent_id, "to": to, "amountWei": amount_wei}) ) agent = Agent( name="treasurer", instructions="You pay vendor invoices in USDC within owner-set limits.", tools=[send_usdc], model="gpt-4o", ) result = await Runner.run( agent, input="Pay 0.01 USDC from agent agt_123 to 0xVendor for the dataset.", ) print(result.final_output)
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 is another @function_tool in the list.
Bestätigen Sie eingehende Zahlungen mit einem signierten Webhook.
Wenn Ihr Agent auch USDC erhält, bestätigen Sie es mit dem Webhook anstelle von Abfragen. Der Verifizierungshelfer wird im Node SDK bereitgestellt; in einem Python-Dienst überprüfen Sie manuell gegen das dokumentierte HMAC, was der Helfer tut. Beispiel für FastAPI unten; derselbe Code funktioniert in jedem asynchronen Python-Framework.
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}
Der Algorithmus ist HMAC-SHA256 über den String t.rawBody, ein konstanter Vergleich und ein 300-Sekunden-Wiederholungsfenster. Lesen Sie den Rohkörper über await request.body(), niemals request.json() re-serialisiert, da dies die Bytes ändert, die die Signatur abdeckt. Die gelieferten Ereignisse sind payment.received, payment.sent, wallet.deployed und webhook.test. Für umfangreiche Nacharbeiten stellen Sie einen Job (Celery, arq) ein und antworten Sie sofort mit 200, anstatt den Handler zu blockieren.
Der Client, den Sie umwickeln, ist offen. Lesen Sie ihn.
Es gibt kein Agents SDK-Starterpaket zum Klonen - das obige Rezept ist die Integration. Die blockchain0x SDKs sind Open Source auf GitHub; dieses Rezept umschließt das Python SDK (blockchain0x-python) mit der vollständigen Methodenoberfläche in den Dokumenten. Lesen Sie es als Referenz für die Funktionskörper.
github.com/tosh-labs/blockchain0x-pythonDie vollständige SDK-Methodenoberfläche und die Scopes sind in den Dokumenten dokumentiert. Beginnen Sie mit einem sk_test_ Schlüssel gegen Base Sepolia und wechseln Sie zu sk_live_, wenn die Funktion das tut, was Sie erwarten.
Fünf Dinge, auf die man bei der ersten Integration achten sollte.
Diese stammen aus unserem Support-Posteingang. Wenn Sie sie im Voraus kennen, sparen Sie jeweils eine Stunde.
Es gibt kein Agents SDK-Paket - Sie wickeln das SDK ein.
Blockchain0x liefert Adapter für LangChain und CrewAI sowie den MCP-Server; es gibt kein dediziertes OpenAI Agents SDK-Paket. Das obige Rezept ist der Weg: dekorieren Sie eine einfache typisierte Funktion mit @function_tool, rufen Sie den echten blockchain0x-Client darin auf und fügen Sie ihn zu Agent(tools=[...]) hinzu. Das SDK liest die Signatur und den Docstring, um das Tool-Schema zu erstellen, also halten Sie den Docstring genau.
Agents SDK ist nicht die Assistants API
Das OpenAI Agents SDK (das openai-agents-Paket, importiert als agents) ist ein anderes Produkt als die ältere Assistants API. Das Rezept zielt auf das Agents SDK ab: Agent + Runner + @function_tool über die Responses API. Wenn Sie client.beta.assistants.create(...) aufrufen, befinden Sie sich im älteren Threads/Runs-Modell, das OpenAI zurückfährt - wechseln Sie zum Agents SDK und die oben genannte Funktion wird direkt übernommen.
Beträge sind USDC-Basiseinheiten, als Strings
payments.create takes amountWei: a string of USDC base units, not a float. USDC has 6 decimals, so 0.01 USDC is "10000" and 5 USDC is "5000000". Type the function argument as str; a float will lose precision before it reaches the API. Keep it a string end to end.
send_payment kann frühzeitig 503 zurückgeben
payments.create versucht standardmäßig nicht erneut und kann 503 zurückgeben, bis der Chain-Adapter für Ihr Netzwerk konfiguriert ist. Fangen Sie den Fehler innerhalb Ihrer Funktion ab und geben Sie eine klare Nachricht zurück, auf die das Modell reagieren kann, anstatt den Runner in einer Schleife laufen zu lassen. Der automatisch generierte Idempotency-Key bedeutet, dass ein manueller Retry nicht doppelt zahlt.
Nur asynchrone Laufzeit
Das Agents SDK ist asynchron - await Runner.run(...). Der blockchain0x-Aufruf innerhalb Ihres Tools ist synchron, was für eine einzelne schnelle Zahlung in Ordnung ist, aber die Schleife unter Last blockiert. Wenn Sie viele gleichzeitige Agenten ausführen, wickeln Sie den SDK-Aufruf mit asyncio.to_thread ein. Von einem synchronen Einstiegspunkt aus asyncio.run() auf der obersten Ebene.