Інтеграція з 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 та протоколи в 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 іншого агента заздалегідь — він знаходить його через децентралізований реєстр. Протокол взаємодії верифікується через підписи.
Протоколи та схеми повідомлень
Протокол в термінах 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 реєстрація відбувається при старті агента автоматично якщо передати правильний 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 на рівні протоколу. Потрібно реалізовувати на рівні додатку: 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 тижні.







