Интеграция с Fetch.ai
Fetch.ai — это не просто ещё один AI-токен проект. Это специфический технический стек: autonomous agents (uAgents), Agentverse (marketplace агентов), ASI Alliance (объединение с SingularityNET и Ocean Protocol). Если ваш продукт требует автономных агентов, которые взаимодействуют друг с другом в экономической сети — это реальный инструмент, а не хайп.
Практический контекст: uAgents используются для автоматизации supply chain (агент-покупатель ведёт переговоры с агентом-поставщиком), DeFi (агент мониторит ончейн условия и выполняет стратегию), IoT (агент управляет умным устройством и монетизирует данные).
uAgents: техническая модель
Структура агента
uAgent — это Python-процесс с встроенным HTTP сервером, крипто-идентичностью (secp256k1 keypair) и протоколом сообщений.
from uagents import Agent, Context, Model
class PriceRequest(Model):
token: str
currency: str = "USD"
class PriceResponse(Model):
token: str
price: float
timestamp: int
# Агент-оракул цен
price_oracle = Agent(
name="price-oracle",
seed="your-deterministic-seed-phrase-here", # воспроизводимый адрес
port=8001,
endpoint=["http://localhost:8001/submit"],
)
@price_oracle.on_message(model=PriceRequest, replies=PriceResponse)
async def handle_price_request(ctx: Context, sender: str, msg: PriceRequest):
# Fetch price from external API
price = await get_price_from_coingecko(msg.token, msg.currency)
await ctx.send(sender, PriceResponse(
token=msg.token,
price=price,
timestamp=int(time.time())
))
ctx.logger.info(f"Sent {msg.token} price {price} to {sender}")
Каждый агент имеет уникальный адрес вида agent1q... (Bech32-encoded public key). Адрес детерминирован из seed — воспроизводим между деплоями.
Almanac: регистрация и discovery
Almanac — on-chain (Fetch.ai mainchain) реестр агентов. Агент регистрирует своё endpoint и protocols в Almanac, платя небольшую комиссию в FET. Другие агенты находят нужных через Almanac query.
# Поиск агентов с определённым протоколом
from uagents.query import query
from uagents.envelope import Envelope
# Получить endpoint агента из Almanac
response = await query(
destination="agent1qxxxxTargetAgentAddress",
message=PriceRequest(token="ETH"),
timeout=30
)
Это ключевое отличие от простого REST API: агент не знает заранее URL другого агента — он находит его через децентрализованный registry. Протокол взаимодействия верифицируется через подписи сообщений.
Протоколы и схемы сообщений
Протокол в терминах Fetch.ai — это набор типов сообщений с однозначным digest (SHA256 от Pydantic schema). Два агента могут взаимодействовать только если используют один digest — это обеспечивает совместимость.
from uagents import Protocol
# Определяем протокол явно
defi_protocol = Protocol(name="DeFiStrategy", version="1.0.0")
class ExecuteStrategy(Model):
strategy_id: str
params: dict
max_slippage: float
class StrategyResult(Model):
success: bool
tx_hash: str | None
error: str | None
@defi_protocol.on_message(model=ExecuteStrategy, replies=StrategyResult)
async def execute(ctx: Context, sender: str, msg: ExecuteStrategy):
# логика выполнения стратегии
...
agent.include(defi_protocol)
Интеграция с DeFi и Web3
Агент с on-chain взаимодействием
from web3 import Web3
from uagents import Agent, Context
w3 = Web3(Web3.HTTPProvider("https://arbitrum-one.publicnode.com"))
agent = Agent(name="defi-executor", seed="...")
class ArbitrageOpportunity(Model):
token_in: str
token_out: str
amount: float
expected_profit: float
@agent.on_message(model=ArbitrageOpportunity)
async def execute_arbitrage(ctx: Context, sender: str, msg: ArbitrageOpportunity):
if msg.expected_profit < MIN_PROFIT_THRESHOLD:
ctx.logger.warning(f"Skipping low-profit opportunity: {msg.expected_profit}")
return
# Формируем и отправляем транзакцию
tx = build_arbitrage_tx(msg.token_in, msg.token_out, msg.amount)
signed = w3.eth.account.sign_transaction(tx, PRIVATE_KEY)
tx_hash = w3.eth.send_raw_transaction(signed.rawTransaction)
ctx.logger.info(f"Executed arbitrage: {tx_hash.hex()}")
Периодические задачи
@agent.on_interval(period=60.0) # каждую минуту
async def monitor_positions(ctx: Context):
positions = await fetch_open_positions(WALLET_ADDRESS)
for pos in positions:
if pos.health_factor < LIQUIDATION_THRESHOLD:
# Отправить алерт другому агенту
await ctx.send(ALERT_AGENT_ADDRESS, LiquidationAlert(
position_id=pos.id,
health_factor=pos.health_factor
))
Agentverse и деплой
Agentverse — hosted платформа для агентов Fetch.ai. Альтернатива self-hosted деплою: агент живёт в облаке Fetch.ai, платите за compute в FET.
Для production: self-hosted агент в Docker, endpoint за reverse proxy (nginx). Almanac registration делается при старте агента автоматически если передать правильный endpoint.
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install uagents web3
COPY agent.py .
CMD ["python", "agent.py"]
Практические ограничения
Throughput. uAgents — не высокочастотная система. Сообщение через Almanac + HTTP имеет latency 100-500ms. Для HFT-стратегий не подходит. Для мониторинга, управления позициями, оркестрации — достаточно.
Message reliability. Нет built-in retry и delivery guarantees на уровне протокола. Нужно реализовывать self на уровне приложения: timeout handling, acknowledgment паттерны.
FET для Almanac. Регистрация агента в Almanac требует FET токены. Для production системы с десятками агентов — учесть в бюджете.
Процесс работы
Аналитика (3-5 дней). Определяем scope агентов: что каждый делает, как общается, какие on-chain операции выполняет, нужен ли Almanac discovery или прямое адресование.
Разработка (2-6 недель). Создание агентов → интеграция с Web3/backend API → тестирование в локальной сети агентов → деплой на Agentverse или self-hosted.
Мониторинг. Агенты автономны — нужен centralized logging (ELK или Grafana + Loki) и alerting на аномальное поведение (агент перестал отвечать, неожиданные транзакции).
Типичный проект: 2 агента (мониторинг + исполнение) с on-chain интеграцией — 3-4 недели.







