LlamaIndex 결제 통합.
LlamaIndex 패키지가 없으며, 필요하지도 않습니다. 실제 blockchain0x 클라이언트를 FunctionTool에 래핑하면 에이전트가 USDC를 이동하고 Base에서 유료 RAG 쿼리를 게이트할 수 있습니다.
LlamaIndex 전용 패키지는 없으며, 필요하지도 않습니다. LlamaIndex는 로 일반 함수를 도구로 바꾸므로, 실제 Python 클라이언트를 함수로 감싸 또는 에 추가하면 됩니다. 에이전트는 USDC 전송, 인보이스 정산, 지갑 조회를 수행할 수 있습니다. RAG 쿼리당 과금하려면, 자체 QueryEngineTool도 같은 방식으로 게이트하세요. 결제는 Base에서 정산됩니다.
RAG 쿼리는 비용이 많이 듭니다. 쿼리당 요금을 부과하면 경제성이 맞습니다.
LlamaIndex의 강점은 검색 증강 생성입니다: 귀하는 독점 문서(귀사의 문서, 연구 데이터 세트, 법률 말뭉치)에 대한 벡터 인덱스를 가지고 있으며, 에이전트는 관련 청크를 검색하고 요약하여 응답합니다. 각 쿼리는 임베딩, LLM 토큰 및 종종 제3자 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 blockchain0xexport BLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
BLOCKCHAIN0X_API_KEY는 dashboard의 sk_test_ testnet 또는 sk_live_ mainnet 키이며, client는 이를 environment에서 읽습니다. 유료 쿼리를 게이트하는 경우, webhook handler에는 추가로 BLOCKCHAIN0X_WEBHOOK_SECRET가 필요하며, 이는 webhook을 생성하거나 회전할 때 dashboard가 한 번 반환합니다.
지불을 하는 함수, 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합니다. verify 헬퍼는 Node SDK에 포함되어 있으며; Python 서비스에서는 문서화된 HMAC에 대해 수동으로 검증합니다. 호출자를 귀하의 저장소에서 결제된 것으로 표시하고, 귀하의 제한된 쿼리 도구가 다음 호출을 통과하도록 합니다. FastAPI 예제는 아래에 있습니다.
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)를 감싸며, 전체 method surface는 docs에 있습니다. function body 참고용으로 읽으세요.
github.com/tosh-labs/blockchain0x-python전체 SDK method surface와 scope는 the docs에 문서화되어 있습니다. Base Sepolia에서 sk_test_ 키로 시작한 다음, function이 예상대로 동작하면 sk_live_로 전환하세요.
LlamaIndex에 특화된 피해야 할 다섯 가지 함정.
이것들은 우리의 지원 인박스에서 나옵니다. 각각은 알고 나면 최소한 한 시간의 디버깅 시간을 절약합니다.
LlamaIndex 패키지가 없습니다 - SDK를 래핑합니다.
Blockchain0x는 LangChain 및 CrewAI와 MCP 서버를 위한 어댑터를 제공합니다. 전용 LlamaIndex 패키지는 없습니다. 위의 레시피는 경로입니다: 실제 blockchain0x 클라이언트를 호출하는 일반 타입 함수로, FunctionTool.from_defaults로 래핑됩니다. LlamaIndex는 시그니처와 docstring을 읽어 스키마를 구축하므로 docstring을 정확하게 유지하십시오.
QueryEngineTool을 직접 게이트하세요 - 어떤 도우미도 하지 않습니다.
유료-RAG 패턴은 실제로 좋지만, paid_query_engine_tool 도우미는 없습니다. 직접 만듭니다: 쿼리 도구의 함수에서 호출자가 지불했는지 확인하십시오(아래 웹훅에 의해 업데이트된 귀하의 저장소) 및 그들이 지불했을 경우에만 검색을 실행하고, 그렇지 않으면 가격을 반환합니다. 몇 줄로 구성되어 있으며, 게이팅 정책을 제어할 수 있습니다.
금액은 문자열로 된 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을 반환할 수 있습니다. 도구 함수 내에서 오류를 포착하고 모델이 작동할 수 있는 명확한 메시지를 반환하세요. 자동 발행된 멱등성 키는 수동 재시도가 이중 결제를 발생시키지 않음을 의미합니다.