LlamaIndex ಪಾವತಿ ಒಕ್ಕೂಟ.
LlamaIndex ಪ್ಯಾಕೇಜ್ ಇಲ್ಲ, ಮತ್ತು ನಿಮಗೆ ಒಂದು ಅಗತ್ಯವಿಲ್ಲ. ವಾಸ್ತವ blockchain0x ಕ್ಲೈಂಟ್ ಅನ್ನು FunctionTool ನಲ್ಲಿ ಲುಪ್ತಗೊಳಿಸಿ ಮತ್ತು ನಿಮ್ಮ ಏಜೆಂಟ್ USDC ಅನ್ನು ಚಲಾಯಿಸಬಹುದು ಮತ್ತು Base ನಲ್ಲಿ ಪಾವತಿತ RAG ಪ್ರಶ್ನೆಯನ್ನು ಗೇಟ್ ಮಾಡಬಹುದು.
LlamaIndex-specific package ಇಲ್ಲ, ಮತ್ತು ನಿಮಗೆ ಅದು ಬೇಕಾಗಿಲ್ಲ. LlamaIndex ಒಂದು ಸರಳ function ಅನ್ನು ಮೂಲಕ tool ಆಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ನೀವು ನಿಜವಾದ Python client ಅನ್ನು function ನಲ್ಲಿ wrap ಮಾಡಿ ಅದನ್ನು ಅಥವಾ ಗೆ ಸೇರಿಸುತ್ತೀರಿ. agent USDC ಕಳುಹಿಸಬಹುದು, invoices settle ಮಾಡಬಹುದು, ಮತ್ತು wallets ಓದಬಹುದು. ಪ್ರತಿ RAG query ಗೆ charge ಮಾಡಲು, ನಿಮ್ಮ ಸ್ವಂತ QueryEngineTool ಅನ್ನು ಅದೇ ರೀತಿಯಲ್ಲಿ gate ಮಾಡಿ. Payments Base ನಲ್ಲಿ settle ಆಗುತ್ತವೆ.
RAG ಪ್ರಶ್ನೆಗಳು ದುಬಾರಿಯಾಗಿದೆ. ಪ್ರತಿ ಪ್ರಶ್ನೆಗೆ ಶುಲ್ಕ ವಿಧಿಸುವುದು ಆರ್ಥಿಕತೆಯನ್ನು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.
LlamaIndex ನ ಶಕ್ತಿ ಪುನಃ ಪಡೆಯುವಿಕೆ-ವೃದ್ಧಿತ ಜನರೇಶನ್: ನಿಮ್ಮ ಬಳಿ ಸ್ವಂತ ದಾಖಲೆಗಳ ಮೇಲೆ ವೆಕ್ಟರ್ ಸೂಚಕವಿದೆ (ನಿಮ್ಮ ಕಂಪನಿಯ ದಾಖಲೆಗಳು, ಸಂಶೋಧನಾ ಡೇಟಾಸೆಟ್, ಕಾನೂನಾತ್ಮಕ ಶ್ರೇಣೀಬದ್ಧ), ಮತ್ತು ಏಜೆಂಟ್ ಸಂಬಂಧಿತ ತುಂಡುಗಳನ್ನು ಪುನಃ ಪಡೆಯುವ ಮೂಲಕ ಮತ್ತು ಸಾರಾಂಶ ನೀಡುವ ಮೂಲಕ ಉತ್ತರಿಸುತ್ತಾನೆ. ಪ್ರತಿ ಪ್ರಶ್ನೆಗೆ ನಿಖರವಾದ ಹಣವನ್ನು ಖರ್ಚು ಮಾಡುತ್ತದೆ, LLM ಟೋಕನ್ಗಳು, ಮತ್ತು ಹೆಚ್ಚಿನ ಬಾರಿ ತೃತೀಯ ಪಕ್ಷದ API ಕರೆಗಳು. ಉಚಿತ ಅನಿಯಮಿತ ಪ್ರವೇಶ ಬಜೆಟ್ ಅನ್ನು ಸುಟ್ಟು ಹಾಕುತ್ತದೆ; ಪ್ರತಿ-ಪ್ರಶ್ನೆ ಬಿಲ್ಲಿಂಗ್ ವೆಚ್ಚದ ರೂಪವನ್ನು ಹೊಂದಿಸುತ್ತದೆ.
ಇದಕ್ಕಾಗಿ ಕಳುಹಿಸಲಾದ ಸಹಾಯಕ ಇಲ್ಲ, ಮತ್ತು ನಿಮಗೆ ಒಂದು ಅಗತ್ಯವಿಲ್ಲ. ನೀವು ಇದನ್ನು ಸ್ವತಃ ನಿರ್ವಹಿಸುತ್ತೀರಿ: ನಿಮ್ಮ QueryEngineTool ನ ಕಾರ್ಯದಲ್ಲಿ, ಕರೆ ಮಾಡುವವರು ಪಾವತಿಸಿದ್ದಾರೆ ಎಂದು ಪರಿಶೀಲಿಸಿ (ನಿಮ್ಮದೇ ಆದ ಧ್ವಜ, ಪಾವತಿ ವೆಬ್ಹುಕ್ ಮೂಲಕ ತಿರುಗಿಸಲಾಗಿದೆ) ಮತ್ತು ಪುನಃ ಪಡೆಯುವುದು ಅಥವಾ ಬೆಲೆಯನ್ನು ಹಿಂತಿರುಗಿಸುವುದು. ವಾಲೆಟ್ ಕಾರ್ಯ ಮತ್ತು ಗೇಟಿಂಗ್ ಎರಡೂ ವಾಸ್ತವ blockchain0x ಕ್ಲೈಂಟ್ನ ಮೇಲೆ ಕೆಲವು ಸಾಲುಗಳಾಗಿವೆ, ಇದು ನೀತಿಯು - ಪ್ರತಿ ಪ್ರಶ್ನೆ, ಪ್ರತಿ ಅಧಿವೇಶನ, ಉಚಿತ ಶ್ರೇಣಿಯ ನಂತರ ಪಾವತಿಸಲಾಗಿದೆ - ಸಂಪೂರ್ಣವಾಗಿ ನಿಮ್ಮ ಕೈಗಳಲ್ಲಿ ಇರುತ್ತದೆ.
LlamaIndex ಅನ್ನು ಮತ್ತು ಕೋರ್ SDK ಅನ್ನು ಸ್ಥಾಪಿಸಿ. ಒಂದು ಪರಿಸರ ಚರ.
ಜೋಡಿಸಲು blockchain0x LlamaIndex ಪ್ಯಾಕೇಜ್ ಇಲ್ಲ. ನೀವು LlamaIndex ಅನ್ನು (Python 3.10+, ಆಧುನಿಕ FunctionAgent / ReActAgent / Workflows APIs) ಮತ್ತು ವಾಸ್ತವ blockchain0x ಕೋರ್ SDK ಅನ್ನು ಸ್ಥಾಪಿಸುತ್ತೀರಿ, ನಂತರ ಕೆಳಗಿನ ಕಾರ್ಯವನ್ನು ಬರೆಯುತ್ತೀರಿ. ಯಾವುದೇ ವೆಕ್ಟರ್ ಸ್ಟೋರ್ - ಪೈನ್ಕೋನ್, Qdrant, ಕ್ರೋಮಾ, ವೀವಿಯೇಟ್, LlamaIndex ಕ್ಲೌಡ್ ಅನ್ನು ಹಕ್ಕು ನೀಡುತ್ತದೆ.
pip install llama-index blockchain0xexport 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 ಬೇಕಾಗುತ್ತದೆ, webhook ಅನ್ನು create ಅಥವಾ rotate ಮಾಡುವಾಗ dashboard ಅದನ್ನು ಒಮ್ಮೆ ಮಾತ್ರ ನೀಡುತ್ತದೆ.
ಪಾವತಿ ಮಾಡುವ function, FunctionTool ಆಗಿ wrapped ಮಾಡಲಾಗಿದೆ.
ಕೆಳಗೆ ಸಂಪೂರ್ಣ ಏಕೀಕರಣವಿದೆ. 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.
ವೆಬ್ಹುಕ್ ಇಳಿಯುವಾಗ ಪಾವತಿಸಿದ ಧ್ವಜವನ್ನು ತಿರುಗಿಸಿ.
ಪಾವತಿ settle ಆದಾಗ, Blockchain0x ನಿಮ್ಮ webhook URL ಗೆ signed payment.received event ಅನ್ನು POST ಮಾಡುತ್ತದೆ. verify helper Node SDK ಯಲ್ಲಿ ship ಆಗಿದೆ; Python service ನಲ್ಲಿ ನೀವು ದಾಖಲಾಗಿರುವ HMAC ವಿರುದ್ಧ ಕೈಯಾರೆ verify ಮಾಡುತ್ತೀರಿ. ಕರೆ ಮಾಡಿದವರನ್ನು ನಿಮ್ಮ own store ನಲ್ಲಿ paid ಎಂದು ಗುರುತಿಸಿ, ಮತ್ತು ನಿಮ್ಮ gated query tool ಮುಂದಿನ call ಅನ್ನು ಮುಂದಕ್ಕೆ ಬಿಡುತ್ತದೆ. ಕೆಳಗೆ FastAPI example ಇದೆ.
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}
algorithm ಎಂದರೆ t.rawBody string ಮೇಲೆ HMAC-SHA256, constant-time compare, ಮತ್ತು 300-second replay window. raw body ಅನ್ನು await request.body() ಮೂಲಕ read ಮಾಡಿ, ಎಂದಿಗೂ request.json() ಅನ್ನು re-serialized ಮಾಡಬೇಡಿ, ಏಕೆಂದರೆ ಅದು signature ಒಳಗೊಂಡ bytes ಅನ್ನು ಬದಲಾಯಿಸುತ್ತದೆ. ship ಮಾಡಲಾದ events payment.received, payment.sent, wallet.deployed, ಮತ್ತು webhook.test. ಹೆಚ್ಚಿನ follow-up ಕೆಲಸಕ್ಕಾಗಿ, job ಅನ್ನು enqueue ಮಾಡಿ (Celery, arq) ಮತ್ತು handler ಅನ್ನು block ಮಾಡದೇ ತಕ್ಷಣ 200 respond ಮಾಡಿ.
ನೀವು wrap ಮಾಡುತ್ತಿರುವ client open ಆಗಿದೆ. ಅದನ್ನು read ಮಾಡಿ.
ಕ್ಲೋನ್ ಮಾಡಲು ಯಾವುದೇ 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 ನಲ್ಲಿ document ಮಾಡಲಾಗಿದೆ. Base Sepolia ವಿರುದ್ಧ sk_test_ key ನಿಂದ ಆರಂಭಿಸಿ, function ನೀವು ನಿರೀಕ್ಷಿಸುವಂತೆ ಕೆಲಸ ಮಾಡಿದಾಗ sk_live_ ಗೆ switch ಮಾಡಿ.
ಲಾಮಾ ಇಂಡೆಕ್ಸ್-ನಿರ್ದಿಷ್ಟವಾದ ಬಲೆಗೆಗಳನ್ನು ತಪ್ಪಿಸಲು ಐದು.
ಇವು ನಮ್ಮ ಬೆಂಬಲ ಇನ್ಬಾಕ್ಸ್ನಿಂದ ಬರುತ್ತವೆ. ನೀವು ಇದ ಬಗ್ಗೆ ತಿಳಿದಾಗ ಪ್ರತಿ ಒಂದು ಕನಿಷ್ಠ ಒಂದು ಗಂಟೆ ಡಿಬಗ್ ಮಾಡುವುದನ್ನು ಉಳಿಸುತ್ತದೆ.
LlamaIndex ಪ್ಯಾಕೇಜ್ ಇಲ್ಲ - ನೀವು SDK ಅನ್ನು ಲುಪ್ತಗೊಳಿಸುತ್ತೀರಿ
Blockchain0x LangChain ಮತ್ತು CrewAI ಗೆ ಅಡಾಪ್ಟರ್ಗಳನ್ನು ಮತ್ತು MCP ಸರ್ವರ್ ಅನ್ನು ಕಳುಹಿಸುತ್ತದೆ; ವಿಶೇಷ LlamaIndex ಪ್ಯಾಕೇಜ್ ಇಲ್ಲ. ಮೇಲಿನ ವಿಧಾನವು ಮಾರ್ಗವಾಗಿದೆ: ವಾಸ್ತವ blockchain0x ಕ್ಲೈಂಟ್ ಅನ್ನು ಕರೆ ಮಾಡುವ ಸರಳ ಟೈಪ್ಡ್ ಕಾರ್ಯ, FunctionTool.from_defaults ನೊಂದಿಗೆ ಮುಚ್ಚಲಾಗಿದೆ. LlamaIndex ಸಹಿಯನ್ನು ಓದುತ್ತದೆ ಮತ್ತು ಶ್ರೇಣಿಯನ್ನು ನಿರ್ಮಿಸಲು ಡಾಕ್ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಓದುತ್ತದೆ, ಆದ್ದರಿಂದ ಡಾಕ್ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಶುದ್ಧವಾಗಿರಿಸಿ.
QueryEngineTool ಅನ್ನು ನೀವು ಸ್ವಂತವಾಗಿ ನಿರ್ವಹಿಸಿ - ಯಾವುದೇ ಸಹಾಯಕ ಇದನ್ನು ಮಾಡುತ್ತಿಲ್ಲ
paid-RAG pattern ನಿಜವಾಗಿಯೂ ಉಪಯುಕ್ತವಾಗಿದೆ, ಆದರೆ paid_query_engine_tool ಎಂಬ helper ಇಲ್ಲ. ನೀವು ಅದನ್ನು ಸ್ವತಃ ನಿರ್ಮಿಸುತ್ತೀರಿ: ನಿಮ್ಮ query tool ನ function ನಲ್ಲಿ, ಕರೆ ಮಾಡಿದವರು ಪಾವತಿಸಿದ್ದಾರೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ (ಕೆಳಗಿನ webhook ಮೂಲಕ ಅಪ್ಡೇಟ್ ಆಗುವ ನಿಮ್ಮದೇ store), ಮತ್ತು ಅವರು ಪಾವತಿಸಿದ್ದರೆ ಮಾತ್ರ retrieval ಅನ್ನು ನಡೆಸಿ, ಇಲ್ಲದಿದ್ದರೆ price ಅನ್ನು ಹಿಂತಿರುಗಿಸಿ. ಇದು ಕೆಲವೇ ಸಾಲುಗಳು, ಮತ್ತು gating policy ಮೇಲಿನ ನಿಯಂತ್ರಣ ನಿಮ್ಮ ಕೈಯಲ್ಲೇ ಇರುತ್ತದೆ.
ಮೌಲ್ಯಗಳು 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.
FunctionAgent.run ಅಸಿಂಕ್; SDK ಕರೆ ಸಿಂಕ್
LlamaIndex ಏಜೆಂಟ್ಗಳು ಅಸಿಂಕ್-ಮೊದಲು - await agent.run(...). ನಿಮ್ಮ ಸಾಧನದ ಒಳಗೆ blockchain0x ಕ್ಲೈಂಟ್ ಕರೆ ಸಿಂಕ್ರೋನಸ್ ಆಗಿದ್ದು, ಇದು ಒಬ್ಬ ವೇಗದ ಪಾವತಿಗೆ ಉತ್ತಮವಾಗಿದೆ ಆದರೆ ಲೋಡ್ ಅಡಿಯಲ್ಲಿ ಲೂಪ್ನನ್ನು ಅಡ್ಡಗಟ್ಟುತ್ತದೆ. ನೀವು ಹಲವಾರು ಸಮಕಾಲೀನ ಪ್ರಶ್ನೆಗಳನ್ನು ಸೇವಿಸುತ್ತಿದ್ದರೆ, SDK ಕರೆ ಅನ್ನು asyncio.to_thread ಮೂಲಕ ಒಯ್ಯಿರಿ, ಆದ್ದರಿಂದ ಘಟನೆ ಲೂಪ್ ಪ್ರತಿಕ್ರಿಯಾತ್ಮಕವಾಗಿರುತ್ತದೆ.
send_payment ಆರಂಭದಲ್ಲಿ 503 ಅನ್ನು ಉತ್ತರಿಸಬಹುದು
payments.create ಡೀಫಾಲ್ಟ್ನಲ್ಲಿ ಪುನರಾವೃತ್ತವಾಗುವುದಿಲ್ಲ ಮತ್ತು ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ಗಾಗಿ ಚೈನ್ ಅಡಾಪ್ಟರ್ ಸಂಪರ್ಕಿತವಾಗುವವರೆಗೆ 503 ಅನ್ನು ಹಿಂತಿರುಗಿಸಬಹುದು. ನಿಮ್ಮ ಸಾಧನ ಕಾರ್ಯದಲ್ಲಿ ದೋಷವನ್ನು ಹಿಡಿದಿಡಿ ಮತ್ತು ಮಾದಲಿಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಸ್ಪಷ್ಟ ಸಂದೇಶವನ್ನು ಹಿಂತಿರುಗಿಸಿ, ಏಜೆಂಟ್ ಲೂಪ್ನಲ್ಲಿ ಬಿಡುವುದಕ್ಕಿಂತ. ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಮಿಂಟ್ಸ್ ಮಾಡಲಾದ idempotency ಕೀ ಅರ್ಥವೆಂದರೆ ಕೈಯಿಂದ ಪುನರಾವೃತ್ತವು ಡಬಲ್-ಪೇಯಿಂಗ್ ಆಗುವುದಿಲ್ಲ.