Zum Hauptinhalt springen
PYDANTIC AI-INTEGRATION

Pydantic AI-Zahlungsintegration.

Es gibt kein Pydantic AI-Paket, und Sie benötigen keines. Registrieren Sie eine typisierte Funktion mit @agent.tool_plain, rufen Sie den echten blockchain0x-Client auf, und Ihr Agent kann USDC auf Base bewegen.

KURZE ANTWORT

Es gibt kein Pydantic AI-spezifisches Paket, und Sie brauchen auch keines. Pydantic AI macht mit aus einer Funktion ein validiertes Tool, also kapseln Sie den echten -Python-Client in eine typisierte Funktion und der Agent kann USDC senden, Rechnungen begleichen und Wallets lesen. Das funktioniert mit OpenAI, Anthropic, Google, Mistral, Groq und jedem anderen Pydantic AI-Provider, weil das Tool die HTTP API aufruft und nicht das Modell. Zahlungen werden auf Base abgewickelt.

WARUM GETEILTE ZAHLUNGSWERKZEUGE

Die Typisierung von Pydantic AI gewinnt. Verwenden Sie es auch für Zahlungen.

Der gesamte Punkt von Pydantic AI ist starkes Typing: Agenteneingaben sind typisiert, Ausgaben sind typisiert, Abhängigkeiten sind typisiert, Wiederholungen sind typisiert. Das Framework lehnt fehlerhafte Daten an der Grenze ab, anstatt sie durch den LLM-Aufruf propagieren zu lassen. Ihr Wallet-Tool basiert genau darauf - deklarieren Sie die Argumente mit Typen, und Pydantic AI erstellt ein validiertes Schema aus der Signatur und der Docstring, bevor das Modell jemals erlaubt wird, es aufzurufen.

Der praktische Vorteil: Wenn das Modell versucht, send_usdc mit einem Float anstelle eines Basis-Einheiten-Strings aufzurufen, tritt der Fehler in der Validierungsschicht von Pydantic auf, bevor ein HTTP-Aufruf an uns erfolgt. Sie sehen einen klaren ValidationError mit einer nützlichen Nachricht anstelle eines 422 von der API mit kryptischen Feldpfaden. Das ist der ganze Grund, warum Sie den Client hier selbst umschließen sollten, anstatt einen generischen Adapter zu verwenden - Sie behalten die Typisierung bis zur Übertragung.

INSTALLATION

Installieren Sie Pydantic AI und das Kern-SDK. Zwei Schlüssel.

Es gibt kein blockchain0x Pydantic AI-Paket hinzuzufügen. Sie installieren Pydantic AI (Python 3.10+) und das echte blockchain0x-Kern-SDK und schreiben dann die Funktion unten. Das ist die gesamte Abhängigkeitsliste.

INSTALLIEREN
pip install pydantic-ai blockchain0x
UMGEBUNGSVARIABLEN
export OPENAI_API_KEY=sk-...
export BLOCKCHAIN0X_API_KEY=sk_test_...   # sk_test_ = Base Sepolia, sk_live_ = Base mainnet

OPENAI_API_KEY (oder das Äquivalent für welchen Anbieter Sie verwenden). BLOCKCHAIN0X_API_KEY ist ein sk_test_ Testnet- oder sk_live_ Hauptnetzschlüssel von Ihrem Dashboard; der Client liest ihn aus der Umgebung. Wenn Ihr Agent auch Geld erhält, benötigt der Webhook-Handler zusätzlich BLOCKCHAIN0X_WEBHOOK_SECRET.

DAS REZEPT

Eine typisierte Funktion, die bezahlt, als Tool registriert.

Unten ist die gesamte Integration. send_usdc ruft den echten blockchain0x-Client auf; @agent.tool_plain registriert es mit einem Schema, das aus den Typ-Hinweisen und der Dokumentation erstellt wurde. Führen Sie es aus, und der Agent bewegt USDC auf Base, wobei die Argumente vor dem Aufruf validiert werden.

