मुख्य सामग्री पर जाएं
LLAMAINDEX एकीकरण

LlamaIndex भुगतान एकीकरण।

कोई LlamaIndex पैकेज नहीं है, और आपको इसकी आवश्यकता नहीं है। असली blockchain0x क्लाइंट को एक FunctionTool में लपेटें और आपका एजेंट USDC को स्थानांतरित कर सकता है और Base पर एक भुगतान किए गए RAG क्वेरी को गेट कर सकता है।

संक्षिप्त उत्तर

कोई LlamaIndex-specific package नहीं है, और आपको इसकी आवश्यकता नहीं है। LlamaIndex एक plain function को के साथ tool में बदल देता है, इसलिए आप वास्तविक Python client को एक function में wrap करके उसे या में जोड़ते हैं। agent USDC भेज सकता है, invoices settle कर सकता है, और wallets पढ़ सकता है। प्रति RAG query charge करने के लिए, अपने QueryEngineTool को भी उसी तरह gate करें। Payments Base पर settle होते हैं।

LLAMAINDEX PAID RAG में क्यों फिट होता है

RAG प्रश्न महंगे होते हैं। प्रति प्रश्न शुल्क लेना अर्थशास्त्र को काम करता है।

LlamaIndex की ताकत पुनर्प्राप्ति-augmented पीढ़ी है: आपके पास स्वामित्व दस्तावेजों (आपकी कंपनी के दस्तावेज, एक शोध डेटासेट, एक कानूनी कॉर्पस) पर एक वेक्टर इंडेक्स है, और एजेंट प्रासंगिक टुकड़ों को पुनर्प्राप्त करके और संक्षेप में उत्तर देता है। प्रत्येक क्वेरी एम्बेडिंग, LLM टोकन, और अक्सर तीसरे पक्ष के API कॉल में वास्तविक पैसे की लागत होती है। मुफ्त असीमित पहुँच बजट को जलाती है; प्रति-क्वेरी बिलिंग लागत के आकार में फिट होती है।

इसके लिए कोई भेजा गया सहायक नहीं है, और आपको इसकी आवश्यकता नहीं है। आप इसे स्वयं गेट करते हैं: अपने QueryEngineTool के फ़ंक्शन के अंदर, जांचें कि क्या कॉलर ने भुगतान किया है (आपका अपना ध्वज, जो भुगतान वेबहुक द्वारा पलटा गया है) और या तो पुनर्प्राप्ति चलाएँ या एक मूल्य लौटाएँ। वॉलेट फ़ंक्शन और गेटिंग दोनों असली blockchain0x क्लाइंट के ऊपर कुछ पंक्तियाँ हैं, जो नीति को पूरी तरह से आपके हाथों में रखती है - प्रति क्वेरी, प्रति सत्र, मुफ्त स्तर फिर भुगतान किया गया।

स्थापना

LlamaIndex और कोर SDK इंस्टॉल करें। एक वातावरण चर।

कोई blockchain0x LlamaIndex पैकेज जोड़ने के लिए नहीं है। आप LlamaIndex (Python 3.10+, आधुनिक FunctionAgent / ReActAgent / Workflows APIs) और असली blockchain0x कोर SDK स्थापित करते हैं, फिर नीचे दी गई फ़ंक्शन लिखते हैं। यह किसी भी वेक्टर स्टोर के साथ काम करता है - Pinecone, Qdrant, Chroma, Weaviate, LlamaIndex Cloud।

स्थापित करें
pip install llama-index blockchain0x
पर्यावरण चर
export BLOCKCHAIN0X_API_KEY=sk_test_...   # sk_test_ = Base Sepolia, sk_live_ = Base mainnet

BLOCKCHAIN0X_API_KEY आपके dashboard से एक sk_test_ testnet या sk_live_ mainnet key है; client इसे environment से पढ़ता है. अगर आप paid queries को gate करते हैं, तो webhook handler को अतिरिक्त रूप से BLOCKCHAIN0X_WEBHOOK_SECRET चाहिए, जिसे dashboard webhook create या rotate करने पर एक बार देता है.

विधि

एक फ़ंक्शन जो भुगतान करता है, एक FunctionTool के रूप में लपेटा गया।

