Saltar al contenido principal
INTEGRACIÓN DE AUTOGEN

Integración de pagos de AutoGen.

No hay paquete AutoGen, y no necesitas uno. Envuelve el cliente real de blockchain0x en una función, entrégaselo a tu agente, y puede mover USDC en Base.

RESPUESTA CORTA

No existe un paquete específico de AutoGen, y no lo necesitas. AutoGen ya convierte una función tipada normal en una herramienta, así que envuelves el cliente Python real de en una función, se la entregas a un vía , y el agente puede enviar USDC, liquidar facturas y leer wallets en Base. Configura y listo.

POR QUÉ NO HAY PAQUETE

AutoGen ya convierte una función en una herramienta. Usa eso.

AutoGen construye un esquema de herramienta directamente desde la firma y la docstring de una función de Python. Un adaptador dedicado de AutoGen solo envolvería una función que habríamos escrito de todos modos, luego se desincronizaría con la API de AutoGen en rápido movimiento. Por eso no enviamos uno. Escribes unas pocas líneas que llaman al cliente real de blockchain0x, y mantienes el control total de los argumentos, la validación y el manejo de errores.

Este es el mismo cliente que los adaptadores enviados de LangChain y CrewAI envuelven internamente. Aquí lo envuelves tú mismo, lo que significa que no hay versión de adaptador que rastrear y nada entre tu agente y la API excepto tu propia función. Los equipos de múltiples agentes funcionan de la misma manera: da la función de billetera a un agente, deja a los otros sin ella, y la autoridad de gasto permanece en un solo lugar.

INSTALACIÓN

Instala AutoGen y el SDK principal. Una variable de entorno.

No hay paquete dedicado de AutoGen para agregar. Instalas AutoGen (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.

INSTALAR
pip install autogen-agentchat "autogen-ext[openai]" blockchain0x
VARIABLE DE ENTORNO
export BLOCKCHAIN0X_API_KEY=sk_test_...   # sk_test_ = Base Sepolia, sk_live_ = Base mainnet

BLOCKCHAIN0X_API_KEY es una clave sk_test_ testnet o sk_live_ mainnet de tu panel de control; el cliente la lee del entorno. Si tu agente también recibe dinero, el manejador de webhook también necesita BLOCKCHAIN0X_WEBHOOK_SECRET, que el panel de control devuelve una vez cuando creas o rotas un webhook.

LA RECETA

Una función que paga, entregada a un AssistantAgent.

A continuación se presenta toda la integración. send_usdc llama al cliente real de blockchain0x; AssistantAgent(tools=[send_usdc]) lo convierte en una herramienta que el modelo puede llamar. AutoGen 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.

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.

MANEJO DE WEBHOOK

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.

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}

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, RQ, arq) y responde 200 inmediatamente en lugar de bloquear el controlador.

CÓDIGO Y DOCUMENTOS

El cliente que estás envolviendo es abierto. Léelo.

No hay un paquete de inicio de AutoGen 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-python

La 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.

ERRORES COMUNES

Cinco trampas de chat grupal y asíncronas a evitar.

El diseño multi-agente + asíncrono de AutoGen desbloquea patrones poderosos pero introduce sus propias complicaciones. Estas provienen de nuestra bandeja de entrada de soporte.

PITFALL 1

No hay paquete AutoGen - envuelves el SDK

Blockchain0x envía adaptadores para LangChain y CrewAI además del servidor MCP; no hay un paquete dedicado de AutoGen. La receta anterior es el camino soportado: una función tipada simple que llama al cliente real de blockchain0x, entregada a AssistantAgent(tools=[...]). AutoGen lee la firma de la función y la docstring para construir el esquema de herramientas, así que mantenga la docstring precisa.

PITFALL 2

Las cantidades son unidades base de USDC, como cadenas

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 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. No deje que el chat grupal se repita en un pago fallido - capture el error en su función, devuelva un mensaje claro que el modelo pueda utilizar y confíe en la clave de idempotencia generada automáticamente para que un reintento manual no pague el doble.

PITFALL 4

AutoGen 0.4+ es asíncrono; la llamada del SDK es sincrónica

AutoGen 0.4 ejecuta herramientas en un bucle asíncrono. La llamada del cliente blockchain0x es sincrónica, lo cual está bien para una solicitud rápida, pero una llamada lenta bloquea el bucle. Si estás moviendo volumen real, envuelve la llamada del SDK con asyncio.to_thread para que el bucle de eventos permanezca receptivo. Para un solo pago por turno, llamarlo directamente está bien.

PITFALL 5

Verificar webhooks entrantes contra el cuerpo sin procesar

Si tu agente también RECIBE dinero, confírmalo con el webhook, no mediante sondeo. Verifica la firma sobre los bytes RAW de la solicitud (await request.body()), nunca request.json() re-serializado, porque el HMAC cubre los bytes exactos. Es HMAC-SHA256 con una ventana de repetición de 300 segundos. El manejador a continuación es todo.

PREGUNTAS FRECUENTES

Tres preguntas específicas de AutoGen.

¿Hay un paquete AutoGen dedicado para instalar?

No. No hay un adaptador dedicado de AutoGen, y eso es deliberado - AutoGen ya convierte una función tipada simple en una herramienta, así que el camino honesto es envolver el cliente real de blockchain0x en una función y entregársela a tu agente, exactamente como se muestra arriba. Los únicos paquetes de framework enviados son blockchain0x-langchain y blockchain0x-crewai (ambos Python) más el servidor @blockchain0x/mcp. Todo lo demás, incluido AutoGen, es esta receta de pocas líneas.

¿La receta funciona en AutoGen clásico (0.2.x) así como en 0.4+?

Sí, porque la lógica de pago es solo una función de Python - nada específico de la versión de AutoGen vive en ella. En 0.4+ la pasas a través de AssistantAgent(tools=[...]) como se mencionó anteriormente. En la línea de ConversableAgent 0.2.x registras la misma función con register_function. No hay un submódulo .legacy para importar porque no hay paquete; tú posees la función.

¿Cómo recibe mi agente USDC o liquida una factura, no solo la envía?

Envuelve más del cliente de la misma manera. blockchain0x.transactions.get lee una transacción, blockchain0x.agents.get y blockchain0x.agents.list leen billeteras, y blockchain0x.payment_requests.settle liquida una factura que creaste en el panel de control con prueba en la cadena. Cada uno se convierte en otra función tipada en tu lista de herramientas. Los pagos entrantes se confirman a través del webhook payment.received (verifícalo con el controlador a continuación); no hay herramienta que genere una nueva factura, ya que las solicitudes de pago se crean en el panel de control.

Dale a tu agente AutoGen una billetera.

Unas pocas líneas envolviendo el cliente real, sin paquete que instalar. Gratis para comenzar.