Salta al contenuto principale
INTEGRAZIONE AUTOGEN

Integrazione dei pagamenti AutoGen.

Non esiste un pacchetto AutoGen, e non ne hai bisogno. Avvolgi il vero client blockchain0x in una funzione, passalo al tuo agente, e può muovere USDC su Base.

RISPOSTA BREVE

Non esiste un package specifico per AutoGen, e non ne hai bisogno. AutoGen trasforma già una normale funzione tipizzata in uno strumento, quindi avvolgi il vero client Python in una funzione, lo passi a un tramite , e l'agente può inviare USDC, saldare fatture e leggere i wallet su Base. Imposta e vai.

PERCHÉ NON C'È UN PACCHETTO

AutoGen rende già una funzione uno strumento. Usalo.

AutoGen costruisce uno schema di strumenti direttamente dalla firma e dalla docstring di una funzione Python. Un adattatore AutoGen dedicato avvolgerebbe solo una funzione che avremmo comunque scritto, per poi allontanarsi dalla sincronizzazione con l'API in rapida evoluzione di AutoGen. Quindi non ne spediamo uno. Scrivi poche righe che chiamano il vero client blockchain0x e mantieni il pieno controllo degli argomenti, della convalida e della gestione degli errori.

Questo è lo stesso client che gli adattatori LangChain e CrewAI forniti avvolgono sotto il cofano. Qui lo avvolgi tu stesso, il che significa che non c'è una versione dell'adattatore da tenere sotto controllo e nulla tra il tuo agente e l'API tranne la tua funzione. I team multi-agente funzionano allo stesso modo: dai la funzione wallet a un agente, lascia gli altri senza di essa, e l'autorità di spesa rimane in un posto.

INSTALLAZIONE

Installa AutoGen e il core SDK. Una variabile d'ambiente.

Non esiste un pacchetto AutoGen dedicato da aggiungere. Installa AutoGen (Python 3.10+) e il vero core SDK blockchain0x, quindi scrivi la funzione qui sotto. Questa è l'intera lista delle dipendenze.

INSTALLA
pip install autogen-agentchat "autogen-ext[openai]" blockchain0x
VARIABILE D'AMBIENTE
export BLOCKCHAIN0X_API_KEY=sk_test_...   # sk_test_ = Base Sepolia, sk_live_ = Base mainnet

BLOCKCHAIN0X_API_KEY è una chiave sk_test_ per testnet o sk_live_ per mainnet dalla tua dashboard; il client la legge dall'ambiente. Se il tuo agent riceve anche denaro, il gestore webhook richiede inoltre BLOCKCHAIN0X_WEBHOOK_SECRET, che la dashboard restituisce una sola volta quando crei o ruoti un webhook.

LA RICETTA

Una funzione che paga, consegnata a un AssistantAgent.

Di seguito è l'intera integrazione. send_usdc chiama il reale client blockchain0x; AssistantAgent(tools=[send_usdc]) lo trasforma in uno strumento che il modello può chiamare. AutoGen legge gli suggerimenti di tipo e la docstring per costruire lo schema, quindi mantienili onesti. Eseguilo e l'agente sposta USDC su 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.

GESTIONE DEI WEBHOOK

Conferma i pagamenti in entrata con un webhook firmato.

Se il tuo agente riceve anche USDC, confermalo con il webhook piuttosto che tramite polling. L'helper di verifica è incluso nel Node SDK; in un servizio Python verifichi manualmente contro l'HMAC documentato, che è tutto ciò che fa l'helper. Esempio FastAPI qui sotto; lo stesso codice funziona in qualsiasi framework Python asincrono.

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'algoritmo è HMAC-SHA256 sulla stringa t.rawBody, un confronto a tempo costante e una finestra di replay di 300 secondi. Leggi il corpo grezzo tramite await request.body(), mai request.json() rieseguito, perché ciò cambia i byte coperti dalla firma. Gli eventi spediti sono payment.received, payment.sent, wallet.deployed e webhook.test. Per lavori di follow-up pesanti, accoda un lavoro (Celery, RQ, arq) e rispondi 200 immediatamente anziché bloccare il gestore.

SORGENTE E DOCUMENTI

Il client che stai avvolgendo è aperto. Leggilo.

Non esiste un starter package AutoGen da clonare - la ricetta sopra è l'integrazione. Gli SDK blockchain0x sono open source su GitHub; questa ricetta incapsula il Python SDK (blockchain0x-python), con la superficie completa dei metodi nella documentazione. Consultala come riferimento per i body delle funzioni.

