การรวมการชำระเงิน CrewAI.
ให้กระเป๋าเงินกับทีม CrewAI. เอเจนต์ที่ทำหน้าที่เป็นเหรัญญิกจะส่ง USDC, ชำระใบแจ้งหนี้, และอ่านยอดคงเหลือในขณะที่เอเจนต์ทำงานยังคงมุ่งเน้นที่งาน.
Blockchain0x มี Python package จริงชื่อ ติดตั้งมัน ตั้งค่า เรียก แล้วส่งเครื่องมือให้เอเจนต์ treasurer โดยเฉพาะ เอเจนต์นั้นสามารถส่ง USDC, ชำระ invoice พร้อมหลักฐานบนเชน, และอ่านวอลเล็ทได้ ขณะที่เอเจนต์ที่ทำงานอื่นๆ ในทีมจะไม่มีสิทธิ์เข้าถึงวอลเล็ทเลย USDC ทำ settlement บน Base
จุดแข็งของ CrewAI คือการแยกบทบาท ใช้สำหรับกระเป๋าเงินด้วย.
เฟรมเวิร์กอื่นๆ รวมเครื่องมือทุกอย่างไว้ในตัวแทนเดียว การออกแบบของ CrewAI สนับสนุนการแยกบทบาท: นักวิจัยทำการวิจัย, นักเขียนเขียน, ผู้ตรวจสอบตรวจสอบ เงินก็ควรได้รับการปฏิบัติแบบเดียวกัน - ตัวแทนการเงินที่มีหน้าที่เฉพาะถือเครื่องมือกระเป๋าเงิน และตัวแทนที่ทำงานไม่มีเครื่องมือใดๆ อำนาจการใช้จ่ายอยู่ในที่เดียวแทนที่จะรั่วไหลไปยังตัวแทนทุกตัวที่อยู่ในทีม.
รูปร่างนี้ยังทำให้เส้นทางการตรวจสอบชัดเจนขึ้น เมื่อ USDC เคลื่อนที่ คุณจะรู้ว่าตัวแทนใดที่ย้ายมัน (ผู้ดูแลการเงิน) และงานใดที่มันทำ (งานที่ส่งต่อให้กับมัน) การรวมตัวแทนเดียวทำให้เส้นนั้นเบลอและทำให้การวิเคราะห์การใช้จ่ายต่อการทำงานยากขึ้น.
ติดตั้ง pip หนึ่งครั้ง ตัวแปรสภาพแวดล้อมหนึ่งตัว
แพ็คเกจต้องการ Python 3.10 หรือใหม่กว่าและทำงานร่วมกับ poetry หรือ pip มันดึง SDK blockchain0x หลักและ crewai เป็นการพึ่งพา ไม่มีอะไรเพิ่มเติม.
pip install blockchain0x-crewaiexport BLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
BLOCKCHAIN0X_API_KEY คือคีย์ sk_test_ สำหรับ testnet หรือ sk_live_ สำหรับ mainnet จากแดชบอร์ด Blockchain0x ของคุณ และเป็นตัวแปรเพียงตัวเดียวที่ adapter ต้องใช้ - มันส่งคีย์ไปยัง backend และไม่ได้เก็บ secret ใดของตัวเอง สำหรับ webhook handler ด้านล่าง คุณต้องตั้งค่า BLOCKCHAIN0X_WEBHOOK_SECRET เพิ่มเติมด้วย ซึ่งแดชบอร์ดจะแสดงให้เห็นเพียงครั้งเดียวเมื่อคุณสร้างหรือหมุนเวียน webhook
ทีมตัวแทนสองคนที่ทำงานได้พร้อมบทบาทการเรียกเก็บเงิน + การวิจัย
ด้านล่างคือทีม CrewAI ที่สมบูรณ์ซึ่งเอเจนต์ผู้ดูแลการเงินจ่ายเงินให้กับผู้ขายข้อมูลใน USDC และเอเจนต์นักวิจัยใช้ผลลัพธ์ ผู้ดูแลการเงินถือเครื่องมือกระเป๋าเงิน; นักวิจัยไม่มีเครื่องมือใด ๆ นี่คือรูปแบบมาตรฐานสำหรับทีมที่ใช้จ่าย
from crewai import Agent, Task, Crew from blockchain0x import Client from blockchain0x_crewai import create_blockchain0x_toolset client = Client() # reads BLOCKCHAIN0X_API_KEY from the environment tools = create_blockchain0x_toolset(client) # A dedicated treasurer holds the wallet tools; the work agents do not. treasurer = Agent( role="Treasurer", goal="Pay vendor invoices in USDC within owner-set limits", backstory="Operates a Blockchain0x agent wallet on Base.", tools=tools, allow_delegation=False, ) researcher = Agent( role="Senior Market Analyst", goal="Produce a thorough Q4 LLM market analysis", backstory="A specialist analyst with 10 years in tech-market research.", tools=[], allow_delegation=False, ) pay_task = Task( description="Pay 0.01 USDC from our agent wallet to the data vendor at 0xVendor.", expected_output="The transaction hash of the settled payment.", agent=treasurer, ) research_task = Task( description="Using the purchased dataset, write the Q4 LLM market analysis.", expected_output="A 1,500-word market analysis.", agent=researcher, context=[pay_task], ) crew = Crew(agents=[treasurer, researcher], tasks=[pay_task, research_task]) result = crew.kickoff()
When you call crew.kickoff(), the pay_task runs first: the treasurer calls blockchain0x_send_payment, the SDK submits the transfer on Base, and the transaction hash is the task output. The research_task runs next and uses the purchased result. amount_wei is USDC base units, so 0.01 USDC is the string "10000". On a sk_test_ key the whole flow runs on Base Sepolia, and payments.create can answer 503 until the chain adapter is wired for your network.
กระตุ้นทีมถัดไปเมื่อการชำระเงินเข้ามา
เมื่อ USDC เข้าสู่ตัวแทนของคุณ Blockchain0x POST เหตุการณ์ที่ลงนามไปยัง URL webhook ของคุณ ตัวช่วยการตรวจสอบจะถูกส่งใน Node SDK; บริการ Python จะตรวจสอบด้วยมือกับ HMAC ที่บันทึกไว้ ซึ่งเป็นสิ่งที่ตัวช่วยทำอยู่แล้ว ตัวอย่าง Flask ด้านล่าง; โค้ดเดียวกันทำงานใน FastAPI หรือเฟรมเวิร์กเว็บ Python ใด ๆ
import hmac, hashlib, os, time from flask import Flask, request, abort app = Flask(__name__) SECRET = os.environ["BLOCKCHAIN0X_WEBHOOK_SECRET"].encode() @app.post("/webhooks/payment") def receive(): raw = request.get_data() # RAW bytes - do not parse first sig = request.headers.get("X-Blockchain0x-Signature", "") ts = request.headers.get("X-Blockchain0x-Timestamp", "") # Header is "t=<unix>,v1=<hex>"; some proxies send bare hex + the ts header. 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: abort(401) if request.headers.get("X-Blockchain0x-Event-Type") == "payment.received": run_followup_for(request.get_json()) # USDC landed - do the work return "ok", 200
นี่คืออัลกอริธึมที่แท้จริง: HMAC-SHA256 บนสตริง t.rawBody การเปรียบเทียบแบบเวลาคงที่ และหน้าต่างการเล่นซ้ำ 300 วินาที อ่านร่างดิบ (request.get_data()), อย่าใช้ request.get_json() ที่ถูกเรียงใหม่ เพราะมันเปลี่ยนไบต์ที่ลายเซ็นครอบคลุม สถาปัตยกรรม: ให้ตัวจัดการเพิ่มงาน (Celery, RQ, รายการ Redis) ที่กระตุ้นการทำงาน CrewAI ที่แท้จริง การเรียก crew.kickoff() ภายในตัวจัดการอาจใช้เวลาหลายและทำให้คำขอ HTTP หมดเวลา.
มอบเครื่องมือทั้งหมดให้กับทีม, หรือเพียงแค่เครื่องมือเดียว.
create_blockchain0x_toolset ส่งคืนเครื่องมือทั้งห้าชิ้น: blockchain0x_send_payment, blockchain0x_settle_invoice, blockchain0x_get_wallet, blockchain0x_list_wallets, และ blockchain0x_get_transaction หากทีมต้องการเพียงแค่ชำระเงิน ให้มอบให้เพียงรายการเดียวด้วยโรงงานเดียว
from blockchain0x_crewai import create_payment_tool pay = create_payment_tool(client) # amount_wei is USDC base units: 6 decimals, so 10000 = 0.01 USDC. pay.run(agent_id="agt_123", to="0xRecipient", amount_wei="10000")
factories สำหรับแต่ละ capability คือ create_payment_tool, create_invoice_tool, create_wallet_tool, create_wallets_list_tool, และ create_transaction_tool ตัวอย่างซอร์สโค้ดและ testnet อยู่ที่ the Python SDK repo; ตารางรองรับ CrewAI อยู่ที่ the docs
ห้าสิ่งที่ควรระวังเมื่อเชื่อมต่อการเรียกเก็บเงินเข้ากับทีม
การออกแบบตามบทบาทของ CrewAI คือสิ่งที่ทำให้การรวมการชำระเงินสะอาดกว่ากรอบงานอื่น ๆ มันยังมีข้อผิดพลาดของตัวเอง การรู้สิ่งเหล่านี้ล่วงหน้าช่วยประหยัดเวลา
การใส่เครื่องมือกระเป๋าเงินในตัวแทนที่ผิด
เอเจนต์ CrewAI มีบทบาท มอบเครื่องมือกระเป๋าเงินให้กับนักวิจัย ซึ่งควรทำการวิจัย และ LLM เริ่มพยายามเคลื่อนย้ายเงินระหว่างการวิเคราะห์ รูปแบบที่ชัดเจนคือเอเจนต์ผู้ดูแลที่ถือเครื่องมือและทำงานเป็นงานของตนเอง; เอเจนต์ที่ทำงานไม่มีการเข้าถึงกระเป๋าเงินเลย ตัวอย่างข้างต้นติดตามรูปแบบนั้น คัดลอกมัน.
กระบวนการเชิงลำดับกับเชิงชั้น
CrewAI รองรับการดำเนินการแบบลำดับ (ค่าเริ่มต้น) และแบบลำดับชั้น ด้วยลำดับชั้น เอเจนต์ผู้จัดการจะควบคุมทีม หากผู้จัดการได้รับอนุญาตให้มอบเครื่องมือกระเป๋าเงิน มันสามารถส่งให้กับผู้ใต้บังคับบัญชาใด ๆ ซึ่งเป็นสิ่งที่คุณไม่ต้องการสำหรับอำนาจการใช้จ่าย ให้เก็บเครื่องมือไว้ที่เอเจนต์ที่กำหนดไว้หนึ่งคนและทำงานแบบลำดับ หรือจำกัดกฎการมอบหมายของผู้จัดการ.
อ่านสถานะการชำระเงินจากบริบทของงาน
การชำระเงินขาเข้าคือแบบอะซิงโครนัส. หากงานวิจัยระบุงานชำระเงินในบริบทของมัน (ดี) แต่ LLM พยายามอ่านสถานะการชำระเงินสุดท้ายจากบริบทนั้น (ไม่ดี, การยืนยันมาถึงทีหลังโดย webhook), คุณจะได้รับผลลัพธ์ที่สับสน. จัดการงานที่ตามมาบนสัญญาณที่กระตุ้นโดย webhook, ไม่ใช่จากบริบทของงาน. การเรียกกลับของ CrewAI เป็นจุดเชื่อมที่ถูกต้อง.
จำนวนเงินเป็นหน่วยพื้นฐานของ USDC, ในรูปแบบสตริง
blockchain0x_send_payment takes amount_wei: a string of USDC base units, not a float and not a dollar figure. USDC has 6 decimals, so 0.01 USDC is "10000". CrewAI passes tool inputs through as-is, so a Python float arrives as a float and the SDK rejects it - but the error reads like a CrewAI tool error, which throws off first integrators. Pass a string.
Webhook handler นอกกระบวนการทีม
ตัวจัดการ webhook ของคุณมักจะเป็นกระบวนการ Flask หรือ FastAPI แยกต่างหาก ไม่ใช่ส่วนหนึ่งของการทำงานของทีม ทีมจะเสร็จสิ้น kickoff() และส่งคืน; webhook จะลงจอดในภายหลังเมื่อการชำระเงินตั้งอยู่ เชื่อมโยงทั้งสองด้วยคิวหรือแถวฐานข้อมูลที่ webhook เขียนและทีมอ่านในการทำงานครั้งถัดไป อย่ารักษาทีมให้มีชีวิตอยู่รอ webhook - การทำงานของ CrewAI มีอายุสั้นตามการออกแบบ