মূল বিষয়বস্তুতে যান
LLAMAINDEX ইন্টিগ্রেশন

LlamaIndex পেমেন্ট ইন্টিগ্রেশন।

এখানে কোনো LlamaIndex প্যাকেজ নেই, এবং আপনার একটি প্রয়োজন নেই। প্রকৃত blockchain0x ক্লায়েন্টকে একটি FunctionTool-এ মোড়ান এবং আপনার এজেন্ট Base-এ USDC স্থানান্তর করতে পারে এবং একটি পেইড RAG প্রশ্নের গেট করতে পারে।

সংক্ষিপ্ত উত্তর

LlamaIndex-এর জন্য আলাদা কোনো package নেই, এবং আপনারও তা দরকার নেই। LlamaIndex দিয়ে একটি plain function-কে tool-এ রূপান্তর করে, তাই আপনি real Python client-কে একটি function-এ wrap করে একটি বা -এ যোগ করেন। এজেন্ট USDC পাঠাতে, invoice settle করতে, এবং wallet পড়তে পারে। প্রতি RAG query-তে charge করতে, আপনার নিজস্ব QueryEngineTool-ও একইভাবে gate করুন। Payment Base-এ settle হয়।

কেন LLAMAINDEX পেইড RAG এর জন্য উপযুক্ত

RAG প্রশ্নগুলি ব্যয়বহুল। প্রতি প্রশ্ন চার্জ করা অর্থনীতিকে কাজ করে।

LlamaIndex এর শক্তি হল পুনরুদ্ধার-বর্ধিত উৎপাদন: আপনার কাছে proprietary ডকুমেন্টগুলির উপর একটি ভেক্টর সূচক রয়েছে (আপনার কোম্পানির ডকস, একটি গবেষণা ডেটাসেট, একটি আইনগত কর্পাস), এবং এজেন্টটি প্রাসঙ্গিক অংশগুলি পুনরুদ্ধার এবং সারসংক্ষেপ করে উত্তর দেয়। প্রতিটি প্রশ্নের জন্য বাস্তব অর্থের খরচ হয় এমবেডিং, LLM টোকেন, এবং প্রায়শই তৃতীয় পক্ষের API কল। ফ্রি আনলিমিটেড অ্যাক্সেস বাজেট পোড়ায়; প্রতি-প্রশ্ন বিলিং খরচের আকারে ফিট করে।

এর জন্য কোনও পাঠানো সহায়ক নেই, এবং আপনার এটি প্রয়োজন নেই। আপনি নিজেই এটি গেট করেন: আপনার QueryEngineTool এর ফাংশনের ভিতরে, চেক করুন যে কলারটি পেমেন্ট করেছে কিনা (আপনার নিজস্ব ফ্ল্যাগ, যা পেমেন্ট ওয়েবহুক দ্বারা উল্টানো হয়) এবং বা পুনরুদ্ধার চালান বা একটি মূল্য ফেরত দিন। ওয়ালেট ফাংশন এবং গেটিং উভয়ই প্রকৃত blockchain0x ক্লায়েন্টের উপরে কয়েকটি লাইন, যা নীতিটি - প্রতি প্রশ্ন, প্রতি সেশন, বিনামূল্যে স্তর তারপর পেইড - সম্পূর্ণরূপে আপনার হাতে রাখে।

ইনস্টলেশন

LlamaIndex এবং মূল SDK ইনস্টল করুন। একটি পরিবেশ পরিবর্তনশীল।

যোগ করার জন্য কোনো blockchain0x LlamaIndex প্যাকেজ নেই। আপনি LlamaIndex (Python 3.10+, আধুনিক FunctionAgent / ReActAgent / Workflows API) এবং প্রকৃত 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 আপনার ড্যাশবোর্ড থেকে একটি sk_test_ testnet বা sk_live_ mainnet কী; ক্লায়েন্ট এটি পরিবেশ থেকে পড়ে। যদি আপনি পেইড কোয়েরিগুলি গেট করেন, তবে ওয়েবহুক হ্যান্ডলার অতিরিক্তভাবে BLOCKCHAIN0X_WEBHOOK_SECRET প্রয়োজন, যা আপনি একটি ওয়েবহুক তৈরি বা রোটেট করার সময় একবার ড্যাশবোর্ড ফেরত দেয়।

রেসিপি

