การรวมการชำระเงิน Agno.
ไม่มีแพ็คเกจ Agno และคุณไม่ต้องการมัน ห่อหุ้มไคลเอนต์ blockchain0x จริงใน Toolkit ขนาดเล็กและตัวแทนของคุณสามารถย้าย USDC บน Base - การทำให้เป็นนามธรรมขั้นต่ำ ตามแบบฉบับ Agno.
ไม่มีแพ็กเกจเฉพาะของ Agno และคุณก็ไม่จำเป็นต้องมี Agno เปลี่ยนเมธอด ให้เป็นเครื่องมือ ดังนั้นคุณจึงห่อ Python client ของจริงไว้ในชุดเครื่องมือขนาดเล็ก แล้วเพิ่มเข้าไปใน ของคุณ agent สามารถส่ง USDC, ชำระใบแจ้งหนี้ และอ่าน wallets ได้ ครอบคลุมทุกรุ่นของ Agno (OpenAI, Anthropic, DeepSeek, Llama, Mistral) การชำระเงินจะ settle บน Base
กรอบงาน Python ที่มีน้ำหนักเบา ไม่มีภาษีการทำให้เป็นนามธรรม
Agno (เดิมชื่อ Phidata) เป็นกรอบงานตัวแทนที่คุณเลือกใช้เมื่อคุณต้องการพิธีการน้อยที่สุด. ไม่มีการสร้างกราฟ, ไม่มี Crew, ไม่มี Workflow - มีเพียง Agent, Tools, และวิธีการ run(). Tools เป็น callable ของ Python. กรอบงานเพิ่มโครงสร้างที่เพียงพอในการเรียก LLMs ด้วยการสนับสนุนเครื่องมือ, จัดการหน่วยความจำ, และผลิตผลลัพธ์แบบสตรีม, แล้วออกจากทางคุณ.
สูตรนี้ปฏิบัติตามปรัชญาเดียวกัน คุณเขียนคลาสย่อย Toolkit ขนาดเล็กที่ลงทะเบียนวิธีการหนึ่งเรียกไคลเอนต์จริง - มันดูและทำงานเหมือนเครื่องมือ Agno อื่นๆ ไม่มีการตั้งค่าพิเศษนอกเหนือจากการสร้าง ไม่มีกราฟที่จะเชื่อมต่อ ไม่มีเวอร์ชันตัวปรับที่จะติดตาม ความเรียบง่ายคือจุดประสงค์: หากคุณต้องการกราฟคุณจะอยู่ใน LangGraph.
ติดตั้ง Agno และ SDK หลัก. สองกุญแจ.
ไม่มีแพ็คเกจ Agno ของ blockchain0x ที่จะเพิ่ม คุณติดตั้ง Agno (Python 3.10+, บรรทัด 1.0+ หลังจากการเปลี่ยนชื่อ Phidata) และ SDK หลัก blockchain0x จริง จากนั้นเขียน toolkit ด้านล่าง หากคุณยังคงใช้การนำเข้า phi.* ให้รัน pip install -U agno ก่อน.
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 (หรือค่าที่เทียบเท่าสำหรับโมเดลที่รองรับโดย Agno ที่คุณใช้งาน). BLOCKCHAIN0X_API_KEY คือคีย์ sk_test_ สำหรับ testnet หรือ sk_live_ สำหรับ mainnet จากแดชบอร์ดของคุณ; ฝั่ง client จะอ่านค่าจาก environment หากเอเจนต์ของคุณรับเงินด้วย handler ของ webhook จะต้องใช้ BLOCKCHAIN0X_WEBHOOK_SECRET เพิ่มเติมด้วย
A Toolkit ที่จ่ายเงิน ส่งให้กับตัวแทน.
ด้านล่างคือการรวมทั้งหมด WalletTools เป็นคลาสย่อยของ Toolkit ที่ลงทะเบียน send_usdc ซึ่งเรียกไคลเอนต์ blockchain0x จริง เพิ่มมันเข้าไปในเอเจนต์และการเรียก run() จะจัดการการเรียกเครื่องมือ Agno อ่านลายเซ็นของวิธีการและ docstring เพื่อสร้างสคีมา
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.
ยืนยันการชำระเงินขาเข้าด้วย webhook ที่ลงนาม.
หากเอเจนต์ของคุณยังได้รับ USDC, ยืนยันด้วย webhook แทนที่จะตรวจสอบ. ตัวช่วยยืนยันจะถูกส่งใน Node SDK; ในบริการ Python คุณจะตรวจสอบด้วยมือกับ HMAC ที่มีการบันทึก, ซึ่งเป็นสิ่งที่ตัวช่วยทำ. ตัวอย่าง FastAPI ด้านล่าง; โค้ดเดียวกันทำงานในกรอบ Python แบบ async ใด ๆ.
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}
อัลกอริธึมคือ HMAC-SHA256 บนสตริง t.rawBody การเปรียบเทียบในเวลาคงที่ และหน้าต่างการเล่นซ้ำ 300 วินาที อ่านร่างดิบผ่าน await request.body() ไม่เคย request.json() ที่ถูกถอดรหัสใหม่ เพราะจะเปลี่ยนไบต์ที่ลายเซ็นครอบคลุม เหตุการณ์ที่ส่งคือ payment.received, payment.sent, wallet.deployed และ webhook.test สำหรับงานติดตามที่หนัก ให้เพิ่มงานในคิว (Celery, arq) และตอบกลับ 200 ทันทีแทนที่จะบล็อกตัวจัดการ
ไคลเอนต์ที่คุณกำลังห่อหุ้มอยู่เปิดอยู่ อ่านมัน.
ไม่มี starter package ของ Agno ให้ clone - สูตรด้านบนคือการเชื่อมต่อจริง SDK ของ blockchain0x เป็น open source บน GitHub; สูตรนี้ห่อหุ้ม Python SDK (blockchain0x-python) โดยมี surface ของเมธอดทั้งหมดอยู่ใน docs อ่านไว้เป็นตัวอย่างอ้างอิงสำหรับเมธอดของ toolkit
github.com/tosh-labs/blockchain0x-pythonsurface ของเมธอดใน SDK และ scopes ทั้งหมดถูกอธิบายไว้ที่ the docs. เริ่มด้วยคีย์ sk_test_ บน Base Sepolia ก่อน แล้วค่อยสลับเป็น sk_live_ เมื่อ toolkit ทำงานได้ตามที่คุณคาดไว้
ห้าสิ่งที่เฉพาะเจาะจงเกี่ยวกับ Agno ที่ควรระวัง
Agno เป็นหนึ่งในกรอบงานตัวแทนที่สะอาดที่สุดในการรวมเข้าด้วยกัน, แต่มีข้อควรระวังของมันเอง - โดยเฉพาะอย่างยิ่งเกี่ยวกับการเปลี่ยนชื่อ Phidata และการเรนเดอร์ markdown.
ไม่มีแพ็คเกจ Agno - คุณห่อหุ้ม SDK ใน Toolkit
Blockchain0x ส่งอะแดปเตอร์สำหรับ LangChain และ CrewAI พร้อมกับเซิร์ฟเวอร์ MCP; ไม่มีแพ็คเกจ Agno ที่เฉพาะเจาะจง สูตรข้างต้นคือเส้นทาง: คลาสย่อย Toolkit ที่ลงทะเบียนวิธีการเรียกใช้ไคลเอนต์ blockchain0x ที่แท้จริง Agno อ่านลายเซ็นของวิธีการและ docstring เพื่อสร้างสคีมาของเครื่องมือ ดังนั้นให้เก็บ docstring ให้ถูกต้อง.
ความสับสนในการย้ายจาก Phidata ไปยัง Agno
Agno เปลี่ยนชื่อจาก Phidata ในปี 2024 โค้ดเบสเก่าที่นำเข้าจาก phi.agent หรือ phi.tools ยังคงทำงานได้ผ่าน shim ความเข้ากันได้ แต่การนำเข้า agno.* เป็นการนำเข้าสมัย สูตรใช้ agno.* ตลอด; หากโค้ดของคุณยังอยู่ในการนำเข้า phi.* ให้รัน pip install -U agno และเปลี่ยนเส้นทางการนำเข้าก่อนเพิ่ม Toolkit
จำนวนเงินเป็นหน่วยพื้นฐานของ USDC, ในรูปแบบสตริง
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.
การทำงานแบบซิงค์ vs อะซิงค์
Agno รองรับ agent.run() (ซิงค์) และ agent.arun() (อะซิงค์) เลือกโหมดหนึ่งต่อเอเจนต์ - เรียก agent.run() และพยายามรอผลลัพธ์และคุณจะได้ coroutine ในขณะที่คุณคาดหวังว่าจะได้สตริง การเรียก blockchain0x ภายใน Toolkit เป็นแบบซิงค์; หากคุณอยู่ในเส้นทางอะซิงค์และมีปริมาณจริง ให้ห่อหุ้มด้วย asyncio.to_thread เพื่อให้ลูปเหตุการณ์ยังคงตอบสนอง
ตรวจสอบ webhook กับเนื้อหาดิบ
หากเอเจนต์ของคุณยังได้รับ USDC, ยืนยันด้วย webhook, ไม่ใช่โดยการตรวจสอบ. ตรวจสอบลายเซ็นเหนือไบต์คำขอ RAW (await request.body()), ไม่เคย request.json() ที่ถูกสร้างใหม่, เพราะ HMAC จะครอบคลุมไบต์ที่แน่นอน. มันคือ HMAC-SHA256 พร้อมหน้าต่างการเล่นซ้ำ 300 วินาที. ตัวจัดการด้านล่างคือทั้งหมด.