Ga naar hoofdinhoud
CREWAI INTEGRATIE

CrewAI betalingsintegratie.

Geef een CrewAI-crew een portemonnee. Een toegewijde penningmeester-agent stuurt USDC, vereffent facturen en leest saldi terwijl de werkagenten zich op het werk blijven concentreren.

KORTE ANTWOORD

Blockchain0x levert een echt Python-pakket, . Installeer het, stel in, roep aan, en geef de tools aan een dedicated treasurer-agent. Die agent kan USDC versturen, een factuur afwikkelen met on-chain bewijs, en wallets lezen, terwijl de work agents in de crew geen wallettoegang hebben. USDC settlet op Base.

WAAROM EEN GEWIJDE PENNINGMEESTER ROL

De kracht van CrewAI is rol scheiding. Gebruik het ook voor de wallet.

Andere frameworks stapelen elke tool op één enkele agent. Het ontwerp van CrewAI moedigt rol scheiding aan: een onderzoeker onderzoekt, een schrijver schrijft, een beoordelaar beoordeelt. Geld verdient dezelfde behandeling - een toegewijde penningmeester-agent houdt de wallet-tools, en de werkagenten houden er geen. Uitgavenautoriteit leeft op één plek in plaats van te lekken over elke agent die toevallig in de ploeg is.

Deze structuur maakt ook auditsporen duidelijker. Wanneer USDC beweegt, weet je precies welke agent het heeft verplaatst (de penningmeester) en voor welke taak het was (de taak die het heeft overgedragen). Integraties met één agent vervagen die lijn en maken per-taak uitgavenanalyses moeilijker.

INSTALLATIE

Eén pip-installatie. Eén omgevingsvariabele.

Het pakket heeft Python 3.10 of nieuwer nodig en werkt met poetry of pip. Het haalt de kern blockchain0x SDK en crewai als afhankelijkheden binnen; verder niets toe te voegen.

INSTALLEREN
pip install blockchain0x-crewai
OMGEVINGSVARIABLES
export BLOCKCHAIN0X_API_KEY=sk_test_...   # sk_test_ = Base Sepolia, sk_live_ = Base mainnet

BLOCKCHAIN0X_API_KEY is een sk_test_ testnet- of sk_live_ mainnet-sleutel uit je Blockchain0x-dashboard, en het is de enige variabele die de adapter nodig heeft - hij stuurt de sleutel door naar de backend en bewaart zelf geen geheim. Voor de webhook-handler hieronder stel je ook BLOCKCHAIN0X_WEBHOOK_SECRET in, die het dashboard één keer teruggeeft wanneer je een webhook aanmaakt of roteert.

VOLLEDIG CREW VOORBEELD

Een werkende twee-agenten bemanning met facturerings- + onderzoeksrollen.

Hieronder is een complete CrewAI-crew waar een penningmeester-agent een dataleverancier in USDC betaalt, en een onderzoeker-agent het resultaat gebruikt. De penningmeester houdt de portemonnee-tools; de onderzoeker heeft er geen. Dit is het canonieke patroon voor een crew die uitgeeft.

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.

WEBHOOK AFHANDELING

De volgende crew activeren wanneer een betaling aankomt.

Wanneer USDC naar je agent wordt afgehandeld, POST Blockchain0x een ondertekende gebeurtenis naar je webhook-URL. De verify-helper wordt geleverd in de Node SDK; een Python-service verifieert met de hand tegen de gedocumenteerde HMAC, wat de helper toch al doet. Flask-voorbeeld hieronder; dezelfde code werkt in FastAPI of elk Python-webframework.

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

Dit is het echte algoritme: HMAC-SHA256 over de string t.rawBody, een constante tijdsvergelijking, en een replayvenster van 300 seconden. Lees de ruwe body (request.get_data()), nooit request.get_json() opnieuw serialiseren, omdat dat de bytes verandert die de handtekening dekt. Architectuur: laat de handler een taak in de wachtrij plaatsen (Celery, RQ, een Redis-lijst) die de daadwerkelijke CrewAI-run activeert. Het aanroepen van crew.kickoff() binnen de handler kan minuten duren en maakt de HTTP-aanroep tijdig af.

EEN TOOL, OF ALLE Vijf

Geef de crew de hele toolset, of slechts één tool.

create_blockchain0x_toolset retourneert alle vijf tools: blockchain0x_send_payment, blockchain0x_settle_invoice, blockchain0x_get_wallet, blockchain0x_list_wallets en blockchain0x_get_transaction. Als een team alleen hoeft te betalen, geef dan alleen die met een enkele fabriek.

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")