AGENT.PY
from pydantic_ai import Agent
from blockchain0x import Client

blockchain0x = Client()  # reads BLOCKCHAIN0X_API_KEY from the environment

agent = Agent(
    "openai:gpt-4o",
    system_prompt="You pay vendor invoices in USDC within owner-set limits.",
)

# Register a plain function as a tool. No dedicated package needed.
@agent.tool_plain
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})
    )

result = agent.run_sync(
    "Pay 0.01 USDC from agent agt_123 to 0xVendor for the dataset."
)
print(result.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_. Want a typed result object instead of a string? Set the agent's output_type to your own Pydantic model and return it from the tool. Add read and settle functions the same way.

WEBHOOK-VERARBEITUNG

Bestätigen Sie eingehende Zahlungen mit einem signierten Webhook.

Wenn Ihr Agent auch USDC erhält, bestätigen Sie es mit dem Webhook anstelle von Abfragen. Der Verifizierungshelfer wird im Node SDK bereitgestellt; in einem Python-Dienst überprüfen Sie manuell gegen das dokumentierte HMAC. Wenn Sie typisierte Ereignisse möchten, definieren Sie Ihr eigenes Pydantic-Modell und verwenden Sie model_validate_json den Rohkörper, nachdem die Signatur überprüft wurde - die Typisierung liegt bei Ihnen. Beispiel für FastAPI unten.

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}

Der Algorithmus ist HMAC-SHA256 über den String t.rawBody, ein konstanter Vergleich und ein 300-Sekunden-Wiederholungsfenster. Lesen Sie den Rohkörper über await request.body(), niemals request.json() re-serialisiert, da dies die Bytes ändert, die die Signatur abdeckt. Die gelieferten Ereignisse sind payment.received, payment.sent, wallet.deployed und webhook.test; schränken Sie den X-Blockchain0x-Event-Type-Header ein, um zu verzweigen.

QUELLE UND DOKUMENTE

Der Client, den Sie umwickeln, ist offen. Lesen Sie ihn.

Es gibt kein Pydantic AI-Starterpaket zum Klonen - das obige Rezept ist die Integration. Die blockchain0x SDKs sind Open Source auf GitHub; dieses Rezept umschließt das Python SDK (blockchain0x-python) mit der vollständigen Methodenoberfläche in den Dokumenten. Lesen Sie es als Referenz für die Funktionskörper.

github.com/tosh-labs/blockchain0x-python

Die vollständige SDK-Methodenoberfläche und die Scopes sind in den Dokumenten dokumentiert. Beginnen Sie mit einem sk_test_ Schlüssel gegen Base Sepolia und wechseln Sie zu sk_live_, wenn die Funktion das tut, was Sie erwarten.

HÄUFIGE FALLSTRICK

Fünf Pydantic AI-spezifische Fallen, die zu vermeiden sind.

Die starke Typisierung von Pydantic AI erfasst die meisten Integrationsfehler an der Grenze; dies sind die wenigen, die durchrutschen.

PITFALL 1

Es gibt kein Pydantic AI-Paket - Sie registrieren ein Tool.

Blockchain0x liefert Adapter für LangChain und CrewAI sowie den MCP-Server; es gibt kein dediziertes Pydantic AI-Paket. Das obige Rezept ist der Weg: eine einfache typisierte Funktion, die mit @agent.tool_plain dekoriert ist und den echten blockchain0x-Client aufruft. Pydantic AI liest die Signatur und den Docstring, um ein validiertes Tool-Schema zu erstellen, was genau der Typgewinn ist, den Sie bei Pydantic AI gesucht haben.

PITFALL 2

Halten Sie den Betrag als Zeichenfolge; lassen Sie Pydantic die Linie halten

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 tool argument as str and Pydantic AI rejects a float at the boundary with a clear ValidationError, before any HTTP call. That is the whole point of doing this in Pydantic AI - the malformed value never reaches the API.

PITFALL 3

send_payment kann frühzeitig 503 zurückgeben