একটি ফাংশন যা অর্থ প্রদান করে, একটি 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 করে। যাচাইকরণ সহায়ক নোড SDK-তে শিপ করা হয়; একটি পাইথন পরিষেবায় আপনি নথিভুক্ত HMAC-এর বিরুদ্ধে হাতে যাচাই করেন। কলারকে আপনার নিজস্ব স্টোরে পেইড চিহ্নিত করুন, এবং আপনার গেটেড কোয়েরি টুল পরবর্তী কলটি অনুমতি দেয়। নিচে FastAPI উদাহরণ।

ওয়েবহুক.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() পুনরায় সিরিয়ালাইজ করবেন না, কারণ এটি সিগনেচার দ্বারা কভার করা বাইটগুলি পরিবর্তন করে। চালানো ইভেন্টগুলি হল payment.received, payment.sent, wallet.deployed, এবং webhook.test। ভারী অনুসরণ কাজের জন্য, একটি কাজ (Celery, arq) এনকিউ করুন এবং হ্যান্ডলারকে ব্লক করার পরিবর্তে 200 তাত্ক্ষণিকভাবে প্রতিক্রিয়া জানান।

সূত্র এবং ডক্স

আপনি যেটি মোড়াচ্ছেন ক্লায়েন্টটি খোলা। এটি পড়ুন।

এখন ক্লোন করার জন্য কোন LlamaIndex স্টার্টার প্যাকেজ নেই - উপরের রেসিপিটি ইন্টিগ্রেশন। blockchain0x SDK গুলি GitHub এ ওপেন সোর্স; এই রেসিপিটি Python SDK (blockchain0x-python) মোড়ানো, ডকসে সম্পূর্ণ পদ্ধতি পৃষ্ঠ সহ। ফাংশন বডিগুলির জন্য একটি রেফারেন্স হিসাবে এটি পড়ুন।

github.com/tosh-labs/blockchain0x-python

পূর্ণ SDK পদ্ধতি পৃষ্ঠ এবং স্কোপগুলি ডকস এ নথিভুক্ত। Base Sepolia এর বিরুদ্ধে একটি sk_test_ কী দিয়ে শুরু করুন, তারপর যখন ফাংশন আপনার প্রত্যাশা অনুযায়ী কাজ করে তখন sk_live_ এ স্যুইচ করুন।

সাধারণ ফাঁদ

পাঁচটি LlamaIndex-নির্দিষ্ট ফাঁদ এড়ানো উচিত।

এগুলি আমাদের সমর্থন ইনবক্স থেকে আসে। প্রতিটি জানার পর অন্তত এক ঘণ্টা ডিবাগিং সাশ্রয় করে।

PITFALL 1

এখানে কোনো LlamaIndex প্যাকেজ নেই - আপনি SDK মোড়ান

Blockchain0x LangChain এবং CrewAI এর জন্য অ্যাডাপ্টার পাঠায় এবং MCP সার্ভার; কোনও নিবেদিত LlamaIndex প্যাকেজ নেই। উপরের রেসিপিটি হল পথ: একটি সাধারণ টাইপ করা ফাংশন যা আসল blockchain0x ক্লায়েন্টকে কল করে, FunctionTool.from_defaults দিয়ে মোড়ানো। LlamaIndex স্বাক্ষর এবং ডক্সট্রিং পড়ে স্কিমা তৈরি করে, তাই ডক্সট্রিংটি সঠিক রাখুন।

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 Workflows এর সাথেও কাজ করে?

হ্যাঁ। পেমেন্ট লজিক একটি সাধারণ ফাংশন, তাই কিছুই এটিকে একটি নির্দিষ্ট এজেন্ট প্রিমিটিভের সাথে বাঁধে না। এটি একটি ReActAgent, একটি FunctionAgent, বা একটি LlamaIndex Workflow-এর একটি পদক্ষেপ থেকে কল করুন। একটি Workflow-এ, একটি স্বাভাবিক আকার হল send_usdc (অথবা আপনার গেটেড কোয়েরি) একটি পদক্ষেপের ভিতরে কল করা এবং ফলাফলটিকে একটি ইভেন্ট হিসাবে নির্গত করা যা পরবর্তী পদক্ষেপ গ্রহণ করে। ইনবাউন্ড পেমেন্টগুলি নীচের payment.received ওয়েবহুকের মাধ্যমে নিশ্চিত হয়।

আপনার RAG প্রতিক্রিয়ার জন্য চার্জ করুন।

বাস্তব ক্লায়েন্টকে একটি FunctionTool-এ মোড়ান, আপনার কোয়েরিটি একইভাবে গেট করুন। শুরু করতে বিনামূল্যে।