Интеграция платежей AutoGen.
Нет пакета AutoGen, и он вам не нужен. Оберните реальный клиент blockchain0x в функцию, передайте его вашему агенту, и он сможет перемещать USDC на Base.
Специального пакета для AutoGen нет, и он вам не нужен. AutoGen уже превращает обычную типизированную функцию в tool, поэтому вы оборачиваете реальный Python client в функцию, передаете ее через , и агент может отправлять USDC, закрывать invoices и читать wallets в Base. Задайте и вперед.
AutoGen уже делает функцию инструментом. Используйте это.
AutoGen строит схему инструмента прямо из сигнатуры функции Python и документации. Специальный адаптер AutoGen только обернул бы функцию, которую мы все равно написали бы, а затем вышел бы из синхронизации с быстро меняющимся API AutoGen. Поэтому мы не поставляем его. Вы пишете несколько строк, которые вызывают реальный клиент blockchain0x, и сохраняете полный контроль над аргументами, проверкой и обработкой ошибок.
Это тот же клиент, который оборачивают поставляемые адаптеры LangChain и CrewAI. Здесь вы оборачиваете его сами, что означает, что нет версии адаптера для отслеживания и ничего между вашим агентом и API, кроме вашей собственной функции. Мультиагентные команды работают так же: дайте функцию кошелька одному агенту, оставьте остальных без нее, и полномочия на расходы остаются в одном месте.
Установите AutoGen и основной SDK. Одна переменная окружения.
Нет специального пакета AutoGen для добавления. Вы устанавливаете AutoGen (Python 3.10+) и реальный основной SDK blockchain0x, затем пишете функцию ниже. Это весь список зависимостей.
pip install autogen-agentchat "autogen-ext[openai]" blockchain0x
export BLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
BLOCKCHAIN0X_API_KEY - это ключ sk_test_ для testnet или sk_live_ для mainnet из вашего dashboard; client читает его из environment. Если ваш agent также получает деньги, обработчику webhook дополнительно нужен BLOCKCHAIN0X_WEBHOOK_SECRET, который dashboard выдает один раз при создании или ротации webhook.
Функция, которая оплачивает, переданная AssistantAgent.
Ниже приведена вся интеграция. send_usdc вызывает реальный клиент blockchain0x; AssistantAgent(tools=[send_usdc]) превращает его в инструмент, который модель может вызывать. AutoGen считывает подсказки типов и документацию, чтобы построить схему, поэтому держите их честными. Запустите его, и агент перемещает USDC на Base.
from autogen_agentchat.agents import AssistantAgent from autogen_ext.models.openai import OpenAIChatCompletionClient from blockchain0x import Client blockchain0x = Client() # reads BLOCKCHAIN0X_API_KEY from the environment # AutoGen turns a plain typed function into a tool. No dedicated package needed. def send_usdc(agent_id: str, to: str, amount_wei: str) -> str: """Send a USDC payment from an agent wallet. amount_wei is USDC base units (6 decimals), so "10000" is 0.01 USDC. """ result = blockchain0x.payments.create( body={"agentId": agent_id, "to": to, "amountWei": amount_wei}, ) return str(result) treasurer = AssistantAgent( name="treasurer", model_client=OpenAIChatCompletionClient(model="gpt-4o"), tools=[send_usdc], system_message="You pay vendor invoices in USDC within owner-set limits.", ) result = await treasurer.run( task="Pay 0.01 USDC from agent agt_123 to 0xVendor for the dataset.", )
When the agent decides to pay, it calls send_usdc, the SDK submits the transfer, and you get a transaction hash back. amount_wei is base units, so 0.01 USDC is "10000". A sk_test_ key keeps it on Base Sepolia until you switch to sk_live_. Add more functions - read a wallet, settle an invoice - the same way; each becomes another entry in tools.
Подтвердите входящие платежи с помощью подписанного webhook.
Если ваш агент также получает USDC, подтвердите это с помощью вебхука, а не опросом. Помощник проверки поставляется в Node SDK; в Python-сервисе вы проверяете вручную по документированному HMAC, что и делает помощник. Пример FastAPI ниже; тот же код работает в любом асинхронном Python-фреймворке.
import hmac, hashlib, os, time from fastapi import FastAPI, Request, HTTPException app = FastAPI() SECRET = os.environ["BLOCKCHAIN0X_WEBHOOK_SECRET"].encode() @app.post("/webhooks/payment") async def receive(request: Request): raw = await request.body() # RAW bytes - do not parse first sig = request.headers.get("X-Blockchain0x-Signature", "") ts = request.headers.get("X-Blockchain0x-Timestamp", "") 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: raise HTTPException(status_code=401) if request.headers.get("X-Blockchain0x-Event-Type") == "payment.received": await trigger_followup() # USDC landed - run the next step return {"ok": True}
Алгоритм - HMAC-SHA256 над строкой t.rawBody, сравнение с постоянным временем и окно повторного воспроизведения 300 секунд. Читайте необработанное тело через await request.body(), никогда не request.json() повторно сериализованное, потому что это изменяет байты, которые охватывает подпись. Отправленные события - payment.received, payment.sent, wallet.deployed и webhook.test. Для тяжелой последующей работы добавьте задачу в очередь (Celery, RQ, arq) и сразу ответьте 200, а не блокируйте обработчик.
Клиент, который вы оборачиваете, открыт. Читайте его.
Нет starter package для AutoGen, который можно было бы клонировать - рецепт выше и есть интеграция. SDK Blockchain0x открыты в GitHub; этот рецепт оборачивает Python SDK (blockchain0x-python), а полный набор методов приведен в docs. Используйте его как reference для body функций.
github.com/tosh-labs/blockchain0x-pythonПолный набор методов SDK и scopes описаны в the docs. Начните с ключа sk_test_ в Base Sepolia, затем переключитесь на sk_live_, когда функция начнет работать так, как вы ожидаете.
Пять ловушек группового чата и асинхронного взаимодействия, которых следует избегать.
Многоагентный + асинхронный дизайн AutoGen открывает мощные модели, но вводит свои собственные подводные камни. Эти проблемы возникают из нашего почтового ящика поддержки.
Нет пакета AutoGen - вы оборачиваете SDK.
Blockchain0x поставляет адаптеры для LangChain и CrewAI, а также сервер MCP; нет отдельного пакета AutoGen. Рецепт выше - это поддерживаемый путь: простая типизированная функция, которая вызывает реальный клиент blockchain0x, переданная в AssistantAgent(tools=[...]). AutoGen читает сигнатуру функции и docstring, чтобы построить схему инструмента, поэтому держите docstring точным.
Суммы представлены в базовых единицах USDC, как строки
payments.create takes amountWei: a string of USDC base units, not a float and not a dollar figure. USDC has 6 decimals, so 0.01 USDC is "10000" and 5 USDC is "5000000". Type the tool argument as str and validate it before the call - a float that sneaks through either errors at the backend or moves a millionth of what you meant.
send_payment может ответить 503 на раннем этапе
payments.create по умолчанию не повторяет и может вернуть 503, пока адаптер цепочки не подключен к вашей сети. Не позволяйте групповому чату зацикливаться на неудавшемся платеже - поймайте ошибку в вашей функции, верните четкое сообщение, на которое модель может реагировать, и полагайтесь на автоматически созданный ключ идемпотентности, чтобы ручная попытка не привела к двойной оплате.
AutoGen 0.4+ является асинхронным; вызов SDK является синхронным
AutoGen 0.4 запускает инструменты в асинхронном цикле. Вызов клиента blockchain0x является синхронным, что подходит для быстрого запроса, но медленный вызов блокирует цикл. Если вы обрабатываете реальный объем, оберните вызов SDK с помощью asyncio.to_thread, чтобы цикл событий оставался отзывчивым. Для одного платежа за ход прямой вызов подходит.
Проверить входящие вебхуки по необработанному телу.
Если ваш агент также ПОЛУЧАЕТ деньги, подтвердите это с помощью вебхука, а не опросом. Проверьте подпись по необработанным байтам запроса (await request.body()), никогда не request.json() повторно сериализованный, потому что HMAC охватывает точные байты. Это HMAC-SHA256 с окном повторного воспроизведения в 300 секунд. Обработчик ниже - это все.