Integración del SDK de OpenAI Agents.
No hay paquete SDK de Agentes, y no necesitas uno. Decora una función con @function_tool, llama al cliente real de blockchain0x, y tu agente puede mover USDC en Base.
No existe un paquete de OpenAI Agents SDK, y no lo necesitas. El SDK convierte una función decorada en una herramienta con , así que envuelves el cliente Python real de en una función y lo agregas a tu . El agente puede enviar USDC, liquidar facturas y leer wallets - en agentes individuales, handoffs y la Responses API subyacente. Los pagos se liquidan en Base.
La superficie de llamada a herramientas más limpia que OpenAI envía.
El SDK de Agentes de OpenAI (lanzado en 2025) es la forma recomendada por OpenAI para construir agentes sobre la API de Respuestas. Abstrae el código base alrededor del registro de herramientas, bucles de mensajes y transferencias entre agentes, y produce código Python limpio y tipado. Si estás comenzando un proyecto de agente centrado en OpenAI hoy y no tienes preferencias de framework, este es el SDK que recomendamos.
La receta es intencionalmente delgada. send_usdc es una función simple decorada con @function_tool; la agregas a la lista de herramientas de un Agente y el Runner la recoge. No hay configuración especial, ningún envoltorio extra, ninguna bifurcación del SDK. Cuando el SDK de Agentes envía una nueva función (entradas multimodales, agentes de voz), tu función sigue funcionando porque se basa en la superficie estándar de llamadas a herramientas - nada específico de la versión vive en ella.
Instala el Agents SDK y el SDK principal. Dos claves.
No hay paquete de blockchain0x Agents SDK para agregar. Instalas el OpenAI Agents SDK (el paquete openai-agents, Python 3.10+) y el verdadero SDK principal de blockchain0x, luego escribes la función a continuación. Esa es toda la lista de dependencias.
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 es tu clave existente de OpenAI (el Agents SDK la usa para la API de Respuestas subyacente). BLOCKCHAIN0X_API_KEY es una clave sk_test_ de testnet o sk_live_ de mainnet de tu panel; el cliente la lee del entorno. Si tu agente también recibe dinero, el manejador de webhook necesita adicionalmente BLOCKCHAIN0X_WEBHOOK_SECRET.
Una @function_tool que paga, entregada a un Agente.
A continuación se presenta toda la integración. send_usdc llama al cliente real de blockchain0x; @function_tool lo convierte en una herramienta, y el Runner orquesta la llamada. El SDK lee las sugerencias de tipo y la docstring para construir el esquema, así que mantenlos honestos. Ejecútalo y el agente mueve USDC en 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.
Confirme los pagos entrantes con un webhook firmado.
Si tu agente también recibe USDC, confírmalo con el webhook en lugar de sondear. El ayudante de verificación se envía en el SDK de Node; en un servicio de Python verificas manualmente contra el HMAC documentado, que es todo lo que hace el ayudante. Ejemplo de FastAPI a continuación; el mismo código funciona en cualquier marco de Python asíncrono.
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}
El algoritmo es HMAC-SHA256 sobre la cadena t.rawBody, una comparación en tiempo constante y una ventana de repetición de 300 segundos. Lee el cuerpo sin procesar a través de await request.body(), nunca request.json() re-serializado, porque eso cambia los bytes que cubre la firma. Los eventos enviados son payment.received, payment.sent, wallet.deployed y webhook.test. Para trabajos de seguimiento pesados, encola un trabajo (Celery, arq) y responde 200 inmediatamente en lugar de bloquear el controlador.
El cliente que estás envolviendo es abierto. Léelo.
No hay un paquete de inicio del Agents SDK para clonar - la receta anterior es la integración. Los SDK de blockchain0x son de código abierto en GitHub; esta receta envuelve el SDK de Python (blockchain0x-python), con la superficie completa de métodos en la documentación. Léelo como referencia para los cuerpos de las funciones.
github.com/tosh-labs/blockchain0x-pythonLa superficie completa de métodos del SDK y los alcances están documentados en la documentación. Comienza con una clave sk_test_ contra Base Sepolia, luego cambia a sk_live_ cuando la función haga lo que esperas.
Cinco cosas a tener en cuenta en la primera integración.
Estos provienen de nuestra bandeja de entrada de soporte. Conocerlos de antemano ahorra una hora cada uno.
No hay paquete SDK de Agentes - envuelves el SDK
Blockchain0x envía adaptadores para LangChain y CrewAI además del servidor MCP; no hay un paquete dedicado de OpenAI Agents SDK. La receta anterior es el camino: decore una función tipada simple con @function_tool, llame al cliente real de blockchain0x dentro, y agréguelo a Agent(tools=[...]). El SDK lee la firma y la docstring para construir el esquema de herramientas, así que mantenga la docstring precisa.
Agents SDK no es la API de Asistentes
El SDK de Agentes de OpenAI (el paquete openai-agents, importado como agents) es un producto diferente de la API de Asistentes anterior. La receta apunta al SDK de Agentes: Agente + Runner + @function_tool sobre la API de Respuestas. Si estás llamando a client.beta.assistants.create(...), estás en el modelo de hilos/ejecuciones más antiguo que OpenAI está descontinuando - muévete al SDK de Agentes y la función anterior se integra directamente.
Las cantidades son unidades base de USDC, como cadenas
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 puede responder 503 temprano
payments.create no reintenta por defecto y puede devolver 503 hasta que el adaptador de cadena esté conectado a su red. Capture el error dentro de su función y devuelva un mensaje claro que el modelo pueda utilizar, en lugar de dejar que el Runner se repita. La clave de idempotencia generada automáticamente significa que un reintento manual no pagará el doble.
Runtime solo asíncrono
El SDK de Agentes es primero asíncrono - await Runner.run(...). La llamada a blockchain0x dentro de tu herramienta es sincrónica, lo cual está bien para un solo pago rápido pero bloquea el bucle bajo carga. Si estás ejecutando muchos agentes concurrentes, envuelve la llamada SDK con asyncio.to_thread. Desde un punto de entrada sincrónico, asyncio.run() en el nivel superior.