Ana içeriğe atla
LLAMAINDEX ENTEGRASYONU

LlamaIndex ödeme entegrasyonu.

LlamaIndex paketi yoktur ve buna ihtiyacınız yoktur. Gerçek blockchain0x istemcisini bir FunctionTool içinde sarın ve ajansınız Base üzerinde USDC taşıyabilir ve ücretli bir RAG sorgusunu geçebilir.

KISA CEVAP

LlamaIndex'e özel bir paket yok ve buna ihtiyacınız da yok. LlamaIndex, ile düz bir fonksiyonu bir araca dönüştürür, bu yüzden gerçek Python istemcisini bir fonksiyon içinde sarar ve bir ya da 'ye eklersiniz. Agent USDC gönderebilir, faturaları kapatabilir ve cüzdanları okuyabilir. RAG sorgusu başına ücret almak için kendi QueryEngineTool'unuzu da aynı şekilde kapılayın. Ödemeler Base üzerinde sonuçlanır.

NEDEN LLAMAINDEX ÜCRETLİ RAG İÇİN UYGUN

RAG sorguları pahalıdır. Sorgu başına ücret almak ekonomiyi çalıştırır.

LlamaIndex'in gücü, alım artırımlı üretimdir: sahipli belgeler (şirketinizin belgeleri, bir araştırma veri seti, bir hukuki metin) üzerinde bir vektör indeksi vardır ve ajan, ilgili parçaları alıp özetleyerek yanıt verir. Her sorgu, gömme, LLM tokenleri ve genellikle üçüncü taraf API çağrıları ile gerçek paraya mal olur. Ücretsiz sınırsız erişim bütçeyi yakar; sorgu başına faturalama maliyet yapısına uyar.

Bunun için gönderilmiş bir yardımcı yoktur ve buna ihtiyacınız yoktur. Bunu kendiniz kapatın: QueryEngineTool işlevinizin içinde, arayanın ödeme yapıp yapmadığını kontrol edin (ödemeyi webhook ile değiştirdiğiniz kendi bayrağınız) ve ya geri alımı çalıştırın ya da bir fiyat döndürün. Cüzdan işlevi ve geçiş, gerçek blockchain0x istemcisinin üzerinde birkaç satırdır, bu da politikayı - sorgu başına, oturum başına, ücretsiz katman ardından ücretli - tamamen sizin elinizde tutar.

KURULUM

LlamaIndex'i ve çekirdek SDK'yı kurun. Bir ortam değişkeni.

Ekleyecek bir blockchain0x LlamaIndex paketi yoktur. LlamaIndex'i (Python 3.10+, modern FunctionAgent / ReActAgent / Workflows API'leri) ve gerçek blockchain0x çekirdek SDK'sını kurarsınız, ardından aşağıdaki işlevi yazarsınız. Herhangi bir vektör deposu ile birlikte çalışır - Pinecone, Qdrant, Chroma, Weaviate, LlamaIndex Cloud.

KUR
pip install llama-index blockchain0x
ORTAM DEĞİŞKENİ
export BLOCKCHAIN0X_API_KEY=sk_test_...   # sk_test_ = Base Sepolia, sk_live_ = Base mainnet

BLOCKCHAIN0X_API_KEY, dashboard'unuzdan alınan bir sk_test_ testnet veya sk_live_ mainnet anahtarıdır; client bunu ortamdan okur. Ödemeli sorguları sınırlandırıyorsanız, webhook handler ayrıca BLOCKCHAIN0X_WEBHOOK_SECRET gerektirir; bu değer, bir webhook oluşturduğunuzda veya rotate ettiğinizde dashboard tarafından bir kez döndürülür.

TARİF

Ödeme yapan bir işlev, FunctionTool olarak sarıldı.

Aşağıda, tüm entegrasyon bulunmaktadır. send_usdc, gerçek blockchain0x istemcisini çağırır; FunctionTool.from_defaults bunu sarar ve FunctionAgent bunu çağrılabilir bir araç olarak alır. LlamaIndex, şemayı oluşturmak için tür ipuçlarını ve dokümantasyonu okur. Kendi QueryEngineTool'unuzu listeye ekleyin ve aynı ajan RAG sorgularını da yanıtlayabilir.

AJAN.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 İŞLEME

Webhook geldiğinde ödenmiş bayrağını değiştirin.

Bir ödeme yerleştiğinde, Blockchain0x imzalı bir payment.received olayını webhook URL'nize POST eder. Doğrulama yardımcı programı Node SDK'da bulunur; bir Python servisinde belgelenmiş HMAC'a karşı elle doğrularsınız. Arayanı kendi mağazanızda ödenmiş olarak işaretleyin ve kapalı sorgu aracınız bir sonraki çağrıyı geçmesine izin verir. Aşağıdaki FastAPI örneği.

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}

Algoritma, t.rawBody dizesi üzerinde HMAC-SHA256, sabit zamanlı karşılaştırma ve 300 saniyelik bir tekrar penceresi ile çalışır. Ham veriyi await request.body() aracılığıyla okuyun, asla request.json() ile yeniden serileştirmeyin, çünkü bu imzanın kapsadığı baytları değiştirir. Gönderilen olaylar payment.received, payment.sent, wallet.deployed ve webhook.test'tir. Yoğun takip çalışmaları için bir iş kuyruğa alın (Celery, arq) ve yöneticiyi engellemek yerine hemen 200 yanıtı verin.

KAYNAK VE BELGELER

