メインコンテンツにスキップ
LLAMAINDEX統合

LlamaIndex支払い統合。

LlamaIndexパッケージはなく、必要ありません。実際のblockchain0xクライアントをFunctionToolでラップすれば、エージェントはUSDCを移動し、Base上で有料のRAGクエリをゲートできます。

短い回答

LlamaIndex 専用パッケージはありませんし、必要もありません。LlamaIndex は で通常の関数を tool に変換するため、実際の Python client を関数でラップして または に追加します。エージェントは USDC を送信し、請求書を決済し、wallet を読み取れます。RAG query ごとに課金するには、自前の QueryEngineTool を同じ方法で gate してください。支払いは Base で決済されます。

LLAMAINDEXがPAID RAGに適している理由

RAGクエリは高価です。クエリごとに料金を請求することで経済が成り立ちます。

LlamaIndexの強みは、取得強化生成です:あなたは独自の文書(会社の文書、研究データセット、法的コーパス)に対するベクトルインデックスを持ち、エージェントは関連するチャンクを取得して要約することで応答します。各クエリは埋め込み、LLMトークン、しばしばサードパーティAPI呼び出しに実際のお金がかかります。無料の無制限アクセスは予算を消費します; クエリごとの請求はコスト形状に適合します。

これに対する出荷されたヘルパーはなく、必要ありません。自分でゲートします:QueryEngineToolの関数内で、呼び出し元が支払ったかどうかを確認し(支払いWebhookによって切り替えられる自分のフラグ)、取得を実行するか、価格を返します。ウォレット機能とゲーティングは、実際のblockchain0xクライアントの上に数行であり、ポリシー(クエリごと、セッションごと、無料プランから有料プランまで)を完全にあなたの手に保ちます。

インストール

LlamaIndexとコアSDKをインストールします。1つの環境変数。

追加する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 は dashboard の sk_test_ testnet または sk_live_ mainnet キーで、client は環境変数から読み込みます。有料クエリを制御する場合、webhook handler には追加で BLOCKCHAIN0X_WEBHOOK_SECRET が必要です。これは webhook を作成またはローテーションしたときに dashboard が 1 回だけ返します。

レシピ

支払いを行う関数、FunctionToolとしてラップされます。

以下は全体の統合です。send_usdcは実際のblockchain0xクライアントを呼び出します;FunctionTool.from_defaultsがそれをラップし、FunctionAgentが呼び出し可能なツールとしてそれを取得します。LlamaIndexは型ヒントとドキュメント文字列を読み取ってスキーマを構築します。リストに独自のQueryEngineToolを追加すると、同じエージェントがRAGクエリにも回答できます。

AGENT.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が到着したときに支払いフラグを切り替えます。

支払いが決済されると、Blockchain0xはあなたのWebhook URLに署名されたpayment.receivedイベントをPOSTします。verifyヘルパーは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()を再シリアライズしてはいけません。なぜなら、それは署名がカバーするバイトを変更するからです。出荷されたイベントはpayment.received、payment.sent、wallet.deployed、およびwebhook.testです。重いフォローアップ作業の場合は、ジョブをキューに入れ(Celery、arq)、ハンドラーをブロックするのではなく、すぐに200で応答します。

ソースとドキュメント

ラップしているクライアントはオープンです。読んでください。

クローンする LlamaIndex の starter package はありません - 上の recipe がそのまま integration です。blockchain0x の SDK は GitHub で open source です。この recipe は Python SDK (blockchain0x-python) をラップしており、完全なメソッド一覧は docs にあります。function body の参考として読んでください。

github.com/tosh-labs/blockchain0x-python

SDK のメソッド一覧とスコープは the docs に記載されています。まずは Base Sepolia で sk_test_ key を使い、関数が想定どおり動いたら sk_live_ に切り替えてください。

一般的な落とし穴

LlamaIndexに特有の避けるべき5つの罠。

これらは私たちのサポート受信箱からのものです。各々は、知っていると少なくとも1時間のデバッグを節約します。

PITFALL 1

LlamaIndexパッケージはありません - SDKをラップします。

Blockchain0xは、LangChainとCrewAI用のアダプタとMCPサーバーを出荷します。専用のLlamaIndexパッケージはありません。上記のレシピはパスです:実際のblockchain0xクライアントを呼び出すプレーンな型付き関数で、FunctionTool.from_defaultsでラップされています。LlamaIndexはシグネチャとドキュメンテーション文字列を読み取ってスキーマを構築するので、ドキュメンテーション文字列を正確に保ってください。

PITFALL 2

QueryEngineToolを自分でゲートします - ヘルパーはそれを行いません

有料RAGパターンは実際に存在し、良好ですが、paid_query_engine_toolヘルパーはありません。あなたがそれを構築します:あなたのクエリツールの関数で、呼び出し元が支払ったかどうかを確認します(あなた自身のストア、下のWebhookで更新された)そして、支払った場合のみ取得を実行し、そうでなければ価格を返します。数行で済み、ゲーティングポリシーの制御を維持します。

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を返すことがあります。ツール関数内でエラーをキャッチし、モデルがアクションを実行できる明確なメッセージを返してください。エージェントがループしないようにします。自動生成された冪等性キーにより、手動での再試行は二重支払いを引き起こしません。

よくある質問

LlamaIndexに特有の質問が3つ。

インストールするための専用の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 webhookを介して確認されます。

RAGの応答に対して料金を請求します。

実際のクライアントをFunctionToolでラップし、クエリを同じ方法でゲートします。開始は無料です。