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.
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.
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.
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.
pip install llama-index blockchain0xexport 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.
Ö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.
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 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.
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.
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-pythonTam 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.
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.
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.
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.
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.
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.
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.