CrewAI 결제 통합.
CrewAI 팀에 지갑을 제공합니다. 전담 회계 에이전트가 USDC를 보내고 송장을 정산하며 잔액을 읽는 동안 작업 에이전트는 작업에 집중합니다.
Blockchain0x는 실제 Python 패키지인 을 제공합니다. 설치한 뒤 를 설정하고 를 호출해 전담 treasurer agent에 도구를 넘기세요. 그 agent는 USDC를 보내고, 온체인 증명으로 인보이스를 정산하며, 지갑을 읽을 수 있습니다. 반면 팀의 작업 agent는 지갑 접근 권한을 갖지 않습니다. USDC는 Base에서 정산됩니다.
CrewAI의 강점은 역할 분리입니다. 지갑에도 사용하십시오.
다른 프레임워크는 모든 도구를 단일 에이전트에 쌓습니다. CrewAI의 디자인은 역할 분리를 장려합니다: 연구자는 연구하고, 작가는 글을 쓰고, 검토자는 검토합니다. 돈도 같은 대우를 받아야 합니다 - 전담 재무 에이전트가 지갑 도구를 보유하고, 작업 에이전트는 아무것도 보유하지 않습니다. 지출 권한은 한 곳에 존재하여 크루에 있는 모든 에이전트에 누수되지 않습니다.
이 형태는 감사 추적을 더 명확하게 만듭니다. USDC가 이동할 때, 어떤 에이전트가 그것을 이동시켰는지(재무 담당자)와 어떤 작업을 위해서였는지(그것을 넘긴 작업)를 정확히 알 수 있습니다. 단일 에이전트 통합은 그 경계를 흐리게 하여 작업별 지출 분석을 어렵게 만듭니다.
하나의 pip 설치. 하나의 환경 변수.
이 패키지는 Python 3.10 이상이 필요하며 poetry 또는 pip와 함께 작동합니다. core blockchain0x SDK 및 crewai를 종속성으로 가져옵니다; 추가할 것은 없습니다.
pip install blockchain0x-crewaiexport BLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
BLOCKCHAIN0X_API_KEY는 Blockchain0x dashboard의 sk_test_ testnet 또는 sk_live_ mainnet 키이며, adapter에 필요한 유일한 변수입니다 - 이 키를 backend로 전달할 뿐 자체적으로는 어떤 비밀도 보관하지 않습니다. 아래의 webhook handler에는 BLOCKCHAIN0X_WEBHOOK_SECRET도 설정해야 하며, 이는 webhook을 생성하거나 회전할 때 dashboard가 한 번만 반환합니다.
청구 및 연구 역할이 있는 작동하는 두 에이전트 팀입니다.
아래는 재무 에이전트가 데이터 공급업체에 USDC로 결제하고, 연구원 에이전트가 그 결과를 사용하는 완전한 CrewAI 팀입니다. 재무 담당자는 지갑 도구를 보유하고 있으며; 연구원은 아무것도 보유하지 않습니다. 이것이 지출하는 팀의 전형적인 패턴입니다.
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가 귀하의 웹훅 URL에 서명된 이벤트를 POST합니다. verify 헬퍼는 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
이것이 실제 알고리즘입니다: 문자열 t.rawBody에 대한 HMAC-SHA256, 상수 시간 비교 및 300초 재생 창. 원시 본문을 읽습니다(request.get_data()), 결코 request.get_json() 재직렬화하지 마십시오, 왜냐하면 그것이 서명에 포함된 바이트를 변경하기 때문입니다. 아키텍처: 핸들러가 실제 CrewAI 실행을 트리거하는 작업을 큐에 추가하도록 합니다(Celery, RQ, Redis 목록). 핸들러 내에서 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")
기능별 factory는 create_payment_tool, create_invoice_tool, create_wallet_tool, create_wallets_list_tool, create_transaction_tool입니다. source 및 testnet 예시는 the Python SDK repo에 있으며, CrewAI 지원 매트릭스는 the docs에 있습니다.
팀에 청구를 연결할 때 주의할 다섯 가지 사항.
CrewAI의 역할 기반 설계는 결제 통합을 다른 프레임워크보다 더 깔끔하게 만듭니다. 또한 자체적인 함정이 있습니다. 이를 미리 아는 것은 시간을 절약합니다.
잘못된 에이전트에 지갑 도구 배치하기
CrewAI 에이전트는 역할을 가집니다. 연구를 해야 하는 연구원에게 지갑 도구를 전달하고, LLM이 분석 중에 돈을 이동하려고 시도합니다. 깔끔한 패턴은 도구를 보유하고 자신의 작업으로 실행되는 전담 재무 담당자 에이전트입니다; 작업 에이전트는 지갑 접근 권한이 전혀 없습니다. 위의 예는 그 형태를 따릅니다. 복사하십시오.
순차적 vs 계층적 프로세스
CrewAI는 순차적(기본값) 및 계층적 실행을 지원합니다. 계층적 구조에서는 관리자 에이전트가 크루를 조정합니다. 관리자가 지갑 도구를 위임할 수 있도록 허용되면, 하위 직원에게 전달할 수 있습니다. 이는 지출 권한에 대해 원하지 않는 것입니다. 도구를 하나의 전담 에이전트에 유지하고 순차적으로 실행하거나 관리자의 위임 규칙을 제한하십시오.
작업 컨텍스트에서 정산 상태 읽기
수신 정산은 비동기입니다. 연구 작업이 그 맥락에서 결제 작업을 나열하면(괜찮음) LLM이 그 맥락에서 최종 결제 상태를 읽으려고 시도하면(괜찮지 않음, 확인은 나중에 웹후크로 도착함) 혼란스러운 출력을 받게 됩니다. 다운스트림 작업은 작업 맥락이 아닌 웹후크 트리거 신호에 따라 게이트하세요. 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.
크루 프로세스 외부의 웹후크 핸들러
귀하의 웹훅 핸들러는 일반적으로 별도의 Flask 또는 FastAPI 프로세스이며, 크루 런타임의 일부가 아닙니다. 크루는 kickoff()를 완료하고 반환합니다; 웹훅은 결제가 완료될 때 나중에 도착합니다. 웹훅이 작성하고 크루가 다음 실행에서 읽는 큐 또는 데이터베이스 행으로 두 가지를 연결하세요. 웹훅을 기다리며 크루를 유지하지 마세요 - CrewAI 실행은 설계상 단명합니다.