payments.create versucht standardmäßig nicht erneut und kann 503 zurückgeben, bis der Chain-Adapter für Ihr Netzwerk konfiguriert ist. Fangen Sie den Fehler innerhalb Ihres Tools ab und geben Sie eine klare Nachricht zurück, auf die das Modell reagieren kann, anstatt den Agenten in einer Schleife laufen zu lassen. Der automatisch generierte Idempotency-Key bedeutet, dass ein manueller Retry nicht doppelt zahlt.

PITFALL 4

Anbieter-präfixierte Modellstrings

Pydantic AI verwendet anbieterpräfixierte Modellstrings: 'openai:gpt-4o', 'anthropic:claude-3-5-sonnet-latest', 'google-gla:gemini-1.5-pro'. Das Weglassen des Präfixes führt zu einem kryptischen 'unbekanntes Modell'-Fehler. Ihr Tool ist anbieterunabhängig, da es die HTTP-API aufruft, nicht das Modell - wechseln Sie den Präfix nach Belieben und die Wallet-Funktion bleibt unverändert.

PITFALL 5

tool_plain vs tool (RunContext)

Verwenden Sie @agent.tool_plain, wenn die Funktion nichts vom Lauf benötigt, wie oben. Wenn Sie die Abhängigkeiten des Agenten innerhalb des Tools (eine client id pro Anfrage, ein Ausgabenlimit) haben möchten, verwenden Sie @agent.tool und deklarieren Sie das erste Argument als ctx: RunContext[Deps], um ctx.deps zu lesen. Das Mischen der beiden - das Deklarieren eines ctx-Arguments bei tool_plain - führt bei der Registrierung zu einem TypeError.

HÄUFIG GESTELLTE FRAGEN

Drei Pydantic AI-spezifische Fragen.

Gibt es ein spezielles Pydantic AI-Paket zu installieren?

Nein. Pydantic AI verwandelt bereits eine Funktion in ein validiertes Werkzeug mit @agent.tool_plain (oder @agent.tool für kontextbewusste Werkzeuge), daher ist der ehrliche Weg, den echten blockchain0x-Client selbst zu wickeln, wie oben gezeigt. Die einzigen ausgelieferten Framework-Pakete sind blockchain0x-langchain und blockchain0x-crewai (beide Python) sowie der @blockchain0x/mcp-Server. Pydantic AI, wie die anderen Frameworks ohne einen speziellen Adapter, ist dieses wenige Zeilen umfassende Rezept.

Funktioniert das über LLM-Anbieter hinweg (OpenAI, Anthropic, Google)?

Ja. Das Tool ist anbieterunabhängig - es ruft die Blockchain0x HTTP API auf, nicht eine spezifische Oberfläche für LLMs. Solange Pydantic AI den Anbieter unterstützt (OpenAI, Anthropic, Google GLA, Google VertexAI, Groq, Cohere, Mistral, Bedrock), funktioniert dieselbe Funktion. Tauschen Sie einfach den Modellstring im Agentenkonstruktor aus: 'anthropic:claude-3-5-sonnet-latest' anstelle von 'openai:gpt-4o'.

Wie füge ich typisierte Eingaben hinzu oder lese und begleiche ich sowie sende?

Für strengere Eingaben nehmen Sie ein Pydantic-Modell als Tool-Argument und Pydantic AI validiert es für Sie - eingeschränkte Dezimalzahlen, Adressmuster, was auch immer Sie benötigen. Um zu lesen und abzurechnen, registrieren Sie weitere Funktionen auf die gleiche Weise: blockchain0x.transactions.get liest eine Transaktion, blockchain0x.agents.get und blockchain0x.agents.list lesen Wallets, und blockchain0x.payment_requests.settle begleicht eine Rechnung, die Sie im Dashboard mit On-Chain-Beweis erstellt haben. Eingehende Zahlungen bestätigen über den untenstehenden payment.received Webhook.

Fügen Sie typisierte Zahlungen zu Ihrem Agenten hinzu.

Einige typisierte Zeilen, die den echten Client umschließen, kein Paket zu installieren. Kostenlos starten.