नीचे पूरी एकीकरण है। send_usdc वास्तविक blockchain0x क्लाइंट को कॉल करता है; FunctionTool.from_defaults इसे लपेटता है, और FunctionAgent इसे एक कॉल करने योग्य टूल के रूप में उठाता है। LlamaIndex प्रकार संकेत और डॉकस्ट्रिंग को स्कीमा बनाने के लिए पढ़ता है। अपनी खुद की QueryEngineTool को सूची में जोड़ें और वही एजेंट RAG प्रश्नों का उत्तर भी दे सकता है।

एजेंट.पीवाई
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.

वेबहुक हैंडलिंग

जब वेबहुक आता है तो भुगतान ध्वज पलटें।

जब एक भुगतान निपटता है, तो Blockchain0x आपके वेबहुक URL पर एक साइन किया हुआ payment.received इवेंट POST करता है। सत्यापन सहायक Node SDK में भेजा जाता है; एक Python सेवा में आप दस्तावेजित HMAC के खिलाफ हाथ से सत्यापित करते हैं। अपने स्टोर में कॉलर को भुगतान किया हुआ चिह्नित करें, और आपका गेटेड क्वेरी टूल अगली कॉल को पास करने देता है। नीचे FastAPI उदाहरण।

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}

एल्गोरिदम t.rawBody पर HMAC-SHA256 है, एक स्थायी-समय तुलना, और एक 300-सेकंड पुनःप्रसारण विंडो। कच्चे शरीर को await request.body() के माध्यम से पढ़ें, कभी भी request.json() को फिर से serialize न करें, क्योंकि यह सिग्नेचर द्वारा कवर किए गए बाइट्स को बदलता है। शिप किए गए इवेंट्स हैं payment.received, payment.sent, wallet.deployed, और webhook.test। भारी फॉलो-अप कार्य के लिए, एक कार्य (Celery, arq) को कतार में डालें और हैंडलर को अवरुद्ध करने के बजाय तुरंत 200 का उत्तर दें।

सोर्स और डॉक्स

आप जिस क्लाइंट को लपेट रहे हैं वह खुला है। इसे पढ़ें।

clone करने के लिए कोई LlamaIndex starter package नहीं है - ऊपर दिया गया recipe ही integration है। blockchain0x SDKs GitHub पर open source हैं; यह recipe Python SDK (blockchain0x-python) को wrap करता है, और पूरा method surface docs में है। function bodies के reference के लिए इसे पढ़ें।

github.com/tosh-labs/blockchain0x-python

पूरी SDK method surface और scopes the docs पर documented हैं. Base Sepolia के against एक sk_test_ key से शुरुआत करें, फिर जब function अपेक्षा के अनुसार काम करे तो sk_live_ पर switch करें.

सामान्य pitfalls

पांच LlamaIndex-विशिष्ट जाल से बचें।

ये हमारे समर्थन इनबॉक्स से आते हैं। प्रत्येक एक बार जब आप इसके बारे में जानते हैं तो कम से कम एक घंटे की डिबगिंग बचाता है।

PITFALL 1

कोई LlamaIndex पैकेज नहीं है - आप SDK को लपेटते हैं

Blockchain0x LangChain और CrewAI के लिए एडाप्टर और MCP सर्वर भेजता है; कोई समर्पित LlamaIndex पैकेज नहीं है। ऊपर दिया गया नुस्खा यह है: एक साधारण प्रकारित फ़ंक्शन जो असली blockchain0x क्लाइंट को कॉल करता है, जिसे FunctionTool.from_defaults के साथ लपेटा गया है। LlamaIndex हस्ताक्षर और docstring को पढ़ता है ताकि स्कीमा बनाया जा सके, इसलिए docstring को सटीक रखें।

PITFALL 2

QueryEngineTool को स्वयं गेट करें - कोई सहायक ऐसा नहीं करता है

भुगतान-RAG पैटर्न वास्तविक और अच्छा है, लेकिन कोई paid_query_engine_tool सहायक नहीं है। आप इसे बनाते हैं: अपने क्वेरी उपकरण के फ़ंक्शन में, जांचें कि क्या कॉलर ने भुगतान किया है (आपकी अपनी दुकान, नीचे दिए गए वेबहुक द्वारा अपडेट की गई) और केवल तभी पुनर्प्राप्ति चलाएँ जब उन्होंने किया हो, अन्यथा एक मूल्य लौटाएँ। यह कुछ पंक्तियाँ हैं, और आप गेटिंग नीति पर नियंत्रण बनाए रखते हैं।

