Tích hợp thanh toán LlamaIndex.
Không có gói LlamaIndex, và bạn không cần một cái nào. Bọc khách hàng blockchain0x thực tế trong một FunctionTool và tác nhân của bạn có thể chuyển USDC và kiểm soát một truy vấn RAG trả phí trên Base.
Không có package riêng cho LlamaIndex, và bạn cũng không cần một package như vậy. LlamaIndex biến một hàm thuần thành một tool với , vì vậy bạn bọc Python client thực sự trong một hàm và thêm nó vào một hoặc . Agent có thể gửi USDC, thanh toán hóa đơn và đọc ví. Để tính phí theo từng truy vấn RAG, hãy chặn QueryEngineTool của riêng bạn theo cách tương tự. Thanh toán được chốt trên Base.
Các truy vấn RAG rất tốn kém. Tính phí theo truy vấn giúp kinh tế hoạt động.
Điểm mạnh của LlamaIndex là tạo ra nội dung tăng cường bằng cách truy xuất: bạn có một chỉ mục vector trên các tài liệu độc quyền (tài liệu của công ty bạn, một tập dữ liệu nghiên cứu, một tập hợp pháp lý), và tác nhân trả lời bằng cách truy xuất và tóm tắt các phần liên quan. Mỗi truy vấn tốn tiền thật trong việc nhúng, token LLM, và thường là các cuộc gọi API bên thứ ba. Truy cập miễn phí không giới hạn tiêu tốn ngân sách; tính phí theo truy vấn phù hợp với hình dạng chi phí.
Không có trợ giúp nào được gửi cho điều này, và bạn không cần một cái nào. Bạn tự kiểm soát: bên trong hàm của QueryEngineTool của bạn, kiểm tra xem người gọi đã thanh toán hay chưa (cờ của riêng bạn, được đảo ngược bởi webhook thanh toán) và chạy việc truy xuất hoặc trả về một mức giá. Hàm ví và việc kiểm soát đều chỉ là vài dòng trên khách hàng blockchain0x thực tế, điều này giữ chính sách - theo từng truy vấn, theo từng phiên, gói miễn phí sau đó là trả phí - hoàn toàn trong tay bạn.
Cài đặt LlamaIndex và SDK cốt lõi. Một biến môi trường.
Không có gói blockchain0x LlamaIndex nào để thêm. Bạn cài đặt LlamaIndex (Python 3.10+, các API FunctionAgent / ReActAgent / Workflows hiện đại) và SDK cốt lõi blockchain0x thực tế, sau đó viết hàm bên dưới. Hoạt động cùng với bất kỳ kho vector nào - 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 là một khóa sk_test_ testnet hoặc sk_live_ mainnet từ dashboard của bạn; client đọc nó từ môi trường. Nếu bạn chặn các truy vấn trả phí, webhook handler còn cần BLOCKCHAIN0X_WEBHOOK_SECRET, giá trị này dashboard chỉ trả về một lần khi bạn tạo hoặc xoay vòng một webhook.
Một hàm trả tiền, được bọc dưới dạng FunctionTool.
Dưới đây là toàn bộ tích hợp. send_usdc gọi đến khách hàng blockchain0x thực; FunctionTool.from_defaults bọc nó, và FunctionAgent lấy nó làm công cụ có thể gọi. LlamaIndex đọc các gợi ý kiểu và docstring để xây dựng sơ đồ. Thêm QueryEngineTool của riêng bạn vào danh sách và cùng một tác nhân cũng có thể trả lời các truy vấn 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.
Lật cờ đã thanh toán khi webhook đến.
Khi một khoản thanh toán được giải quyết, Blockchain0x POST một sự kiện payment.received đã ký đến URL webhook của bạn. Trợ giúp xác minh được cung cấp trong SDK Node; trong một dịch vụ Python, bạn xác minh bằng tay theo HMAC đã được tài liệu hóa. Đánh dấu người gọi đã thanh toán trong cửa hàng của riêng bạn, và công cụ truy vấn được khóa của bạn cho phép cuộc gọi tiếp theo đi qua. Ví dụ FastAPI bên dưới.
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}
Thuật toán là HMAC-SHA256 trên chuỗi t.rawBody, so sánh thời gian không đổi và cửa sổ phát lại 300 giây. Đọc nội dung thô qua await request.body(), không bao giờ request.json() được tái tuần tự hóa, vì điều đó thay đổi các byte mà chữ ký bao phủ. Các sự kiện đã được gửi là payment.received, payment.sent, wallet.deployed và webhook.test. Đối với công việc theo dõi nặng, hãy xếp hàng một công việc (Celery, arq) và phản hồi 200 ngay lập tức thay vì chặn trình xử lý.
Khách hàng mà bạn đang bọc là mở. Đọc nó.
Không có starter package của LlamaIndex để clone - recipe ở trên chính là phần tích hợp. Các SDK của blockchain0x là mã nguồn mở trên GitHub; recipe này bọc Python SDK (blockchain0x-python), với toàn bộ bề mặt phương thức nằm trong docs. Hãy đọc để tham khảo phần thân hàm.
github.com/tosh-labs/blockchain0x-pythonToàn bộ bề mặt phương thức và các scope của SDK được tài liệu hóa tại the docs. Hãy bắt đầu với một key sk_test_ trên Base Sepolia, rồi chuyển sang sk_live_ khi hàm hoạt động đúng như bạn mong đợi.
Năm cạm bẫy cụ thể về LlamaIndex cần tránh.
Những điều này đến từ hộp thư hỗ trợ của chúng tôi. Mỗi điều tiết kiệm ít nhất một giờ gỡ lỗi khi bạn biết về nó.
Không có gói LlamaIndex - bạn bọc SDK
Blockchain0x cung cấp các bộ chuyển đổi cho LangChain và CrewAI cùng với máy chủ MCP; không có gói LlamaIndex chuyên dụng. Công thức ở trên là con đường: một hàm kiểu đơn giản gọi đến khách hàng blockchain0x thực, được bọc bằng FunctionTool.from_defaults. LlamaIndex đọc chữ ký và docstring để xây dựng sơ đồ, vì vậy hãy giữ docstring chính xác.
Tự kiểm soát một QueryEngineTool - không có trợ giúp nào thực hiện điều đó
Mô hình paid-RAG là có thật và tốt, nhưng không có trợ giúp paid_query_engine_tool. Bạn xây dựng nó: trong chức năng của công cụ truy vấn của bạn, kiểm tra xem người gọi đã thanh toán hay chưa (cửa hàng của riêng bạn, được cập nhật bởi webhook bên dưới) và chỉ chạy việc truy xuất nếu họ đã thanh toán, nếu không thì trả về một mức giá. Nó chỉ là vài dòng, và bạn giữ quyền kiểm soát chính sách phân phối.
Các số lượng là đơn vị cơ sở USDC, dưới dạng chuỗi
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 là bất đồng bộ; cuộc gọi SDK là đồng bộ
Các tác nhân LlamaIndex ưu tiên bất đồng bộ - await agent.run(...). Cuộc gọi khách hàng blockchain0x bên trong công cụ của bạn là đồng bộ, điều này là ổn cho một khoản thanh toán nhanh nhưng chặn vòng lặp khi có tải. Nếu bạn phục vụ nhiều truy vấn đồng thời, hãy bọc cuộc gọi SDK với asyncio.to_thread để vòng lặp sự kiện vẫn phản hồi.
send_payment có thể trả về 503 sớm
payments.create không tự động thử lại và có thể trả về 503 cho đến khi bộ chuyển đổi chuỗi được kết nối với mạng của bạn. Bắt lỗi bên trong hàm công cụ của bạn và trả về một thông điệp rõ ràng mà mô hình có thể hành động, thay vì để tác nhân lặp lại. Khóa idempotency tự động được cấp phát có nghĩa là một lần thử lại thủ công sẽ không thanh toán gấp đôi.