Tích hợp thanh toán Agno.
Không có gói Agno, 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 Toolkit nhỏ và tác nhân của bạn có thể chuyển USDC trên Base - trừu tượng tối thiểu, theo cách Agno.
Không có package riêng cho Agno, và bạn cũng không cần một package như vậy. Agno biến một phương thức thành một tool, vì vậy bạn bọc Python client thực sự trong một toolkit nhỏ và thêm nó vào của bạn. Agent có thể gửi USDC, thanh toán hóa đơn và đọc ví, trên mọi model của Agno (OpenAI, Anthropic, DeepSeek, Llama, Mistral). Thanh toán được chốt trên Base.
Khung Python nhẹ. Không có thuế trừu tượng.
Agno (trước đây là Phidata) là khung đại lý mà bạn chọn khi bạn muốn sự đơn giản tối thiểu. Không có trình xây dựng đồ thị, không có Crew, không có Workflow - chỉ có Đại lý, Công cụ và phương thức run(). Các công cụ là các callable Python. Khung này thêm đủ cấu trúc để gọi LLM với hỗ trợ công cụ, quản lý bộ nhớ và tạo đầu ra streaming, sau đó không làm cản trở bạn.
Công thức theo cùng một triết lý. Bạn viết một lớp con Toolkit nhỏ đăng ký một phương thức gọi khách hàng thực - nó trông giống và hành xử như mọi công cụ Agno khác. Không có thiết lập đặc biệt nào ngoài việc khởi tạo, không có đồ thị nào để kết nối, không có phiên bản bộ chuyển đổi nào để theo dõi. Sự đơn giản là điểm chính: nếu bạn muốn đồ thị, bạn sẽ ở trên LangGraph.
Cài đặt Agno và SDK cốt lõi. Hai khóa.
Không có gói blockchain0x Agno nào để thêm. Bạn cài đặt Agno (Python 3.10+, dòng 1.0+ sau khi đổi tên Phidata) và SDK cốt lõi blockchain0x thực tế, sau đó viết toolkit bên dưới. Nếu bạn vẫn đang sử dụng các import phi.*, hãy chạy pip install -U agno trước.
pip install agno blockchain0xexport OPENAI_API_KEY=sk-... export BLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
OPENAI_API_KEY (hoặc khóa tương đương cho model được Agno hỗ trợ mà bạn dùng). BLOCKCHAIN0X_API_KEY là khóa sk_test_ testnet hoặc sk_live_ mainnet từ dashboard của bạn; client sẽ đọc khóa này từ biến môi trường. Nếu agent của bạn cũng nhận tiền, webhook handler còn cần thêm BLOCKCHAIN0X_WEBHOOK_SECRET.
Một Bộ công cụ trả tiền, được đưa cho một Đại lý.
Dưới đây là toàn bộ tích hợp. WalletTools là một lớp con của Toolkit đăng ký send_usdc, gọi đến khách hàng blockchain0x thực. Thêm nó vào Agent và cuộc gọi run() điều phối việc gọi công cụ. Agno đọc chữ ký phương thức và docstring để xây dựng sơ đồ.
from agno.agent import Agent from agno.models.openai import OpenAIChat from agno.tools import Toolkit from blockchain0x import Client blockchain0x = Client() # reads BLOCKCHAIN0X_API_KEY from the environment # Wrap the real client in an Agno Toolkit. No dedicated package needed. class WalletTools(Toolkit): def __init__(self): super().__init__(name="wallet_tools") self.register(self.send_usdc) def send_usdc(self, 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}) ) agent = Agent( model=OpenAIChat(id="gpt-4o"), tools=[WalletTools()], instructions=["You pay vendor invoices in USDC within owner-set limits."], ) result = agent.run("Pay 0.01 USDC from agent agt_123 to 0xVendor for the dataset.") print(result.content)
When agent.run() executes, the model decides to pay, 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_. Register more methods on the toolkit - read a wallet, settle an invoice - the same way.
Xác nhận các khoản thanh toán đến với một webhook đã ký.
Nếu tác nhân của bạn cũng nhận USDC, hãy xác nhận điều đó với webhook thay vì polling. Trợ giúp xác minh có trong Node SDK; trong một dịch vụ Python, bạn xác minh bằng tay theo HMAC đã được tài liệu hóa, đó là tất cả những gì trợ giúp làm. Ví dụ FastAPI bên dưới; cùng một mã hoạt động trong bất kỳ khung Python bất đồng bộ nào.
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 - run the next step 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 Agno để 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 các phương thức của toolkit.
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 toolkit hoạt động đúng như bạn mong đợi.
Năm điều cụ thể về Agno cần chú ý.
Agno là một trong những khung đại lý dễ tích hợp nhất, nhưng nó có những điểm cần lưu ý riêng - đặc biệt là xung quanh việc đổi tên Phidata và việc render markdown.
Không có gói Agno - bạn bọc SDK trong một Toolkit
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 Agno chuyên dụng. Công thức ở trên là con đường: một lớp con của Toolkit đăng ký một phương thức gọi đến khách hàng blockchain0x thực. Agno đọc chữ ký phương thức và docstring để xây dựng sơ đồ công cụ, vì vậy hãy giữ docstring chính xác.
Nhầm lẫn trong việc chuyển đổi từ Phidata sang Agno
Agno đã được đổi tên từ Phidata vào năm 2024. Các mã nguồn cũ nhập từ phi.agent hoặc phi.tools vẫn hoạt động thông qua một lớp tương thích, nhưng các nhập agno.* là các nhập hiện tại. Công thức sử dụng agno.* xuyên suốt; nếu mã của bạn vẫn đang sử dụng các nhập phi.*, hãy chạy pip install -U agno và chuyển đổi các đường dẫn nhập trước khi thêm Toolkit.
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 (6 decimals), so 0.01 USDC is "10000" and 5 USDC is "5000000". Type the method argument as str. It also does not retry by default and can answer 503 until the chain adapter is wired for your network - return a clear message rather than letting the agent loop.
Chạy đồng bộ so với không đồng bộ
Agno hỗ trợ agent.run() (đồng bộ) và agent.arun() (không đồng bộ). Chọn một chế độ cho mỗi đại lý - gọi agent.run() và cố gắng chờ kết quả và bạn nhận được một coroutine nơi bạn mong đợi một chuỗi. Lời gọi blockchain0x bên trong Toolkit là đồng bộ; nếu bạn đang ở trên đường dẫn không đồng bộ và di chuyển khối lượng thực, hãy bao bọc nó bằng asyncio.to_thread để vòng lặp sự kiện vẫn phản hồi.
Xác minh các webhook với thân dữ liệu thô
Nếu tác nhân của bạn cũng nhận USDC, hãy xác nhận điều đó với webhook, không phải bằng cách polling. Xác minh chữ ký trên các byte yêu cầu RAW (await request.body()), không bao giờ request.json() được tái tuần tự hóa, vì HMAC bao phủ các byte chính xác. Nó là HMAC-SHA256 với một cửa sổ phát lại 300 giây. Bộ xử lý bên dưới là toàn bộ.