Passer au contenu principal
INTÉGRATION AGNO

Intégration de paiement Agno.

Il n'y a pas de package Agno, et vous n'en avez pas besoin. Encapsulez le vrai client blockchain0x dans un petit Toolkit et votre agent peut déplacer USDC sur Base - abstraction minimale, à la manière d'Agno.

RÉPONSE COURTE

Il n'existe pas de package spécifique à Agno, et vous n'en avez pas besoin. Agno transforme une méthode en outil, donc vous encapsulez le vrai client Python dans une petite boîte à outils et l'ajoutez à votre . L'agent peut envoyer des USDC, régler des factures et lire des wallets, sur tous les modèles Agno (OpenAI, Anthropic, DeepSeek, Llama, Mistral). Les paiements sont réglés sur Base.

POURQUOI AGNO

Le framework Python léger. Pas de taxe d'abstraction.

Agno (anciennement Phidata) est le cadre d'agent que vous choisissez lorsque vous voulez un minimum de cérémonies. Il n'y a pas de constructeur de Graph, pas de Crew, pas de Workflow - juste Agent, Outils, et une méthode run(). Les outils sont des appelables Python. Le cadre ajoute suffisamment d'échafaudage pour appeler des LLM avec un support d'outils, gérer la mémoire, et produire une sortie en streaming, puis se met en retrait.

La recette suit la même philosophie. Vous écrivez une petite sous-classe Toolkit qui enregistre une méthode appelant le véritable client - elle ressemble et se comporte comme tout autre outil Agno. Pas de configuration spéciale au-delà de l'instanciation, pas de graphique à câbler, pas de version d'adaptateur à suivre. La simplicité est le but : si vous vouliez des graphiques, vous seriez sur LangGraph.

INSTALLATION

Installez Agno et le SDK de base. Deux clés.

Il n'y a pas de package blockchain0x Agno à ajouter. Vous installez Agno (Python 3.10+, la ligne 1.0+ après le renommage de Phidata) et le vrai SDK de base blockchain0x, puis écrivez le toolkit ci-dessous. Si vous êtes encore sur les imports phi.*, exécutez d'abord pip install -U agno.

