LlamaIndex-Zahlungsintegration.
Es gibt kein LlamaIndex-Paket, und Sie benötigen keines. Wickeln Sie den echten blockchain0x-Client in ein FunctionTool ein, und Ihr Agent kann USDC bewegen und eine kostenpflichtige RAG-Abfrage auf Base steuern.
Es gibt kein LlamaIndex-spezifisches Paket, und Sie brauchen auch keines. LlamaIndex macht mit aus einer einfachen Funktion ein Tool, also kapseln Sie den echten -Python-Client in eine Funktion und fügen ihn einem oder hinzu. Der Agent kann USDC senden, Rechnungen begleichen und Wallets lesen. Um pro RAG-Query abzurechnen, schützen Sie Ihr eigenes QueryEngineTool auf dieselbe Weise. Zahlungen werden auf Base abgewickelt.
RAG-Abfragen sind teuer. Die Abrechnung pro Abfrage macht die Wirtschaftlichkeit möglich.
Die Stärke von LlamaIndex ist die retrieval-augmented generation: Sie haben einen Vektorindex über proprietäre Dokumente (die Dokumente Ihres Unternehmens, einen Forschungsdatensatz, ein juristisches Korpus), und der Agent antwortet, indem er die relevanten Abschnitte abruft und zusammenfasst. Jede Abfrage kostet echtes Geld in Embeddings, LLM-Token und oft API-Aufrufen von Drittanbietern. Kostenloser unbegrenzter Zugang verbraucht Budget; die Abrechnung pro Abfrage passt zur Kostenstruktur.
Es gibt keinen gelieferten Helfer dafür, und Sie benötigen keinen. Sie steuern es selbst: Überprüfen Sie in der Funktion Ihres QueryEngineTool, ob der Anrufer bezahlt hat (Ihr eigenes Flag, das durch das Zahlungs-Webhook umgeschaltet wurde), und führen Sie entweder die Abfrage aus oder geben Sie einen Preis zurück. Die Wallet-Funktion und die Steuerung sind beide nur ein paar Zeilen über dem echten blockchain0x-Client, der die Richtlinie - pro Abfrage, pro Sitzung, kostenlos und dann bezahlt - vollständig in Ihren Händen hält.
Installieren Sie LlamaIndex und das Kern-SDK. Eine Umgebungsvariable.
Es gibt kein blockchain0x LlamaIndex-Paket hinzuzufügen. Sie installieren LlamaIndex (Python 3.10+, die modernen FunctionAgent / ReActAgent / Workflows-APIs) und das echte blockchain0x-Kern-SDK und schreiben dann die Funktion unten. Funktioniert neben jedem Vektor-Store - Pinecone, Qdrant, Chroma, Weaviate, LlamaIndex Cloud.
pip install llama-index blockchain0xexport BLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
BLOCKCHAIN0X_API_KEY ist ein sk_test_ Testnet- oder sk_live_ Mainnet-Schlüssel von Ihrem Dashboard; der Client liest ihn aus der Umgebung. Wenn Sie kostenpflichtige Abfragen einschränken, benötigt der Webhook-Handler zusätzlich BLOCKCHAIN0X_WEBHOOK_SECRET, das das Dashboard einmal zurückgibt, wenn Sie einen Webhook erstellen oder rotieren.
Eine Funktion, die bezahlt, als FunctionTool verpackt.
Unten ist die gesamte Integration. send_usdc ruft den echten blockchain0x-Client auf; FunctionTool.from_defaults wickelt es ein, und FunctionAgent nimmt es als aufrufbares Tool auf. LlamaIndex liest die Typ-Hinweise und die Dokumentation, um das Schema zu erstellen. Fügen Sie Ihre eigene QueryEngineTool zur Liste hinzu, und derselbe Agent kann auch RAG-Anfragen beantworten.
from llama_index.core.tools import FunctionTool from llama_index.core.agent.workflow import FunctionAgent from llama_index.llms.openai import OpenAI from blockchain0x import Client blockchain0x = Client() # reads BLOCKCHAIN0X_API_KEY from the environment 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}) ) # Wrap the plain function as a LlamaIndex tool. No dedicated package needed. pay_tool = FunctionTool.from_defaults(fn=send_usdc) agent = FunctionAgent( tools=[pay_tool], # plus your own QueryEngineTool over a RAG index llm=OpenAI(model="gpt-4o"), system_prompt="You pay vendor invoices in USDC within owner-set limits.", ) response = await agent.run( "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_. To charge for a query instead, put the same paid check at the top of your QueryEngineTool's function.
Ändern Sie das bezahlte Flag, wenn der Webhook ankommt.
Wenn eine Zahlung abgeschlossen ist, POSTet Blockchain0x ein signiertes payment.received-Ereignis an Ihre Webhook-URL. Der Verify-Helfer wird im Node SDK geliefert; in einem Python-Dienst überprüfen Sie manuell gegen das dokumentierte HMAC. Markieren Sie den Anrufer als bezahlt in Ihrem eigenen Store, und Ihr gesperrtes Abfragetool lässt den nächsten Anruf durch. FastAPI-Beispiel unten.
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 - serve the paid query 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. Für umfangreiche Nacharbeiten stellen Sie einen Job (Celery, arq) ein und antworten Sie sofort mit 200, anstatt den Handler zu blockieren.
Der Client, den Sie umwickeln, ist offen. Lesen Sie ihn.
Es gibt kein LlamaIndex-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-pythonDie 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.
Fünf LlamaIndex-spezifische Fallen, die zu vermeiden sind.
Diese stammen aus unserem Support-Posteingang. Jede spart mindestens eine Stunde Debugging, sobald Sie darüber Bescheid wissen.
Es gibt kein LlamaIndex-Paket - Sie wickeln das SDK ein.
Blockchain0x liefert Adapter für LangChain und CrewAI sowie den MCP-Server; es gibt kein dediziertes LlamaIndex-Paket. Das obige Rezept ist der Weg: eine einfache typisierte Funktion, die den echten blockchain0x-Client aufruft, umhüllt mit FunctionTool.from_defaults. LlamaIndex liest die Signatur und den Docstring, um das Schema zu erstellen, also halten Sie den Docstring genau.
Gate ein QueryEngineTool selbst - kein Helfer macht es
Das bezahlte-RAG-Muster ist real und gut, aber es gibt keinen paid_query_engine_tool-Helfer. Sie bauen es: In der Funktion Ihres Abfragewerkzeugs überprüfen Sie, ob der Anrufer bezahlt hat (Ihr eigener Speicher, aktualisiert durch den untenstehenden Webhook) und führen die Abfrage nur aus, wenn dies der Fall ist, andernfalls geben Sie einen Preis zurück. Es sind nur ein paar Zeilen, und Sie behalten die Kontrolle über die Zugangsrichtlinie.
Beträge sind USDC-Basiseinheiten, als Strings
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 tool argument as str. LlamaIndex passes tool args through pydantic, which will happily coerce a float and lose precision, so keep it a string end to end.
FunctionAgent.run ist asynchron; der SDK-Aufruf ist synchron
LlamaIndex-Agenten sind asynchron - await agent.run(...). Der blockchain0x-Clientaufruf innerhalb Ihres Tools ist synchron, was für eine einzelne schnelle Zahlung in Ordnung ist, aber die Schleife unter Last blockiert. Wenn Sie viele gleichzeitige Abfragen bedienen, wickeln Sie den SDK-Aufruf mit asyncio.to_thread ein, damit die Ereignisschleife reaktionsfähig bleibt.
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 Ihrer Tool-Funktion 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.