montana/Русский/Логистика/IRONCLAW_ANALYSIS.md

329 lines
20 KiB
Markdown
Raw Permalink Normal View History

# Анализ: IronClaw (NearAI) + Timeweb — применимость к SeaFare Montana
**Дата:** 22 февраля 2026
**Автор:** AI-аналитик SeaFare Montana
---
## 1. ЧТО ТАКОЕ IRONCLAW?
**Rust-based AI-агент** от NearAI (Илья Полосухин — со-автор "Attention Is All You Need", основатель NEAR Protocol). Позиционируется как безопасная замена OpenClaw, который стал катастрофой безопасности (42,000+ открытых инстансов, утечки API ключей, RCE уязвимости).
GitHub: https://github.com/nearai/ironclaw
| Параметр | Значение |
|----------|----------|
| Язык | Rust (96%) |
| Версия | 0.9.0 (21 фев 2026) |
| Возраст | **3 недели** (с 3 фев 2026) |
| Stars | 2,800 |
| Лицензия | Apache 2.0 + MIT |
| Релизы | 8 за 10 дней |
| Open issues | 116 |
### Ключевые фичи:
- **Multi-LLM**: Claude, GPT-4o, Ollama (локальные модели), OpenRouter (300+ моделей)
- **Sandbox изоляция**: Docker-контейнеры для инструментов
- **Шифрование секретов**: AES-256-GCM, ключи в OS keychain
- **Leak detection**: Сканирование ответов на утечку кредов
- **Self-expanding**: Агент сам создаёт инструменты (WASM)
- **Каналы**: CLI, HTTP, Telegram, Slack, Web UI
- **Память**: PostgreSQL + pgvector (векторный поиск)
- **Smart routing**: Failover между LLM провайдерами, circuit breaker
### Архитектура безопасности (6 уровней):
1. Защита от prompt injection (обёртка контента + экранирование)
2. Обнаружение утечек credentials (сканирование перед отдачей)
3. Ограничение длины (защита от buffer overflow)
4. Политики блокировки (настраиваемые правила)
5. Изоляция контейнеров (Docker + capabilities)
6. Прокси-валидация сети (allowlisting)
---
## 2. КРИТИЧЕСКИЙ АНАЛИЗ: ПОДХОДИТ ЛИ ДЛЯ SEAFARE MONTANA?
### ❌ НЕТ. Вот почему:
#### Проблема 1: ПРИНЦИПИАЛЬНО ДРУГОЙ ПРОДУКТ
IronClaw — это **персональный AI-ассистент общего назначения** (аналог Claude Code / Cursor). Он НЕ:
- Веб-сервис для конечных пользователей
- REST API с аутентификацией
- Мультитенантная платформа (много пользователей одновременно)
SeaFare Montana — это **веб-приложение** (index.html → Flask API → Claude agent → БД). IronClaw не заменяет эту архитектуру. Он заменяет **разработчика**, а не приложение.
#### Проблема 2: ВОЗРАСТ 3 НЕДЕЛИ
- Проекту 20 дней. Ещё не v1.0
- 116 открытых issues
- Schema БД меняется (9 миграций за 20 дней)
- Ни одного задокументированного production deployment
- Никаких security-аудитов
#### Проблема 3: ТРЕБУЕТ RUST + DOCKER
- Наш стек: Python (Flask, Claude API). Команда знает Python
- IronClaw: Rust 1.85+, PostgreSQL 15 + pgvector, Docker обязательно
- Кто будет поддерживать Rust-код при проблемах?
#### Проблема 4: NEAR PROTOCOL / BLOCKCHAIN
- IronClaw по умолчанию аутентифицируется через NEAR AI OAuth
- Блокчейн НЕ обязателен, но экосистема привязана к NEAR
- Крипто-проект = репутационные риски для морской логистики
#### Проблема 5: НЕ РЕШАЕТ НАШИХ РЕАЛЬНЫХ ПРОБЛЕМ
Наши реальные проблемы:
- MarineTraffic API (решается получением ключа, не сменой фреймворка)
- AIS данные (решается через AISStream/AISHub, уже работает)
- UI для выбора груза (уже сделали в v3.9.0)
- Render free tier ограничения (решается VPS, не IronClaw)
IronClaw НЕ даёт нам: доступ к AIS данным, MarineTraffic API, базу портов, маршруты, Equasis. Это всё у нас уже есть.
---
## 3. ЧТО АЛИК ИМЕЛ В ВИДУ И ПОЧЕМУ ЭТО УЖЕ ЕСТЬ
> "Нужно 1 раз агента обучить... По этой модели с безопасностью и изолированностью всего. С полным понимаем всего контекста меню."
### Разбор по пунктам:
**"Обучить 1 раз"** — LLM не "обучаются" однократно. Они получают system prompt каждый запрос. Наш агент уже делает это: SYSTEM_PROMPT в seafare_agent.py содержит 100+ строк с полным описанием 26 инструментов и правил поведения. Это и есть "обучение".
**"Безопасность и изолированность"** — IronClaw изолирует ИНСТРУМЕНТЫ (shell-команды, файловые операции) в Docker. Наши инструменты — это Python-функции (поиск судов, маршруты, AIS запросы). Они и так безопасны — нет shell access, нет доступа к файловой системе, нет произвольного выполнения кода.
**"Понимание контекста меню"** — Это system prompt + user_context. У нас SYSTEM_PROMPT описывает все 26 инструментов, а user_context инжектирует профиль пользователя и баланс в каждый запрос.
### Вывод: Алик описывает то, что у нас **уже реализовано** через Claude API + tool-calling. IronClaw — это другой способ делать то же самое, но с overhead Rust/Docker/NEAR.
---
## 4. ЧТО У НАС УЖЕ ЕСТЬ (SeaFare Montana v3.9.0)
| Функция | Статус |
|---------|--------|
| AI-агент с 26 инструментами | ✅ Работает |
| Tool-calling цикл (макс 7 итераций) | ✅ Работает |
| System prompt с полным контекстом | ✅ 100+ строк правил |
| Поиск судов по назначению (AIS destination) | ✅ v3.8.0 |
| Поиск по соседним портам (50 NM) | ✅ v3.8.0 |
| Фильтрация по типу груза (сухой/контейнер/наливной) | ✅ v3.7.1 |
| UI форма выбора груза (3 карточки) | ✅ v3.9.0 |
| Расширяющийся радиус поиска (50→200→500 NM) | ✅ v3.7.0 |
| Кнопки "Показать на карте" | ✅ v3.7.0 |
| AIS провайдер (AISStream + AISHub + Digitraffic) | ✅ Работает |
| Google OAuth + кошелёк USDT | ✅ Работает |
| Мультиязычный интерфейс (EN/RU/ES) | ✅ Работает |
| Sanctions screening + dark fleet detection | ✅ Работает |
| PostgreSQL в продакшене | ✅ Работает |
---
## 5. TIMEWEB CLOUD (ФРАНКФУРТ, 700 РУБ/МЕС)
### Что получаешь за 700 руб:
- ~2 GB RAM, 1 vCPU, 30-40 GB NVMe SSD
- Frankfurt дата-центр (хорошо для Европа/Каспий)
- Публичный IP, SSH доступ
- Let's Encrypt SSL бесплатно
### Идея VPS — ПРАВИЛЬНАЯ. Решает реальные проблемы Render:
| Проблема Render Free | VPS решает? |
|----------------------|-------------|
| Засыпает через 15 мин → WebSocket рвётся | ✅ VPS всегда включен |
| Daemon threads умирают на gunicorn | ✅ Полный контроль ОС |
| SQLite эфемерный (данные теряются) | ✅ PostgreSQL на VPS |
| Нет cron jobs | ✅ Полный systemd/cron |
### Минусы Timeweb:
- ⚠️ **Российские IP** — Google/PayPal могут блокировать (критично для платежей!)
- ⚠️ Ручное администрирование — нет auto-deploy
- ⚠️ CPU троттлинг на shared VPS (по отзывам)
### РЕКОМЕНДАЦИЯ: Hetzner вместо Timeweb
| Параметр | Timeweb | Hetzner |
|----------|---------|---------|
| Цена | 700 руб (~$8) | €3.79 (~400 руб) |
| RAM | 2 GB | 4 GB |
| vCPU | 1 | 2 |
| SSD | 30-40 GB | 40 GB |
| Локация | Frankfurt | Falkenstein/Frankfurt |
| IP репутация | ⚠️ Российские | ✅ Немецкие |
| SLA | 99.98% | 99.9% |
| Docker | Да | Да |
| Snapshots | Да | Да |
**Hetzner дешевле, мощнее, и без проблем с репутацией IP.**
---
## 6. ИТОГОВАЯ РЕКОМЕНДАЦИЯ
### IronClaw → ❌ НЕ ВНЕДРЯТЬ
| Причина | Детали |
|---------|--------|
| Не тот продукт | Персональный ассистент ≠ веб-платформа для клиентов |
| Слишком сырой | v0.9.0, 3 недели, 116 issues, ноль production deployments |
| Не решает наших задач | AIS, порты, маршруты — этого в IronClaw нет |
| Лишняя сложность | Rust + Docker + NEAR вместо рабочего Python + Claude API |
| У нас уже есть | Tool-calling, system prompt, 26 инструментов = "обученный агент" |
### VPS миграция → ✅ ДА, но на Hetzner
Переезд с Render free tier на VPS разумен для стабильности AIS WebSocket и daemon threads.
### Что реально нужно делать (по приоритету):
1. **Получить MarineTraffic API ключ** — trial на неделю уже договорились
2. **Интегрировать MT API** в ais_provider.py как premium источник данных
3. **Перенести на Hetzner VPS** когда MT API готов
4. **Настроить CI/CD**: GitHub Actions → SSH deploy на VPS
---
## 7. О КОНТЕЙНЕРОВОЗАХ (ВОПРОС ДАТО)
На MarineTraffic контейнеровозы отображаются **тем же зелёным цветом**, что и сухогрузы (AIS коды 70-79 = "cargo"). Различаются только по текстовому описанию типа судна. Наша система (`classify_vessel_type()` в marinetraffic_parser.py) уже умеет их разделять. В UI форме (v3.9.0) — 3 отдельные карточки: Сухой груз / Контейнеры / Наливной.
---
## 8. РАЗБОР ФИЧ IRONCLAW: ЧТО МОЖНО ВЗЯТЬ ДЛЯ НАШЕГО ПРОЕКТА?
Ниже — критический разбор каждой фичи IronClaw: нужна ли она нам, и если да — нужен ли для этого IronClaw.
---
### 8.1. Multi-LLM (Claude + GPT-4o + Ollama + failover)
**Наш статус**: Только Claude Sonnet. Если Anthropic API упал — всё мертво.
**Полезно?** **ДА, частично.** Failover на другую модель при падении Claude — реальная проблема. Anthropic иногда лежит. Но:
- Реализация: 2-3 часа — добавить `try/except` в `generate_response()`, при ошибке Claude → вызвать OpenAI GPT-4o. System prompt и tools совместимы (OpenAI тоже поддерживает tool-calling).
- Для этого **не нужен IronClaw**. Это 50 строк Python-кода.
- Ollama (локальные модели) — бессмысленно. Llama 3 не потянет 26 инструментов с tool-calling. Качество ответов будет мусор.
**Вердикт: Полезна идея failover. Реализация тривиальная, IronClaw не нужен.**
---
### 8.2. Sandbox изоляция (Docker)
**Наш статус**: Инструменты — Python-функции. `search_vessel()`, `calculate_route()`, `get_position()`. Никакого shell access, никакого exec(), никакого пользовательского кода.
**Полезно?** **НЕТ.** Sandbox нужен когда агент выполняет **произвольный код** от пользователя (как Claude Code выполняет bash-команды). Наш агент вызывает **фиксированные функции** из `_TOOL_DISPATCH` dict. Пользователь не может инжектировать код. Это как ставить бронедверь в комнату без окон и дверей.
**Вердикт: Не нужно. Наша архитектура безопасна by design.**
---
### 8.3. Шифрование секретов (AES-256-GCM)
**Наш статус**: Секреты в `.env` файле (plaintext) локально, через Render Dashboard env vars в проде. Стандартный подход.
**Полезно?** **НЕТ для нашего масштаба.** AES-256 шифрование секретов нужно когда:
- Несколько разработчиков с разными уровнями доступа
- Секреты хранятся в Git (encrypted)
- Compliance требования (SOC 2, HIPAA)
У нас: 1 репо, 1-2 разработчика, `.env` в `.gitignore`. Render Dashboard шифрует env vars автоматически. Overhead шифрования не оправдан.
**Вердикт: Overkill для нашего масштаба.**
---
### 8.4. Leak detection (сканирование на утечку кредов)
**Наш статус**: System prompt говорит агенту "никогда не раскрывай источники данных". Но прямой проверки ответов на наличие API ключей нет.
**Полезно?** **ДА, это стоит сделать.** Простая проверка: перед отдачей ответа пользователю — regex-сканирование на паттерны API ключей (`sk-ant-`, `AISSTREAM_`, пароли). Если Claude случайно "выплюнет" ключ из контекста — мы его поймаем.
Реализация: 15 строк в `generate_response()`.
**Вердикт: Полезная идея. Реализация — 15 минут, IronClaw не нужен.**
---
### 8.5. Self-expanding (агент сам создаёт инструменты)
**Наш статус**: 26 фиксированных инструментов. Новые добавляются разработчиком вручную.
**Полезно?** **НЕТ. ОПАСНО.** Наши инструменты работают с реальными данными: AIS позиции, контакты судовладельцев, финансовые операции (charge_user). Автоматическое создание инструментов:
- Кто проверит что новый инструмент не сломает БД?
- Кто проверит что он не спишет деньги с чужого кошелька?
- Кто проверит что он корректно парсит AIS данные?
Для морской логистики нужны **проверенные, протестированные** инструменты. Не автогенерация.
**Вердикт: Категорически нет. Опасно для финансовых операций.**
---
### 8.6. Каналы (Telegram, Slack, Web UI)
**Наш статус**: Только Web UI (index.html). Для доступа нужен браузер.
**Полезно?** **ДА, Telegram — реально полезен.** Морская индустрия живёт в мессенджерах. Капитан/агент не будет открывать сайт — он напишет в Telegram. Это реальная бизнес-потребность.
НО: Для Telegram-бота **не нужен IronClaw**. Python-библиотека `python-telegram-bot` + наш `generate_response()` = Telegram-бот за 2-3 часа. Вся логика (26 инструментов, AIS, маршруты) уже в `seafare_agent.py`.
**Вердикт: Telegram-бот — отличная идея на будущее. Но это 100 строк Python, не IronClaw.**
---
### 8.7. PostgreSQL + pgvector (векторный поиск)
**Наш статус**: PostgreSQL есть. pgvector — нет. Поиск судов по текстовому совпадению (LIKE '%BOSTON%').
**Полезно?** **МОЖЕТ БЫТЬ, но не сейчас.** pgvector полезен для:
- Семантический поиск: "нужен балкер для зерна рядом с Турцией" → находит суда даже если destination = "ISKENDERUN" (не "TURKEY")
- Поиск по истории чатов: "что мне искали в прошлый раз?"
- Кэш похожих запросов: если кто-то уже искал "grain from Santos" — отдать кэшированный результат
Но наш объём данных пока маленький. 16,553 порта, ~1000 позиций в кэше. Обычный LIKE + индексы справляются. pgvector добавит сложности (установка расширения, embedding model, стоимость embeddings).
**Вердикт: Интересно на перспективу. Сейчас — преждевременная оптимизация.**
---
### 8.8. Smart routing / Failover / Circuit breaker
**Наш статус**: Один провайдер (Claude). Упал — всё стоит. У AIS провайдера уже есть chain (AISStream → AISHub → Digitraffic → MT → stale DB), но у LLM — нет.
**Полезно?** **ДА, это самое полезное из списка.** Паттерн circuit breaker:
- Claude API вернул 5 ошибок подряд → переключиться на GPT-4o на 5 минут
- GPT-4o тоже лёг → вернуть пользователю "сервис временно недоступен" вместо hang
Реализация для нашего проекта — 80 строк Python. Не Rust, не IronClaw.
**Вердикт: Самая полезная идея. Стоит реализовать. IronClaw для этого не нужен.**
---
## 9. СВОДНАЯ ТАБЛИЦА: ЧТО БРАТЬ, ЧТО НЕТ
| Фича IronClaw | Полезна? | Сложность | IronClaw нужен? |
|---------------|----------|-----------|-----------------|
| LLM Failover | **ДА** | ~50 строк Python | Нет |
| Sandbox | Нет | — | — |
| Шифрование | Нет | — | — |
| Leak detection | **ДА** | ~15 строк Python | Нет |
| Self-expanding | **ОПАСНО** | — | — |
| Telegram-бот | **ДА** (будущее) | ~100 строк Python | Нет |
| pgvector | Может быть | Средне | Нет |
| Circuit breaker | **ДА** | ~80 строк Python | Нет |
### 3 вещи которые стоит реализовать (без IronClaw):
1. **LLM Failover** — Claude упал → GPT-4o (~50 строк)
2. **Leak detection** — сканирование ответов на API ключи (~15 строк)
3. **Telegram-бот** — на будущее, когда основной функционал стабилен (~100 строк)
**Общий объём: ~250 строк Python-кода.** Ставить ради этого Rust-проект возрастом 3 недели — как покупать тягач чтобы отвезти пакет молока.