github.com/tosh-labs/blockchain0x-python

La superficie completa dei metodi dell'SDK e gli scope sono documentati in the docs. Inizia con una chiave sk_test_ su Base Sepolia, poi passa a sk_live_ quando la funzione si comporta come previsto.

ERRORI COMUNI

Cinque trappole di chat di gruppo e asincrone da evitare.

Il design multi-agente + asincrono di AutoGen sblocca modelli potenti ma introduce le proprie insidie. Queste provengono dalla nostra casella di supporto.

PITFALL 1

Non esiste un pacchetto AutoGen - avvolgi l'SDK

Blockchain0x fornisce adattatori per LangChain e CrewAI oltre al server MCP; non esiste un pacchetto AutoGen dedicato. La ricetta sopra è il percorso supportato: una funzione tipizzata semplice che chiama il reale client blockchain0x, consegnata a AssistantAgent(tools=[...]). AutoGen legge la firma della funzione e la docstring per costruire lo schema dello strumento, quindi mantieni la docstring accurata.

PITFALL 2

Gli importi sono unità base USDC, come stringhe

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 può rispondere 503 all'inizio

payments.create non ripete per impostazione predefinita e può restituire 503 fino a quando l'adattatore della catena non è collegato alla tua rete. Non lasciare che la chat di gruppo continui a girare su un pagamento fallito - cattura l'errore nella tua funzione, restituisci un messaggio chiaro su cui il modello può agire e fai affidamento sulla chiave di idempotenza auto-mintata affinché un tentativo manuale non comporti un pagamento doppio.

PITFALL 4

AutoGen 0.4+ è asincrono; la chiamata SDK è sincrona

AutoGen 0.4 esegue strumenti in un ciclo asincrono. La chiamata al client blockchain0x è sincrona, il che va bene per una richiesta veloce, ma una chiamata lenta blocca il ciclo. Se stai gestendo un volume reale, avvolgi la chiamata SDK con asyncio.to_thread in modo che il ciclo degli eventi rimanga reattivo. Per un singolo pagamento per turno, chiamarlo direttamente va bene.

PITFALL 5

Verifica i webhook in entrata rispetto al corpo grezzo

Se il tuo agente riceve anche denaro, confermalo con il webhook, non tramite polling. Verifica la firma sui byte RAW della richiesta (await request.body()), mai request.json() ri-serializzato, perché l'HMAC copre i byte esatti. È HMAC-SHA256 con una finestra di replay di 300 secondi. Il gestore qui sotto è l'intero processo.

DOMANDE FREQUENTI

Tre domande specifiche su AutoGen.

C'è un pacchetto AutoGen dedicato da installare?

No. Non esiste un adattatore AutoGen dedicato, e questo è deliberato - AutoGen trasforma già una funzione tipizzata semplice in uno strumento, quindi il percorso onesto è avvolgere il vero client blockchain0x in una funzione e passarla al tuo agente, esattamente come mostrato sopra. Gli unici pacchetti di framework spediti sono blockchain0x-langchain e blockchain0x-crewai (entrambi Python) più il server @blockchain0x/mcp. Tutto il resto, incluso AutoGen, è questa ricetta di poche righe.

La ricetta funziona su AutoGen classico (0.2.x) così come su 0.4+?

Sì, perché la logica di pagamento è solo una funzione Python - nulla di specifico per la versione AutoGen vive in essa. Su 0.4+ la passi tramite AssistantAgent(tools=[...]) come sopra. Sulla linea ConversableAgent 0.2.x registri la stessa funzione con register_function. Non esiste un sottogruppo .legacy da importare perché non esiste un pacchetto; possiedi la funzione.

Come riceve il mio agente USDC o regola una fattura, non solo la invia?

Estendi il resto del client nello stesso modo. blockchain0x.transactions.get legge una transazione, blockchain0x.agents.get e blockchain0x.agents.list leggono i wallet, e blockchain0x.payment_requests.settle salda una invoice che hai creato nella dashboard con prova on-chain. Ognuno diventa un'altra funzione tipizzata nella tua lista di strumenti. I pagamenti in ingresso si confermano tramite il webhook payment.received (verificalo con l'handler qui sotto); non esiste uno strumento che crei una nuova invoice, poiché le payment requests vengono create nella dashboard.

Dai al tuo agente AutoGen un wallet.

Alcune righe che avvolgono il client reale, nessun pacchetto da installare. Gratuito per iniziare.