ข้ามไปยังเนื้อหาหลัก
การรวม CREWAI

การรวมการชำระเงิน 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-crewai
ตัวแปรสภาพแวดล้อม
export 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 และเอเจนต์นักวิจัยใช้ผลลัพธ์ ผู้ดูแลการเงินถือเครื่องมือกระเป๋าเงิน; นักวิจัยไม่มีเครื่องมือใด ๆ นี่คือรูปแบบมาตรฐานสำหรับทีมที่ใช้จ่าย

CREW.PY
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 ใด ๆ

WEBHOOK_HANDLER.PY
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 หากทีมต้องการเพียงแค่ชำระเงิน ให้มอบให้เพียงรายการเดียวด้วยโรงงานเดียว

SINGLE_TOOL.PY
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 คือสิ่งที่ทำให้การรวมการชำระเงินสะอาดกว่ากรอบงานอื่น ๆ มันยังมีข้อผิดพลาดของตัวเอง การรู้สิ่งเหล่านี้ล่วงหน้าช่วยประหยัดเวลา

PITFALL 1

การใส่เครื่องมือกระเป๋าเงินในตัวแทนที่ผิด

เอเจนต์ CrewAI มีบทบาท มอบเครื่องมือกระเป๋าเงินให้กับนักวิจัย ซึ่งควรทำการวิจัย และ LLM เริ่มพยายามเคลื่อนย้ายเงินระหว่างการวิเคราะห์ รูปแบบที่ชัดเจนคือเอเจนต์ผู้ดูแลที่ถือเครื่องมือและทำงานเป็นงานของตนเอง; เอเจนต์ที่ทำงานไม่มีการเข้าถึงกระเป๋าเงินเลย ตัวอย่างข้างต้นติดตามรูปแบบนั้น คัดลอกมัน.

PITFALL 2

กระบวนการเชิงลำดับกับเชิงชั้น

CrewAI รองรับการดำเนินการแบบลำดับ (ค่าเริ่มต้น) และแบบลำดับชั้น ด้วยลำดับชั้น เอเจนต์ผู้จัดการจะควบคุมทีม หากผู้จัดการได้รับอนุญาตให้มอบเครื่องมือกระเป๋าเงิน มันสามารถส่งให้กับผู้ใต้บังคับบัญชาใด ๆ ซึ่งเป็นสิ่งที่คุณไม่ต้องการสำหรับอำนาจการใช้จ่าย ให้เก็บเครื่องมือไว้ที่เอเจนต์ที่กำหนดไว้หนึ่งคนและทำงานแบบลำดับ หรือจำกัดกฎการมอบหมายของผู้จัดการ.

PITFALL 3

อ่านสถานะการชำระเงินจากบริบทของงาน

การชำระเงินขาเข้าคือแบบอะซิงโครนัส. หากงานวิจัยระบุงานชำระเงินในบริบทของมัน (ดี) แต่ LLM พยายามอ่านสถานะการชำระเงินสุดท้ายจากบริบทนั้น (ไม่ดี, การยืนยันมาถึงทีหลังโดย webhook), คุณจะได้รับผลลัพธ์ที่สับสน. จัดการงานที่ตามมาบนสัญญาณที่กระตุ้นโดย webhook, ไม่ใช่จากบริบทของงาน. การเรียกกลับของ CrewAI เป็นจุดเชื่อมที่ถูกต้อง.

PITFALL 4

จำนวนเงินเป็นหน่วยพื้นฐานของ 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.

PITFALL 5

Webhook handler นอกกระบวนการทีม

ตัวจัดการ webhook ของคุณมักจะเป็นกระบวนการ Flask หรือ FastAPI แยกต่างหาก ไม่ใช่ส่วนหนึ่งของการทำงานของทีม ทีมจะเสร็จสิ้น kickoff() และส่งคืน; webhook จะลงจอดในภายหลังเมื่อการชำระเงินตั้งอยู่ เชื่อมโยงทั้งสองด้วยคิวหรือแถวฐานข้อมูลที่ webhook เขียนและทีมอ่านในการทำงานครั้งถัดไป อย่ารักษาทีมให้มีชีวิตอยู่รอ webhook - การทำงานของ CrewAI มีอายุสั้นตามการออกแบบ

คำถามที่พบบ่อย

สามคำถามเฉพาะ CrewAI.

สิ่งนี้ทำงานกับ CrewAI Flows (การดำเนินการแบบกราฟที่ใหม่กว่า) หรือไม่?

ใช่ create_blockchain0x_toolset ส่งคืนเครื่องมือ CrewAI มาตรฐาน ดังนั้นพวกเขาจึงทำงานในโครงสร้าง Crew + Task คลาสสิกและในรูปแบบ @start/@listen ของ CrewAI Flow ใน Flow ให้ใส่ขั้นตอนการชำระเงินหรือการตั้งถิ่นฐานในขั้นตอนผู้ดูแลที่กำหนดไว้ก่อนขั้นตอนการทำงาน และให้ขั้นตอนการทำงานฟังเหตุการณ์ Flow ที่เกิดขึ้นเมื่อใดก็ตามที่ตัวจัดการ webhook ของคุณอัปเดตสถานะที่ใช้ร่วมกัน

ทีมเดียวกันสามารถทำงานที่ชำระเงินหลายงานพร้อมกันได้หรือไม่?

ใช่ payments.create (ซึ่ง blockchain0x_send_payment ห่อหุ้ม) จะสร้าง Idempotency-Key ที่เสถียรโดยอัตโนมัติ ดังนั้นการส่งซ้ำจะยุบลงเป็นการโอนบนเครือข่ายเดียวแทนที่จะจ่ายสองครั้ง หากคุณกระจายการเริ่มต้นที่เกิดขึ้นพร้อมกันแต่ละรายการที่เคลื่อนย้ายเงิน ให้แต่ละรายการมีเจตนาของตนเอง (ผู้รับหรือเมตาดาต้าที่แตกต่างกัน) เพื่อไม่ให้ดูเหมือนเป็นการทำซ้ำกัน คุณไม่ต้องจัดการส่วนหัว idempotency ด้วยตนเอง เว้นแต่คุณต้องการลบข้อมูลที่ซ้ำกันข้ามกระบวนการ

ทีมสามารถชำระใบแจ้งหนี้ได้หรือไม่ และมีเครื่องมือคืนเงินหรือไม่?

มันสามารถชำระได้: blockchain0x_settle_invoice ชำระคำขอการชำระเงินที่คุณสร้างในแดชบอร์ดและบันทึกหลักฐานบนเชน (tx hash, ผู้จ่าย, จำนวน USDC ที่ตรวจสอบแล้ว) ไม่มีตัวช่วยคืนเงิน - ตัวระบุดังกล่าวไม่มีอยู่จริง เพื่อคืนเงินให้ผู้จ่าย ผู้ดูแลการเงินเพียงส่งการชำระเงิน USDC ใหม่กลับไปยังผู้จ่ายด้วย blockchain0x_send_payment เก็บสิ่งนั้นไว้ในบทบาทผู้ดูแลการเงินเพื่อให้สิทธิ์ในการใช้จ่ายอยู่ในที่เดียว

เพิ่มบทบาทการเรียกเก็บเงินให้กับทีมของคุณ

จากการติดตั้ง pip ถึงการเริ่มต้นทีมที่ต้องชำระเงินครั้งแรกในไม่กี่นาที. เริ่มต้นฟรี.