Tích hợp thanh toán CrewAI.
Cung cấp cho một nhóm CrewAI một ví. Một tác nhân thủ quỹ chuyên dụng gửi USDC, thanh toán hóa đơn và đọc số dư trong khi các tác nhân làm việc vẫn tập trung vào công việc.
Blockchain0x cung cấp một Python package thực, . Cài đặt nó, đặt , gọi , rồi chuyển các công cụ đó cho một agent thủ quỹ chuyên trách. Agent đó có thể gửi USDC, thanh toán hóa đơn với bằng chứng on-chain, và đọc ví, trong khi các work agent trong đội không có quyền truy cập ví. USDC được tất toán trên Base.
Sức mạnh của CrewAI là sự phân tách vai trò. Sử dụng nó cho ví cũng vậy.
Các khung khác xếp chồng mọi công cụ lên một tác nhân duy nhất. Thiết kế của CrewAI khuyến khích sự tách biệt vai trò: một nhà nghiên cứu nghiên cứu, một nhà văn viết, một người đánh giá đánh giá. Tiền cũng xứng đáng được đối xử như vậy - một tác nhân thủ quỹ chuyên dụng giữ các công cụ ví, và các tác nhân công việc không giữ gì cả. Quyền chi tiêu sống ở một nơi thay vì rò rỉ qua mọi tác nhân có mặt trong nhóm.
Hình dạng này cũng làm cho các dấu vết kiểm toán trở nên rõ ràng hơn. Khi USDC di chuyển, bạn biết chính xác đại lý nào đã di chuyển nó (thủ quỹ) và nhiệm vụ nào nó phục vụ (nhiệm vụ đã chuyển giao cho nó). Các tích hợp đơn đại lý làm mờ ranh giới đó và làm cho phân tích chi tiêu theo nhiệm vụ trở nên khó khăn hơn.
Một cài đặt pip. Một biến môi trường.
Gói cần Python 3.10 hoặc mới hơn và hoạt động với poetry hoặc pip. Nó kéo vào SDK blockchain0x cốt lõi và crewai làm phụ thuộc; không cần thêm gì khác.
pip install blockchain0x-crewaiexport BLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
BLOCKCHAIN0X_API_KEY là một khóa sk_test_ testnet hoặc sk_live_ mainnet từ dashboard Blockchain0x của bạn, và đó là biến duy nhất mà adapter cần - nó chuyển tiếp khóa này tới backend và không giữ secret nào của riêng nó. Với webhook handler bên dưới, bạn cũng đặt BLOCKCHAIN0X_WEBHOOK_SECRET, giá trị này dashboard chỉ trả về một lần khi bạn tạo hoặc xoay vòng một webhook.
Một đội hai tác nhân hoạt động với vai trò thanh toán + nghiên cứu.
Dưới đây là một đội CrewAI hoàn chỉnh nơi một đại lý thủ quỹ thanh toán cho một nhà cung cấp dữ liệu bằng USDC, và một đại lý nghiên cứu sử dụng kết quả. Thủ quỹ giữ các công cụ ví; nhà nghiên cứu không giữ gì cả. Đây là mẫu điển hình cho một đội chi tiêu.
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.
Kích hoạt nhóm tiếp theo khi một khoản thanh toán được thực hiện.
Khi USDC được giải quyết cho đại lý của bạn, Blockchain0x POST một sự kiện đã ký đến URL webhook của bạn. Trợ giúp xác minh được cung cấp trong SDK Node; một dịch vụ Python xác minh bằng tay theo HMAC đã được tài liệu hóa, điều này là tất cả những gì trợ giúp làm. Ví dụ Flask bên dưới; cùng một mã hoạt động trong FastAPI hoặc bất kỳ khung web Python nào.
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
Đây là thuật toán thực sự: 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 thân dữ liệu thô (request.get_data()), không bao giờ request.get_json() được tái tuần tự hóa, vì điều đó thay đổi các byte mà chữ ký bao phủ. Kiến trúc: để trình xử lý xếp hàng một công việc (Celery, RQ, danh sách Redis) kích hoạt chạy CrewAI thực tế. Gọi crew.kickoff() bên trong trình xử lý có thể mất vài phút và làm hết thời gian yêu cầu HTTP.
Trao cho nhóm toàn bộ bộ công cụ, hoặc chỉ một công cụ.
create_blockchain0x_toolset trả về toàn bộ năm tool: blockchain0x_send_payment, blockchain0x_settle_invoice, blockchain0x_get_wallet, blockchain0x_list_wallets, và blockchain0x_get_transaction. Nếu một crew chỉ cần thanh toán, hãy chỉ cấp đúng tool đó bằng một factory duy nhất.
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")
Các factory theo từng capability là create_payment_tool, create_invoice_tool, create_wallet_tool, create_wallets_list_tool và create_transaction_tool. Mã nguồn và các ví dụ testnet nằm tại the Python SDK repo; ma trận hỗ trợ CrewAI nằm tại the docs.
Năm điều cần chú ý khi kết nối thanh toán vào một đội.
Thiết kế dựa trên vai trò của CrewAI là điều làm cho tích hợp thanh toán sạch hơn so với các khung khác. Nó cũng có những cạm bẫy riêng. Biết những điều này trước giúp tiết kiệm thời gian.
Đặt các công cụ ví trên tác nhân sai
Các tác nhân CrewAI có vai trò. Đưa các công cụ ví cho nhà nghiên cứu, người nên đang nghiên cứu, và LLM bắt đầu cố gắng chuyển tiền giữa phân tích. Mô hình sạch là một tác nhân thủ quỹ chuyên dụng giữ các công cụ và chạy như một nhiệm vụ riêng; các tác nhân làm việc không có quyền truy cập ví. Ví dụ ở trên theo hình dạng đó. Sao chép nó.
Quy trình tuần tự vs phân cấp
CrewAI hỗ trợ thực thi tuần tự (mặc định) và phân cấp. Với phân cấp, một tác nhân quản lý điều phối nhóm. Nếu người quản lý được phép ủy quyền các công cụ ví, họ có thể chuyển cho bất kỳ cấp dưới nào, điều này chính xác là điều bạn không muốn cho quyền chi tiêu. Hoặc giữ các công cụ trên một tác nhân chuyên dụng và chạy tuần tự, hoặc hạn chế các quy tắc ủy quyền của người quản lý.
Đọc trạng thái thanh toán từ ngữ cảnh tác vụ
Việc thanh toán đến là không đồng bộ. Nếu nhiệm vụ nghiên cứu liệt kê nhiệm vụ thanh toán trong ngữ cảnh của nó (tốt) nhưng LLM sau đó cố gắng đọc trạng thái thanh toán cuối cùng từ ngữ cảnh đó (không tốt, xác nhận đến sau qua webhook), bạn sẽ nhận được đầu ra lẫn lộn. Hạn chế công việc phía dưới dựa trên tín hiệu kích hoạt webhook, không dựa trên ngữ cảnh nhiệm vụ. Các callback nhiệm vụ của CrewAI là điểm gắn kết đúng.
Các số lượng là đơn vị cơ sở USDC, dưới dạng chuỗi
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.
Bộ xử lý webhook bên ngoài quy trình nhóm
Webhook handler của bạn thường là một tiến trình Flask hoặc FastAPI riêng, không nằm trong runtime của crew. Crew kết thúc kickoff() và trả về; webhook sẽ đến sau khi thanh toán được xác nhận. Hãy nối hai bên bằng một queue hoặc một dòng trong database mà webhook ghi vào và crew đọc ở lần chạy tiếp theo. Đừng giữ một crew sống chỉ để chờ webhook - các lần chạy CrewAI được thiết kế là ngắn hạn.