Passer au contenu principal
INTÉGRATION SDK AGENTS OPENAI

Intégration du SDK OpenAI Agents.

Il n'y a pas de package Agents SDK, et vous n'en avez pas besoin. Décorez une fonction avec @function_tool, appelez le vrai client blockchain0x, et votre agent peut déplacer USDC sur Base.

RÉPONSE COURTE

Il n'existe pas de package OpenAI Agents SDK, et vous n'en avez pas besoin. Le SDK transforme une fonction décorée en outil avec , donc vous encapsulez le vrai client Python dans une fonction et l'ajoutez à votre . L'agent peut envoyer des USDC, régler des factures et lire des wallets - pour des agents uniques, des handoffs et l'API Responses sous-jacente. Les paiements sont réglés sur Base.

POURQUOI OPENAI AGENTS SDK

La surface d'appel d'outil la plus propre qu'OpenAI propose.

Le SDK des Agents OpenAI (publié en 2025) est la méthode recommandée par OpenAI pour construire des agents sur l'API Responses. Il abstrait le code standard autour de l'enregistrement des outils, des boucles de messages et des transferts entre agents, et produit un code Python propre et typé. Si vous commencez un projet d'agent centré sur OpenAI aujourd'hui et n'avez pas de préférences de framework, c'est le SDK que nous recommandons.

La recette est intentionnellement mince. send_usdc est une fonction simple décorée avec @function_tool ; vous l'ajoutez à la liste des outils d'un Agent et le Runner la prend. Pas de configuration spéciale, pas d'enveloppe supplémentaire, pas de fork du SDK. Lorsque le SDK des Agents expédie une nouvelle fonctionnalité (entrées multimodales, agents vocaux), votre fonction continue de fonctionner car elle repose sur la surface d'appel d'outils standard - rien de spécifique à la version n'y vit.

INSTALLATION

Installez le SDK des Agents et le SDK de base. Deux clés.

Il n'y a pas de package blockchain0x Agents SDK à ajouter. Vous installez le SDK OpenAI Agents (le package openai-agents, Python 3.10+) et le vrai SDK de base blockchain0x, puis écrivez la fonction ci-dessous. C'est toute la liste des dépendances.

INSTALLER
pip install openai-agents blockchain0x
VARIABLES D'ENVIRONNEMENT
export OPENAI_API_KEY=sk-...
export BLOCKCHAIN0X_API_KEY=sk_test_...   # sk_test_ = Base Sepolia, sk_live_ = Base mainnet

OPENAI_API_KEY est votre clé OpenAI existante (le SDK Agents l'utilise pour l'API Responses sous-jacente). BLOCKCHAIN0X_API_KEY est une clé sk_test_ testnet ou sk_live_ mainnet de votre tableau de bord ; le client la lit depuis l'environnement. Si votre agent reçoit également de l'argent, le gestionnaire de webhook a également besoin de BLOCKCHAIN0X_WEBHOOK_SECRET.

LA RECETTE

Un @function_tool qui paie, remis à un Agent.

Voici l'intégration complète. send_usdc appelle le véritable client blockchain0x ; @function_tool le transforme en outil, et le Runner orchestre l'appel. Le SDK lit les indications de type et la docstring pour construire le schéma, alors gardez-les honnêtes. Exécutez-le et l'agent déplace USDC sur Base.

AGENT.PY
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.

GESTION DES WEBHOOKS

Confirmer les paiements entrants avec un webhook signé.

Si votre agent reçoit également des USDC, confirmez-le avec le webhook plutôt que par sondage. L'assistant de vérification est inclus dans le SDK Node ; dans un service Python, vous vérifiez manuellement contre le HMAC documenté, ce que fait l'assistant. Exemple FastAPI ci-dessous ; le même code fonctionne dans n'importe quel framework Python asynchrone.

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}

L'algorithme est HMAC-SHA256 sur la chaîne t.rawBody, une comparaison en temps constant, et une fenêtre de répétition de 300 secondes. Lisez le corps brut via await request.body(), jamais request.json() re-sérialisé, car cela change les octets que la signature couvre. Les événements expédiés sont payment.received, payment.sent, wallet.deployed, et webhook.test. Pour un travail de suivi lourd, mettez une tâche en file d'attente (Celery, arq) et répondez 200 immédiatement plutôt que de bloquer le gestionnaire.

SOURCE ET DOCUMENTS

Le client que vous enveloppez est ouvert. Lisez-le.

Il n'y a pas de package de démarrage SDK Agents à cloner - la recette ci-dessus est l'intégration. Les SDK blockchain0x sont open source sur GitHub ; cette recette encapsule le SDK Python (blockchain0x-python), avec la surface complète des méthodes dans la documentation. Lisez-le pour une référence sur les corps de fonction.