Sarmaladığınız istemci açıktır. Okuyun.

Klonlanacak bir LlamaIndex starter package yok - yukarıdaki recipe entegrasyonun kendisidir. blockchain0x SDK'leri GitHub'da open source'dur; bu recipe Python SDK'yı (blockchain0x-python) sarar ve tam method surface dokümanlarda yer alır. Function body'leri için bir referans olarak okuyun.

github.com/tosh-labs/blockchain0x-python

Tam SDK method surface ve scope'lar the docs içinde belgelenmiştir. Base Sepolia üzerinde bir sk_test_ anahtarıyla başlayın, ardından function beklediğiniz gibi çalıştığında sk_live_ anahtarına geçin.

YAYGIN TUZAKLAR

Beş LlamaIndex'e özgü kaçınılması gereken tuzak.

Bunlar destek gelen kutumuzdan gelmektedir. Her biri, hakkında bilgi sahibi olduğunuzda en az bir saatlik hata ayıklama tasarrufu sağlar.

PITFALL 1

LlamaIndex paketi yoktur - SDK'yı sararsınız.

Blockchain0x, LangChain ve CrewAI için adaptörler ve MCP sunucusu gönderir; özel bir LlamaIndex paketi yoktur. Yukarıdaki tarif, gerçek blockchain0x istemcisini çağıran, FunctionTool.from_defaults ile sarılmış basit bir tipli işlevdir. LlamaIndex, şemayı oluşturmak için imzayı ve belge dizesini okur, bu nedenle belge dizesini doğru tutun.

PITFALL 2

Bir QueryEngineTool'ü kendiniz kapatın - hiçbir yardımcı bunu yapmaz

Ücretli-RAG deseni gerçektir ve iyidir, ancak paid_query_engine_tool yardımcı programı yoktur. Bunu siz inşa edersiniz: sorgu aracınızdaki işlevde, arayanın ödeme yapıp yapmadığını kontrol edin (aşağıdaki webhook ile güncellenen kendi mağazanız) ve yalnızca ödeme yaptıysa geri alımı çalıştırın, aksi takdirde bir fiyat döndürün. Bu birkaç satırdır ve geçiş politikasını kontrol altında tutarsınız.

PITFALL 3

Tutarlar, dize olarak USDC temel birimleridir

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 asynctir; SDK çağrısı senkronizedir

LlamaIndex ajanları asenkron önceliklidir - await agent.run(...). Araç içindeki blockchain0x istemci çağrısı senkronizedir, bu tek bir hızlı ödeme için uygundur ancak yük altında döngüyü engeller. Birçok eşzamanlı sorgu sunuyorsanız, SDK çağrısını asyncio.to_thread ile sarın, böylece olay döngüsü yanıt vermeye devam eder.

PITFALL 5

send_payment, erken bir 503 dönebilir.

payments.create varsayılan olarak yeniden deneme yapmaz ve chain adapter ağınız için bağlanana kadar 503 döndürebilir. Ajanın döngüye girmesine izin vermek yerine hatayı araç fonksiyonunuz içinde yakalayın ve modelin işlem yapabileceği net bir mesaj döndürün. Otomatik oluşturulan idempotency key sayesinde manuel yeniden deneme çift ödeme oluşturmaz.

SIKÇA SORULAN

Üç LlamaIndex'e özgü soru.

Kurulacak özel bir LlamaIndex paketi var mı?

Hayır. LlamaIndex zaten düz bir işlevi FunctionTool.from_defaults ile bir araca dönüştürüyor, bu nedenle dürüst yol, yukarıda gösterildiği gibi gerçek blockchain0x istemcisini kendiniz sarmaktır. Gönderilen tek çerçeve paketleri blockchain0x-langchain ve blockchain0x-crewai'dir (her ikisi de Python) ve @blockchain0x/mcp sunucusudur. LlamaIndex, özel bir adaptörü olmayan diğer çerçeveler gibi, bu birkaç satırlık tarif.

RAG sorgusu başına (ücretli QueryEngine modeli) nasıl ücret alırım?

Kendiniz inşa edin - bunun için gönderilmiş bir yardımcı yoktur ve sadece birkaç satırdır. QueryEngineTool'ünüzün işlevini sarın, böylece önce arayanın ödeme yapıp yapmadığını kontrol eder (aşağıdaki webhook'un payment.received üzerinde değiştirdiği kendi depomuzda bir bayrak) ve ya geri almayı çalıştırır ya da bir fiyat zorluğu döner. Bu, engelleme politikasını elinizde tutar: sorgu başına, oturum başına, ücretsiz katman sonra ücretli, ne uygunsa.

Tarif LlamaIndex İş Akışları ile de çalışıyor mu?

Evet. Ödeme mantığı düz bir function'dır, bu yüzden onu belirli bir agent primitive'ine bağlayan hiçbir şey yoktur. Bunu bir ReActAgent'den, FunctionAgent'den veya LlamaIndex Workflow içindeki bir adımdan çağırabilirsiniz. Bir Workflow içinde doğal yapı, bir adımın içinde send_usdc'yi (veya gated query'nizi) çağırmak ve sonucu sonraki adımın tükettiği bir event olarak yaymaktır. Inbound ödemeler aşağıdaki payment.received webhook'u ile doğrulanır.

RAG yanıtlarınız için ücret alın.

Gerçek client'ı bir FunctionTool içine sarın, sorgunuzu da aynı şekilde gate edin. Başlamak ücretsiz.