Перейти к основному содержимому
ИНТЕГРАЦИЯ AUTOGEN

Интеграция платежей 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.

AGENT.PY
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

Подтвердите входящие платежи с помощью подписанного webhook.

Если ваш агент также получает USDC, подтвердите это с помощью вебхука, а не опросом. Помощник проверки поставляется в Node SDK; в Python-сервисе вы проверяете вручную по документированному HMAC, что и делает помощник. Пример FastAPI ниже; тот же код работает в любом асинхронном Python-фреймворке.

WEBHOOK.PY
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 открывает мощные модели, но вводит свои собственные подводные камни. Эти проблемы возникают из нашего почтового ящика поддержки.

PITFALL 1

Нет пакета AutoGen - вы оборачиваете SDK.

Blockchain0x поставляет адаптеры для LangChain и CrewAI, а также сервер MCP; нет отдельного пакета AutoGen. Рецепт выше - это поддерживаемый путь: простая типизированная функция, которая вызывает реальный клиент blockchain0x, переданная в AssistantAgent(tools=[...]). AutoGen читает сигнатуру функции и docstring, чтобы построить схему инструмента, поэтому держите docstring точным.

PITFALL 2

Суммы представлены в базовых единицах 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.

PITFALL 3

send_payment может ответить 503 на раннем этапе

payments.create по умолчанию не повторяет и может вернуть 503, пока адаптер цепочки не подключен к вашей сети. Не позволяйте групповому чату зацикливаться на неудавшемся платеже - поймайте ошибку в вашей функции, верните четкое сообщение, на которое модель может реагировать, и полагайтесь на автоматически созданный ключ идемпотентности, чтобы ручная попытка не привела к двойной оплате.

PITFALL 4

AutoGen 0.4+ является асинхронным; вызов SDK является синхронным

AutoGen 0.4 запускает инструменты в асинхронном цикле. Вызов клиента blockchain0x является синхронным, что подходит для быстрого запроса, но медленный вызов блокирует цикл. Если вы обрабатываете реальный объем, оберните вызов SDK с помощью asyncio.to_thread, чтобы цикл событий оставался отзывчивым. Для одного платежа за ход прямой вызов подходит.

PITFALL 5

Проверить входящие вебхуки по необработанному телу.

Если ваш агент также ПОЛУЧАЕТ деньги, подтвердите это с помощью вебхука, а не опросом. Проверьте подпись по необработанным байтам запроса (await request.body()), никогда не request.json() повторно сериализованный, потому что HMAC охватывает точные байты. Это HMAC-SHA256 с окном повторного воспроизведения в 300 секунд. Обработчик ниже - это все.

ЧАСТО ЗАДАВАЕМЫЕ

Три вопроса, специфичных для AutoGen.

Существует ли специальный пакет AutoGen для установки?

Нет. Нет специализированного адаптера AutoGen, и это сделано намеренно - AutoGen уже превращает обычную типизированную функцию в инструмент, поэтому честный путь - обернуть реальный клиент blockchain0x в функцию и передать его вашему агенту, как показано выше. Единственные поставляемые пакеты фреймворка - это blockchain0x-langchain и blockchain0x-crewai (оба Python) плюс сервер @blockchain0x/mcp. Все остальное, включая AutoGen, является этим кратким рецептом.

Работает ли рецепт на классическом AutoGen (0.2.x), а также на 0.4+?

Да, потому что логика платежа - это просто функция Python - ничего, специфичного для версии AutoGen, в ней нет. На 0.4+ вы передаете ее через AssistantAgent(tools=[...]) как указано выше. В линии 0.2.x ConversableAgent вы регистрируете ту же функцию с помощью register_function. Нет подмодуля .legacy для импорта, потому что пакета нет; вы владеете функцией.

Как мой агент получает USDC или завершает счет, а не просто отправляет его?

Оберните больше client тем же способом. blockchain0x.transactions.get читает transaction, blockchain0x.agents.get и blockchain0x.agents.list читают wallets, а blockchain0x.payment_requests.settle закрывает invoice, который вы создали в dashboard, с on-chain proof. Каждая операция становится еще одной типизированной function в вашем списке tools. Входящие платежи подтверждаются через webhook payment.received (проверьте его с помощью handler ниже); инструмента, который создает новый invoice, нет, поскольку payment requests создаются в dashboard.

Дайте вашему агенту AutoGen кошелек.

Несколько строк, оборачивающих реальный клиент, без необходимости установки пакета. Бесплатно для начала.