De per-capability factories zijn create_payment_tool, create_invoice_tool, create_wallet_tool, create_wallets_list_tool en create_transaction_tool. Broncode en testnet-voorbeelden staan in de Python SDK repo; de CrewAI support matrix staat in de docs.

GEMEENSCHAPPELIJKE VALKUILEN

Vijf dingen om op te letten bij het aansluiten van facturering in een crew.

CrewAI's rolgebaseerde ontwerp maakt betalingsintegratie schoner dan andere frameworks. Het heeft ook zijn eigen valkuilen. Deze van tevoren kennen bespaart tijd.

PITFALL 1

De wallet-tools op de verkeerde agent plaatsen

CrewAI-agenten hebben rollen. Geef de wallet-tools aan de onderzoeker, die moet onderzoeken, en de LLM begint te proberen geld te verplaatsen tijdens de analyse. Het schone patroon is een toegewijde penningmeester-agent die de tools vasthoudt en als zijn eigen taak draait; de werkagenten hebben helemaal geen toegang tot de wallet. Het bovenstaande voorbeeld volgt die structuur. Kopieer het.

PITFALL 2

Sequentiële vs hiërarchische processen

CrewAI ondersteunt sequentiële (standaard) en hiërarchische uitvoering. Bij hiërarchisch orkestreert een manager-agent de crew. Als de manager de wallet-tools mag delegeren, kan hij ze aan elke ondergeschikte geven, wat precies is wat je niet wilt voor uitgavenautoriteit. Houd de tools ofwel op één toegewijde agent en voer sequentieel uit, of beperk de delegatieregels van de manager.

PITFALL 3

Lezen van de status van de afhandeling uit de taakcontext

Inkomende afwikkeling is asynchroon. Als de onderzoekstaak de betaaltaak in zijn context vermeldt (prima), maar de LLM vervolgens probeert een definitieve betalingsstatus uit die context te lezen (niet prima, de bevestiging arriveert later via webhook), krijg je verwarde output. Beperk het downstream-werk op een webhook-geactiveerd signaal, niet op taakcontext. De taakcallbacks van CrewAI zijn de juiste haak.

PITFALL 4

Bedragen zijn USDC basis eenheden, als strings

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 buiten het crew-proces

Je webhook-handler is meestal een apart Flask- of FastAPI-proces, geen onderdeel van de crew-runtime. De crew voltooit zijn kickoff() en retourneert; de webhook komt later aan wanneer een betaling wordt afgehandeld. Verbind de twee met een wachtrij of een database-rij die de webhook schrijft en de crew leest bij de volgende uitvoering. Houd geen crew in leven terwijl je op een webhook wacht - CrewAI-runs zijn kortstondig van ontwerp.

VAKANT VRAAG

Drie CrewAI-specifieke vragen.

Werkt dit met CrewAI Flows (de nieuwere grafiek-gebaseerde uitvoering)?

Ja. create_blockchain0x_toolset retourneert standaard CrewAI-tools, zodat ze werken in klassieke Crew + Taakstructuren en in CrewAI Flow's @start/@listen-patronen. In Flow, zet je de betalings- of vereffeningsstap op een toegewijde penningmeester-stap vóór de werkstappen, en laat je de werkstappen luisteren naar een Flow-gebeurtenis die afgaat zodra je webhook-handler de gedeelde staat bijwerkt.

Kan dezelfde crew meerdere betaalde taken gelijktijdig uitvoeren?

Ja. payments.create (waarvan blockchain0x_send_payment een wrapper is) mint automatisch een stabiele Idempotency-Key, zodat een herhaalde indiening samenvouwt tot een enkele on-chain overdracht in plaats van dubbel te betalen. Als je gelijktijdige kickoffs hebt die elk geld verplaatsen, geef dan elke zijn eigen intentie (distincte ontvangers of metadata) zodat ze niet op elkaar lijken. Je beheert de idempotency-header zelf niet, tenzij je wilt dedupliceer over processen.

Kan de crew facturen vereffenen, en is er een terugbetalingshulpmiddel?

Het kan afwikkelen: blockchain0x_settle_invoice vereffent een betalingsverzoek dat je in het dashboard hebt aangemaakt en registreert het on-chain bewijs (tx-hash, betaler, geverifieerd USDC-bedrag). Er is geen terugbetalingshelper - die identifier bestaat niet. Om fondsen terug te sturen, stuurt de penningmeester eenvoudig een nieuwe USDC-betaling terug naar de betaler met blockchain0x_send_payment. Houd dat bij de rol van penningmeester zodat de uitgavenautoriteit op één plek blijft.

Voeg een factureringsrol toe aan je bemanning.

Van pip-installatie tot je eerste betaalde crew kickoff in minuten. Gratis om te beginnen.