CrewAI ödeme entegrasyonu.
Bir CrewAI ekibine bir cüzdan verin. Özel bir müsteşar ajanı USDC gönderir, faturaları kapatır ve bakiye okur, çalışma ajanları ise işe odaklanır.
Blockchain0x, gerçek bir Python paketi, , sunar. Kurun, ayarlayın, çağırın ve araçları özel bir kasiyer ajanına verin. Bu ajan USDC gönderebilir, zincir üstü kanıtla bir faturayı kapatabilir ve cüzdanları okuyabilir; ekipteki çalışan ajanlar ise hiçbir cüzdan erişimi taşımaz. USDC mutabakatı Base üzerinde yapılır.
CrewAI'nin gücü rol ayrımıdır. Bunu cüzdan için de kullanın.
Diğer çerçeveler her aracı tek bir ajana yığar. CrewAI'nin tasarımı rol ayrımını teşvik eder: bir araştırmacı araştırır, bir yazar yazar, bir gözden geçiren gözden geçirir. Para aynı muameleyi hak eder - özel bir maliye ajanı cüzdan araçlarını tutar ve çalışma ajanları hiçbiri tutmaz. Harcama yetkisi bir yerde yaşar, her ajanın ekibin içinde olmasına neden olmadan.
Bu yapı ayrıca denetim izlerini daha net hale getirir. USDC hareket ettiğinde, onu kimin (mali sorumlu) taşıdığını ve hangi görev için olduğunu (ona devreden) tam olarak bilirsiniz. Tek ajans entegrasyonları bu çizgiyi bulanıklaştırır ve görev başına harcama analizlerini zorlaştırır.
Bir pip kurulumu. Bir ortam değişkeni.
Paketin Python 3.10 veya daha yenisi gereklidir ve poetry veya pip ile çalışır. Temel blockchain0x SDK'sını ve crewai'yi bağımlılık olarak çeker; ekleyecek başka bir şey yoktur.
pip install blockchain0x-crewaiexport BLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
BLOCKCHAIN0X_API_KEY, Blockchain0x dashboard'unuzdan alınan bir sk_test_ testnet veya sk_live_ mainnet anahtarıdır ve adapter'ın ihtiyaç duyduğu tek değişkendir - anahtarı backend'e iletir ve kendi içinde hiçbir sır tutmaz. Aşağıdaki webhook handler için ayrıca BLOCKCHAIN0X_WEBHOOK_SECRET ayarlarsınız; bu değer, bir webhook oluşturduğunuzda veya rotate ettiğinizde dashboard tarafından bir kez gösterilir.
Faturalama + araştırma rolleri olan çalışan iki ajan ekibi.
Aşağıda, bir müsteşar ajanın bir veri satıcısına USDC ile ödeme yaptığı ve bir araştırmacı ajanın sonucu kullandığı tam bir CrewAI ekibi bulunmaktadır. Müsteşar cüzdan araçlarını tutar; araştırmacı hiç tutmaz. Bu, harcama yapan bir ekip için kanonik bir modeldir.
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.
Bir ödeme gerçekleştiğinde bir sonraki ekibi tetiklemek.
USDC ajana yerleştiğinde, Blockchain0x imzalı bir olayı webhook URL'nize POST eder. Doğrulama yardımcı programı Node SDK'da bulunur; bir Python servisi, belgelenmiş HMAC'a karşı elle doğrular, bu da yardımcı programın yaptığı tek şeydir. Aşağıdaki Flask örneği; aynı kod FastAPI veya herhangi bir Python web çerçevesinde çalışır.
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
Bu gerçek algoritmadır: t.rawBody dizesi üzerinde HMAC-SHA256, sabit zamanlı karşılaştırma ve 300 saniyelik tekrar penceresi. Ham gövdeyi okuyun (request.get_data()), asla request.get_json() yeniden serileştirilmiş olarak okumayın, çünkü bu imzanın kapsadığı baytları değiştirir. Mimari: işleyicinin, gerçek CrewAI çalışmasını tetikleyen bir işi (Celery, RQ, bir Redis listesi) sıraya almasını sağlayın. İşleyici içinde crew.kickoff() çağrısı yapmak dakikalar alabilir ve HTTP isteğini zaman aşımına uğratabilir.
Ekibe tüm araç setini veya sadece bir aracı verin.
create_blockchain0x_toolset beş aracın tamamını döndürür: blockchain0x_send_payment, blockchain0x_settle_invoice, blockchain0x_get_wallet, blockchain0x_list_wallets ve blockchain0x_get_transaction. Bir crew'un yalnızca ödeme yapması gerekiyorsa, ona tek bir factory ile sadece onu verin.
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")
Capability başına factory'ler create_payment_tool, create_invoice_tool, create_wallet_tool, create_wallets_list_tool ve create_transaction_tool'dur. Source ve testnet örnekleri the Python SDK repo içinde bulunur; CrewAI support matrix the docs içindedir.
Bir ekibe faturalandırma entegre ederken izlenmesi gereken beş şey.
CrewAI'nin rol tabanlı tasarımı, ödeme entegrasyonunu diğer çerçevelerden daha temiz hale getirir. Ayrıca kendi tuzakları da vardır. Bunları önceden bilmek zaman kazandırır.
Cüzdan araçlarını yanlış ajana koymak
CrewAI ajanlarının rolleri vardır. Cüzdan araçlarını araştırma yapması gereken araştırmacıya verin ve LLM, analiz sırasında parayı hareket ettirmeye çalışmaya başlar. Temiz model, araçları tutan ve kendi görevi olarak çalışan özel bir müsteşar ajanıdır; çalışma ajanları hiç cüzdan erişimi taşımaz. Yukarıdaki örnek bu şekli takip eder. Kopyalayın.
Sıralı vs hiyerarşik süreçler
CrewAI, sıralı (varsayılan) ve hiyerarşik yürütmeyi destekler. Hiyerarşik olduğunda, bir yönetici ajan ekibi yönetir. Yöneticinin cüzdan araçlarını devretmesine izin verilirse, bunları herhangi bir astına verebilir, bu da harcama yetkisi için istemediğiniz tam olarak budur. Ya araçları tek bir özel ajanda tutun ve sıralı olarak çalıştırın ya da yöneticinin devir kurallarını kısıtlayın.
Görev bağlamından yerleşim durumunu okuma
Gelen uzlaşma asenkron bir süreçtir. Eğer araştırma görevi ödeme görevini bağlamında listeliyorsa (tamam) ama LLM daha sonra o bağlamdan nihai bir ödeme durumunu okumaya çalışıyorsa (tamam değil, onay daha sonra webhook ile gelir), karışık bir çıktı alırsınız. Aşağı akış işini bir webhook tetikleyici sinyali üzerine kapatın, görev bağlamı üzerine değil. CrewAI'nin görev geri çağırmaları doğru tetikleyicidir.
Tutarlar, dize olarak USDC temel birimleridir
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 işleyici ekip sürecinin dışında
Webhook handler'ınız genellikle crew runtime'ının bir parçası değil, ayrı bir Flask veya FastAPI process'idir. Crew kickoff() işlemini bitirir ve döner; webhook ise bir ödeme settle olduğunda daha sonra gelir. İkisini, webhook'un yazdığı ve crew'un bir sonraki çalışmasında okuduğu bir queue veya database row ile bağlayın. Bir crew'u webhook beklerken canlı tutmayın - CrewAI çalışmaları tasarım gereği kısa ömürlüdür.