github.com/tosh-labs/blockchain0x-python

La surface complète des méthodes SDK et les portées sont documentées dans la documentation. Commencez avec une clé sk_test_ sur Base Sepolia, puis passez à sk_live_ lorsque la fonction fonctionne comme vous l'attendez.

PIÈGES COURANTS

Cinq choses à surveiller lors de la première intégration.

Celles-ci proviennent de notre boîte de réception de support. Les connaître à l'avance permet d'économiser une heure chacune.

PITFALL 1

Il n'y a pas de package Agents SDK - vous encapsulez le SDK

Blockchain0x expédie des adaptateurs pour LangChain et CrewAI ainsi que le serveur MCP ; il n'y a pas de package OpenAI Agents SDK dédié. La recette ci-dessus est le chemin : décorez une fonction typée ordinaire avec @function_tool, appelez le véritable client blockchain0x à l'intérieur, et ajoutez-le à Agent(tools=[...]). Le SDK lit la signature et la docstring pour construire le schéma de l'outil, alors gardez la docstring précise.

PITFALL 2

Agents SDK n'est pas l'API Assistants

Le SDK des Agents OpenAI (le paquet openai-agents, importé en tant qu'agents) est un produit différent de l'ancienne API Assistants. La recette cible le SDK des Agents : Agent + Runner + @function_tool sur l'API des Réponses. Si vous appelez client.beta.assistants.create(...), vous êtes sur l'ancien modèle de threads/exécutions qu'OpenAI est en train de réduire - passez au SDK des Agents et la fonction ci-dessus s'intègre directement.

PITFALL 3

Les montants sont des unités de base USDC, sous forme de chaînes

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.

PITFALL 4

send_payment peut répondre 503 tôt

payments.create ne réessaie pas par défaut et peut renvoyer 503 jusqu'à ce que l'adaptateur de chaîne soit câblé pour votre réseau. Attrapez l'erreur à l'intérieur de votre fonction et renvoyez un message clair sur lequel le modèle peut agir, plutôt que de laisser le Runner boucler. La clé d'idempotence générée automatiquement signifie qu'un réessai manuel ne paiera pas deux fois.

PITFALL 5

Runtime uniquement asynchrone

Le SDK des agents est d'abord asynchrone - attendez Runner.run(...). L'appel blockchain0x à l'intérieur de votre outil est synchrone, ce qui est bien pour un paiement rapide unique mais bloque la boucle sous charge. Si vous exécutez de nombreux agents concurrents, enveloppez l'appel SDK avec asyncio.to_thread. À partir d'un point d'entrée synchrone, asyncio.run() au niveau supérieur.

QUESTIONS FRÉQUEMMENT POSÉES

Trois questions sur le SDK des agents OpenAI.

Y a-t-il un package OpenAI Agents SDK dédié à installer ?

Non. Le SDK des Agents transforme déjà une fonction décorée en un outil avec @function_tool, donc le chemin honnête est d'envelopper le véritable client blockchain0x vous-même, comme montré ci-dessus. Les seuls packages de framework expédiés sont blockchain0x-langchain et blockchain0x-crewai (tous deux en Python) plus le serveur @blockchain0x/mcp. Le SDK des Agents, comme les autres frameworks sans adaptateur dédié, est cette recette de quelques lignes.

Puis-je utiliser cela avec l'API OpenAI Responses directement, sans le SDK des Agents ?

Oui. L'API Responses est la couche d'appel d'outils sur laquelle le SDK Agents est construit. Si vous appelez client.responses.create() directement, déclarez la même fonction comme un outil dans la liste des outils de la demande et dispatch l'appel vous-même lorsque le modèle le demande - le corps est juste l'appel blockchain0x.payments.create de la recette. Le SDK Agents est le chemin de moindre résistance car @function_tool construit ce schéma d'outil et le dispatch pour vous.

Cela fonctionne-t-il avec des transferts multi-agents ?

Oui, et vous décidez quel agent possède le portefeuille. Le schéma propre est de donner la fonction de paiement à un seul agent orienté vers l'extérieur et de lui faire déléguer le travail réel à des agents spécialisés qui n'ont pas d'outils de portefeuille. L'autorité de dépense reste au même endroit, donc il n'y a pas de facturation par un mauvais agent. Ajoutez des fonctions de lecture et de règlement de la même manière - blockchain0x.transactions.get, blockchain0x.agents.get, blockchain0x.payment_requests.settle - chacune comme son propre @function_tool.

Ajoutez des paiements à votre build du SDK Agents.

Quelques lignes enveloppant le client réel, aucun package à installer. Gratuit pour commencer.