Zum Hauptinhalt springen
LLAMAINDEX-INTEGRATION

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.

KURZE ANTWORT

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.

WARUM LLAMAINDEX ZU PAID RAG PASST

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.

INSTALLATION

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.

INSTALLIEREN
pip install llama-index blockchain0x
UMGEBUNGSVARIABLE
export 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.

DAS REZEPT

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.

AGENT.PY
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.

WEBHOOK-VERARBEITUNG

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

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

QUELLE UND DOKUMENTE

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

PITFALL 1

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.

PITFALL 2

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.

PITFALL 3

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.

PITFALL 4

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.

PITFALL 5

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.

HÄUFIG GESTELLTE FRAGEN

Drei LlamaIndex-spezifische Fragen.

Gibt es ein spezielles LlamaIndex-Paket zu installieren?

Nein. LlamaIndex verwandelt bereits eine einfache Funktion in ein Werkzeug mit FunctionTool.from_defaults, 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. LlamaIndex, wie die anderen Frameworks ohne einen speziellen Adapter, ist dieses wenige Zeilen umfassende Rezept.

Wie berechne ich pro RAG-Abfrage (das bezahlte QueryEngine-Muster)?

Bauen Sie es selbst - es gibt keinen gelieferten Helfer dafür, und es sind nur ein paar Zeilen. Wickeln Sie die Funktion Ihres QueryEngineTools so ein, dass sie zuerst überprüft, ob der Anrufer bezahlt hat (ein Flag in Ihrem eigenen Speicher, das der WebHook unten bei payment.received umschaltet) und entweder die Abfrage ausführt oder eine Preisherausforderung zurückgibt. Das hält die Zugangspolitik in Ihren Händen: pro Abfrage, pro Sitzung, kostenloses Kontingent und dann bezahlt, was auch immer passt.

Funktioniert das Rezept auch mit LlamaIndex Workflows?

Ja. Die Zahlungslogik ist eine einfache Funktion, sodass nichts sie an einen bestimmten Agenten-Primitiv bindet. Rufen Sie sie von einem ReActAgent, einem FunctionAgent oder einem Schritt in einem LlamaIndex-Workflow auf. In einem Workflow ist eine natürliche Form, send_usdc (oder Ihre gated query) innerhalb eines Schrittes aufzurufen und das Ergebnis als Ereignis auszugeben, das der nächste Schritt konsumiert. Eingehende Zahlungen bestätigen sich über den untenstehenden payment.received Webhook.

Berechnen Sie Ihre RAG-Antworten.

Umhüllen Sie den echten Client in einem FunctionTool, sperren Sie Ihre Abfrage auf die gleiche Weise. Kostenlos starten.