INSTALLER
pip install agno 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 (ou l'équivalent pour le modèle pris en charge par Agno que vous utilisez). 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 Toolkit qui paie, remis à un Agent.

Voici l'intégration complète. WalletTools est une sous-classe de Toolkit qui enregistre send_usdc, qui appelle le véritable client blockchain0x. Ajoutez-le à l'Agent et l'appel run() orchestre l'invocation de l'outil. Agno lit la signature de la méthode et la docstring pour construire le schéma.

AGENT.PY
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools import Toolkit
from blockchain0x import Client

blockchain0x = Client()  # reads BLOCKCHAIN0X_API_KEY from the environment

# Wrap the real client in an Agno Toolkit. No dedicated package needed.
class WalletTools(Toolkit):
    def __init__(self):
        super().__init__(name="wallet_tools")
        self.register(self.send_usdc)

    def send_usdc(self, 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(
    model=OpenAIChat(id="gpt-4o"),
    tools=[WalletTools()],
    instructions=["You pay vendor invoices in USDC within owner-set limits."],
)

result = agent.run("Pay 0.01 USDC from agent agt_123 to 0xVendor for the dataset.")
print(result.content)

When agent.run() executes, the model decides to pay, 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_. Register more methods on the toolkit - read a wallet, settle an invoice - the same way.

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 Agno à 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 méthodes de l'outil.

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 l'outil fonctionne comme vous l'attendez.

PIÈGES COURANTS

Cinq choses spécifiques à Agno à surveiller.

Agno est l'un des cadres d'agent les plus propres à intégrer, mais il a ses propres pièges - en particulier autour du renommage de Phidata et du rendu markdown.

PITFALL 1

Il n'y a pas de package Agno - vous encapsulez le SDK dans un Toolkit

Blockchain0x expédie des adaptateurs pour LangChain et CrewAI ainsi que le serveur MCP ; il n'y a pas de package Agno dédié. La recette ci-dessus est le chemin : une sous-classe Toolkit qui enregistre une méthode appelant le véritable client blockchain0x. Agno lit la signature de la méthode et la docstring pour construire le schéma de l'outil, alors gardez la docstring précise.

PITFALL 2

Confusion sur la migration de Phidata vers Agno

Agno a été renommé de Phidata en 2024. Les anciennes bases de code importées depuis phi.agent ou phi.tools fonctionnent toujours via un adaptateur de compatibilité, mais les imports agno.* sont les actuels. La recette utilise agno.* tout au long ; si votre code est toujours sur les imports phi.*, exécutez pip install -U agno et changez les chemins d'importation avant d'ajouter le Toolkit.

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 (6 decimals), so 0.01 USDC is "10000" and 5 USDC is "5000000". Type the method argument as str. It also does not retry by default and can answer 503 until the chain adapter is wired for your network - return a clear message rather than letting the agent loop.

PITFALL 4

Exécution synchrone vs asynchrone

Agno prend en charge agent.run() (synchronisé) et agent.arun() (asynchrone). Choisissez un mode par agent - appelez agent.run() et essayez d'attendre le résultat et vous obtenez une coroutine où vous vous attendiez à une chaîne. L'appel blockchain0x à l'intérieur du Toolkit est synchrone ; si vous êtes sur le chemin asynchrone et que vous traitez un volume réel, encapsulez-le avec asyncio.to_thread pour que la boucle d'événements reste réactive.

PITFALL 5

Vérifiez les webhooks par rapport au corps brut

Si votre agent reçoit également des USDC, confirmez-le avec le webhook, pas par sondage. Vérifiez la signature sur les octets de la requête RAW (await request.body()), jamais request.json() re-sérialisé, car le HMAC couvre les octets exacts. C'est HMAC-SHA256 avec une fenêtre de répétition de 300 secondes. Le gestionnaire ci-dessous est l'ensemble.

QUESTIONS FRÉQUEMMENT POSÉES

Trois questions spécifiques à Agno.

Y a-t-il un package Agno dédié à installer ?

Non. Agno transforme déjà une méthode Toolkit en un outil, donc le chemin honnête est d'envelopper le véritable client blockchain0x dans une sous-classe Toolkit 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. Agno, comme les autres frameworks sans adaptateur dédié, est cette recette de quelques lignes.

Cela fonctionne-t-il avec Agno Teams (collaboration multi-agent) ?

Oui. Les équipes Agno combinent plusieurs agents en une seule unité coordonnée. L'outil WalletTools fonctionne dans n'importe quel agent qui le liste. Le schéma propre pour les équipes est de donner l'outil de portefeuille à un agent trésorier dédié et de laisser les autres membres travailler, de sorte que l'autorité de dépense reste au même endroit - la même forme que la recette CrewAI. Ajoutez des méthodes de lecture et de règlement à l'outil de la même manière (blockchain0x.transactions.get, blockchain0x.agents.get, blockchain0x.payment_requests.settle).

Cela fonctionne-t-il avec des modèles de raisonnement et AgentUI ?

Oui. Les modèles de raisonnement (o1, DeepSeek R1) appellent les outils de la même manière, juste plus lentement par tour, donc diffusez la réponse partielle si vous voulez que l'utilisateur voie les progrès avant que l'appel ne se termine. Dans AgentUI, l'inspecteur d'exécution d'Agno, l'appel send_usdc apparaît dans le panneau des appels d'outils comme tout autre outil, ce qui est pratique pour regarder un paiement passer sur Base Sepolia pendant le développement.

Facturez le travail de votre agent Agno.

Un petit Toolkit enveloppant le client réel, aucun package à installer. Gratuit pour commencer.