การรวมการชำระเงิน AutoGen.
ไม่มีแพ็คเกจ AutoGen และคุณไม่ต้องการมัน ห่อหุ้มไคลเอนต์ blockchain0x จริงในฟังก์ชัน มอบให้กับตัวแทนของคุณ และมันสามารถย้าย USDC บน Base.
ไม่มีแพ็กเกจเฉพาะของ AutoGen และคุณก็ไม่จำเป็นต้องมี AutoGen แปลงฟังก์ชัน typed แบบธรรมดาให้เป็น tool อยู่แล้ว ดังนั้นคุณจึงห่อ Python client ของจริงไว้ในฟังก์ชัน ส่งให้ ผ่าน แล้ว agent จะสามารถส่ง USDC, ชำระใบแจ้งหนี้ และอ่าน wallets บน Base ได้ ตั้งค่า แล้วเริ่มได้เลย
AutoGen ทำให้ฟังก์ชันเป็นเครื่องมืออยู่แล้ว ใช้สิ่งนั้น
AutoGen สร้างสคีมาของเครื่องมือโดยตรงจากลายเซ็นและ docstring ของฟังก์ชัน Python อะแดปเตอร์ AutoGen ที่เฉพาะเจาะจงจะห่อหุ้มฟังก์ชันที่เราจะเขียนอยู่แล้ว จากนั้นจึงหลุดออกจากการซิงค์กับ API ที่เคลื่อนไหวอย่างรวดเร็วของ AutoGen ดังนั้นเราจึงไม่ส่งมอบหนึ่ง คุณเขียนไม่กี่บรรทัดที่เรียกไคลเอนต์ blockchain0x จริง และคุณควบคุมอาร์กิวเมนต์ การตรวจสอบ และการจัดการข้อผิดพลาดได้อย่างเต็มที่
นี่คือไคลเอนต์เดียวกันที่ตัวปรับ LangChain และ CrewAI ที่จัดส่งห่อหุ้มอยู่ภายใต้ฝาก ที่นี่คุณห่อหุ้มมันด้วยตัวคุณเอง ซึ่งหมายความว่าไม่มีเวอร์ชันตัวปรับให้ติดตามและไม่มีอะไรระหว่างตัวแทนของคุณและ API นอกจากฟังก์ชันของคุณเอง ทีมหลายตัวแทนทำงานในลักษณะเดียวกัน: มอบฟังก์ชันกระเป๋าเงินให้กับตัวแทนหนึ่งตัว ปล่อยให้คนอื่นไม่มีมัน และอำนาจการใช้จ่ายจะอยู่ในที่เดียว.
ติดตั้ง AutoGen และ SDK หลัก โดยมีตัวแปรสภาพแวดล้อมหนึ่งตัว
ไม่มีแพ็คเกจ AutoGen เฉพาะที่จะเพิ่ม คุณติดตั้ง AutoGen (Python 3.10+) และ SDK หลัก blockchain0x จริง จากนั้นเขียนฟังก์ชันด้านล่าง นั่นคือรายการการพึ่งพาทั้งหมด.
pip install autogen-agentchat "autogen-ext[openai]" blockchain0x
export BLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
BLOCKCHAIN0X_API_KEY คือคีย์ sk_test_ สำหรับ testnet หรือ sk_live_ สำหรับ mainnet จากแดชบอร์ดของคุณ โดย client จะอ่านค่าจาก environment หากเอเจนต์ของคุณรับเงินด้วย webhook handler ยังต้องใช้ BLOCKCHAIN0X_WEBHOOK_SECRET เพิ่มเติม ซึ่งแดชบอร์ดจะแสดงให้เห็นเพียงครั้งเดียวเมื่อคุณสร้างหรือหมุนเวียน webhook
ฟังก์ชันที่จ่ายเงิน ส่งให้กับ AssistantAgent.
ด้านล่างคือการรวมทั้งหมด send_usdc เรียกไคลเอนต์ blockchain0x จริง; AssistantAgent(tools=[send_usdc]) เปลี่ยนมันให้เป็นเครื่องมือที่โมเดลสามารถเรียกได้ AutoGen อ่านการชี้แนะประเภทและ docstring เพื่อสร้างสคีมา ดังนั้นให้รักษาความซื่อสัตย์ รันมันและเอเจนต์จะย้าย USDC บน Base
from autogen_agentchat.agents import AssistantAgent from autogen_ext.models.openai import OpenAIChatCompletionClient from blockchain0x import Client blockchain0x = Client() # reads BLOCKCHAIN0X_API_KEY from the environment # AutoGen turns a plain typed function into a tool. No dedicated package needed. 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. """ result = blockchain0x.payments.create( body={"agentId": agent_id, "to": to, "amountWei": amount_wei}, ) return str(result) treasurer = AssistantAgent( name="treasurer", model_client=OpenAIChatCompletionClient(model="gpt-4o"), tools=[send_usdc], system_message="You pay vendor invoices in USDC within owner-set limits.", ) result = await treasurer.run( task="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_. Add more functions - read a wallet, settle an invoice - the same way; each becomes another entry in tools.
ยืนยันการชำระเงินขาเข้าด้วย 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, RQ, arq) และตอบกลับ 200 ทันทีแทนที่จะบล็อกตัวจัดการ
ไคลเอนต์ที่คุณกำลังห่อหุ้มอยู่เปิดอยู่ อ่านมัน.
ไม่มี starter package ของ AutoGen ให้ clone - สูตรด้านบนคือการเชื่อมต่อจริง SDK ของ blockchain0x เป็น open source บน GitHub; สูตรนี้ห่อหุ้ม Python SDK (blockchain0x-python) โดยมี surface ของเมธอดทั้งหมดอยู่ใน docs อ่านไว้เป็นตัวอย่างอ้างอิงสำหรับ body ของฟังก์ชัน
github.com/tosh-labs/blockchain0x-pythonsurface ของเมธอดใน SDK และ scopes ทั้งหมดถูกอธิบายไว้ที่ the docs. เริ่มด้วยคีย์ sk_test_ บน Base Sepolia ก่อน แล้วค่อยสลับเป็น sk_live_ เมื่อฟังก์ชันทำงานได้ตามที่คุณคาดไว้
ห้าหมายที่เกี่ยวกับการสนทนากลุ่มและแบบอะซิงโครนัสที่ควรหลีกเลี่ยง
การออกแบบหลายตัวแทน + แบบอะซิงโครนัสของ AutoGen ปลดล็อกรูปแบบที่ทรงพลังแต่ก็มีข้อควรระวังของมันเอง. สิ่งเหล่านี้มาจากกล่องจดหมายสนับสนุนของเรา.
ไม่มีแพ็คเกจ AutoGen - คุณห่อหุ้ม SDK
Blockchain0x ส่งอะแดปเตอร์สำหรับ LangChain และ CrewAI พร้อมกับเซิร์ฟเวอร์ MCP; ไม่มีแพ็คเกจ AutoGen ที่เฉพาะเจาะจง สูตรข้างต้นคือเส้นทางที่สนับสนุน: ฟังก์ชันที่มีประเภทธรรมดาที่เรียกใช้ไคลเอนต์ blockchain0x ที่แท้จริง ส่งให้กับ AssistantAgent(tools=[...]) AutoGen อ่านลายเซ็นของฟังก์ชันและ docstring เพื่อสร้างสคีมาของเครื่องมือ ดังนั้นให้เก็บ docstring ให้ถูกต้อง.
จำนวนเงินเป็นหน่วยพื้นฐานของ USDC, ในรูปแบบสตริง
payments.create takes amountWei: a string of USDC base units, not a float and not a dollar figure. USDC has 6 decimals, so 0.01 USDC is "10000" and 5 USDC is "5000000". Type the tool argument as str and validate it before the call - a float that sneaks through either errors at the backend or moves a millionth of what you meant.
send_payment สามารถตอบ 503 ได้ในระยะเริ่มต้น
payments.create จะไม่ลองใหม่โดยค่าเริ่มต้นและสามารถส่งคืน 503 จนกว่าตัวแปลงเครือข่ายจะถูกเชื่อมต่อ อย่าปล่อยให้การสนทนากลุ่มวนซ้ำในกรณีที่การชำระเงินล้มเหลว - จับข้อผิดพลาดในฟังก์ชันของคุณ ส่งคืนข้อความที่ชัดเจนที่โมเดลสามารถดำเนินการได้ และพึ่งพาคีย์ idempotency ที่สร้างโดยอัตโนมัติเพื่อให้การลองใหม่ด้วยตนเองไม่จ่ายสองครั้ง
AutoGen 0.4+ เป็นแบบอะซิงค์; การเรียก SDK เป็นแบบซิงค์
AutoGen 0.4 รันเครื่องมือในลูปอะซิงค์ การเรียกไคลเอนต์ blockchain0x เป็นแบบซิงค์ ซึ่งใช้ได้สำหรับการร้องขออย่างรวดเร็ว แต่การเรียกที่ช้าจะบล็อกลูป หากคุณมีปริมาณจริง ให้ห่อหุ้มการเรียก SDK ด้วย asyncio.to_thread เพื่อให้ลูปเหตุการณ์ยังคงตอบสนอง สำหรับการชำระเงินเพียงครั้งเดียวต่อเทิร์น การเรียกโดยตรงก็ใช้ได้
ตรวจสอบ webhook ที่เข้ามากับเนื้อหาดิบ
หากเอเจนต์ของคุณยัง RECEIVES เงิน, ยืนยันด้วย webhook, ไม่ใช่โดยการตรวจสอบ. ตรวจสอบลายเซ็นเหนือไบต์คำขอ RAW (await request.body()), ไม่เคย request.json() ที่ถูกสร้างใหม่, เพราะ HMAC จะครอบคลุมไบต์ที่แน่นอน. มันคือ HMAC-SHA256 พร้อมหน้าต่างการเล่นซ้ำ 300 วินาที. ตัวจัดการด้านล่างคือทั้งหมด.