PITFALL 3

राशियाँ USDC आधार इकाइयाँ हैं, स्ट्रिंग के रूप में

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 असिंक्रोनस है; SDK कॉल सिंक्रोनस है

LlamaIndex एजेंट असिंक्रोनस-प्रथम हैं - await agent.run(...). आपके टूल के अंदर blockchain0x क्लाइंट कॉल सिंक्रोनस है, जो एक त्वरित भुगतान के लिए ठीक है लेकिन लोड के तहत लूप को अवरुद्ध करता है। यदि आप कई समवर्ती क्वेरीज़ की सेवा कर रहे हैं, तो SDK कॉल को asyncio.to_thread के साथ लपेटें ताकि इवेंट लूप उत्तरदायी बना रहे।

PITFALL 5

send_payment प्रारंभ में 503 का उत्तर दे सकता है।

payments.create डिफ़ॉल्ट रूप से पुनः प्रयास नहीं करता है और आपके नेटवर्क के लिए चेन एडेप्टर के कनेक्ट होने तक 503 वापस कर सकता है। अपने उपकरण फ़ंक्शन के अंदर त्रुटि को पकड़ें और एक स्पष्ट संदेश लौटाएं जिस पर मॉडल कार्य कर सके, बजाय इसके कि एजेंट लूप करने दें। स्वचालित रूप से निर्मित idempotency कुंजी का अर्थ है कि एक मैनुअल पुनः प्रयास डबल-पेमेंट नहीं करेगा।

अक्सर पूछे जाने वाले

तीन LlamaIndex-विशिष्ट प्रश्न।

क्या इंस्टॉल करने के लिए कोई समर्पित LlamaIndex पैकेज है?

नहीं। LlamaIndex पहले से ही एक साधारण फ़ंक्शन को FunctionTool.from_defaults के साथ एक टूल में बदलता है, इसलिए ईमानदार रास्ता यह है कि आप वास्तविक blockchain0x क्लाइंट को स्वयं लपेटें, जैसा कि ऊपर दिखाया गया है। केवल शिप किए गए ढांचे के पैकेज blockchain0x-langchain और blockchain0x-crewai (दोनों Python) और @blockchain0x/mcp सर्वर हैं। LlamaIndex, अन्य ढांचों की तरह जिनका कोई समर्पित एडाप्टर नहीं है, यह कुछ पंक्तियों का नुस्खा है।

मैं प्रति RAG क्वेरी (भुगतान किए गए QueryEngine पैटर्न) कैसे शुल्क लूं?

इसे स्वयं बनाएं - इसके लिए कोई भेजा गया सहायक नहीं है, और यह केवल कुछ पंक्तियाँ हैं। अपने QueryEngineTool के फ़ंक्शन को लपेटें ताकि यह पहले जांचे कि क्या कॉलर ने भुगतान किया है (आपकी अपनी स्टोर में एक ध्वज जो नीचे दिए गए वेबहुक को payment.received पर पलटता है) और या तो पुनर्प्राप्ति चलाता है या एक मूल्य चुनौती लौटाता है। यह आपके हाथ में गेटिंग नीति को रखता है: प्रति प्रश्न, प्रति सत्र, मुफ्त स्तर फिर भुगतान किया गया, जो भी फिट हो।

क्या नुस्खा LlamaIndex वर्कफ़्लोज़ के साथ भी काम करता है?

हाँ। भुगतान लॉजिक एक सामान्य फ़ंक्शन है, इसलिए कुछ भी इसे किसी विशेष एजेंट प्राइमिटिव से नहीं जोड़ता। इसे ReActAgent, FunctionAgent, या LlamaIndex वर्कफ़्लो में एक चरण से कॉल करें। एक वर्कफ़्लो में, एक स्वाभाविक आकार यह है कि send_usdc (या आपकी गेटेड क्वेरी) को एक चरण के अंदर कॉल करें और परिणाम को एक घटना के रूप में उत्सर्जित करें जिसे अगला चरण उपभोग करता है। इनबाउंड भुगतान नीचे दिए गए payment.received वेबहुक के माध्यम से पुष्टि करते हैं।

अपने RAG प्रतिक्रियाओं के लिए शुल्क लें।

वास्तविक क्लाइंट को एक FunctionTool में लपेटें, अपनी क्वेरी को उसी तरह गेट करें। शुरू करने के लिए स्वतंत्र।