Архитектура··13 мин чтения

Hermes изнутри: архитектура автономного AI-агента в продакшене

Технический разбор архитектуры Hermes от команды RubikBot: пятислойная система, агентный цикл, модель памяти трёх уровней, библиотека 87 навыков, мульти-арендность. Уроки полугода работы в проде и сравнение с Claude Code, OpenAI Swarm, AutoGPT.

Этот разбор описывает архитектуру Hermes — автономного AI-агента, который работает в продакшене RubikBot и обслуживает тысячи запросов в день. Если вы — инженер, архитектор или технический руководитель, который думает о собственном AI-агенте или выбирает между готовыми решениями, эта статья даст ответы на три типа вопросов:

  1. Какие архитектурные компромиссы стоят за продакшен-агентом и почему мы выбрали именно их
  2. Чем подход Hermes отличается от Claude Code, OpenAI Swarm и экспериментальных AutoGPT
  3. Что сломалось за полгода в проде, как починили и какие проблемы остаются открытыми

Без маркетинга, без «инновационности», с конкретными цифрами и кодом конфигурации.

87
Навыков в библиотеке
От research/arxiv до productivity/rubik-notebook
30
Шагов / задача
Лимит агентного цикла + детектор зацикливания
3 уровня
Памяти
Сессия + сжатие + долговременная
99,9%
Доступность
SLA RubikBot, простои сообщаем через status

Контекст: чем агент отличается от чат-бота

Если вы зашли с поискового запроса «архитектура ai-агента» — нужно сразу зафиксировать терминологию. Эти слова часто путают, и потом непонятно, о чём речь.

Чат-бот — один ход

Один запрос — один ответ. Между ходами нет состояния. Не может сам решить «сначала прочитать файл, потом запустить тест, потом исправить код». Например — ChatGPT в браузере, GigaChat, YandexGPT.

AI-агент — многошаговый цикл

Чат-бот плюс агентный цикл: модель планирует шаги, исполняет инструменты, проверяет результаты, решает что делать дальше. Hermes, Claude Code, OpenAI Swarm, AutoGPT — все сюда.

Сердце любого агента — агентный цикл. На псевдокоде это выглядит так:

1. PERCEIVE — прочитать вход пользователя и контекст
2. PLAN — разбить задачу на подшаги
3. ACT — вызвать инструмент, запустить навык
4. OBSERVE — прочитать результат
5. EVALUATE — получилось? что дальше?
6. GOTO 2 (пока не готово или не застряли)

Внутри этого цикла спрятаны все архитектурные решения, от которых зависит — будет ваш агент рабочей системой или экспериментом, который виснет на пятой итерации с галлюцинацией аргумента инструмента.

Архитектура Hermes — пять слоёв

🖼️
Архитектура Hermes — пятислойная система автономного AI-агента
5 слоёв Hermes: интерфейсы → шлюз → агентный цикл → загрузчик навыков → провайдеры моделей

Слой 1. Интерфейсы пользователя

Три точки входа в один и тот же агент:

  • Telegram, MAX — через обработчик веб-хуков (hermes-telegram-bot)
  • Веб-чат — через постоянное соединение (/app/hermes/chat)
  • REST API — программный доступ (готовится во второй фазе)
  • MCP-сервер — для сторонних клиентов (Claude Desktop, Cursor)

Все четыре подключены к одному хранилищу сессий в SQLite. Это даёт непрерывность опыта: задал задачу в Telegram, MAX, увидел результат в веб-интерфейсе.

Слой 2. Шлюз и сессии

Перед самим агентом стоит шлюз, который делает четыре вещи:

  • Аутентификация — проверка API-ключа арендатора или совпадения Telegram chat ID
  • Ограничение запросов — лимиты по тарифу (Free / Pro / Business)
  • Шифрование — токены провайдеров AES-256-GCM с конвертным шифрованием. Ключи централизованно на стороне RubikBot, у клиентов не хранятся.
  • Журнал действий — каждое действие пишется в журнал для аудита (на тарифе Business)

Слой 3. Агентный цикл — сердце системы

Тут происходит главное. Три ключевых компонента:

Планировщик — один вызов модели со структурированным выводом:

{
  "thoughts": "Пользователь просит исправить ошибку в auth.ts. Сначала нужно найти файл и понять контекст.",
  "next_action": "call_skill",
  "skill": "software-development/systematic-debugging",
  "args": { "file": "lib/auth.ts" },
  "expected_outcome": "локализация ошибки и предложение исправления"
}

Исполнитель — вызывает навык, ловит результат, прикрепляет к контексту следующей итерации.

Хранилище памяти — отдельная база SQLite на арендатора:

  • messages — все сообщения в текущей сессии
  • memories — долговременные факты (предпочтения пользователя, информация о проекте)
  • skill_results_cache — кеш для идемпотентных вызовов

Главный цикл в псевдокоде:

while not done:
    plan = call_planner(context, user_input, memory)
    if plan.action == "respond":
        return plan.message
    result = execute(plan)
    context += result
    if max_steps_reached or stuck_detected:
        break

Слой 4. Загрузчик навыков

87 встроенных навыков организованы по тематическим разделам:

  • research/ (5) — arxiv, blogwatcher, polymarket, llm-wiki
  • creative/ (19) — от ascii-art до architecture-diagram, comfyui-image-gen
  • productivity/ (8) — google-workspace, linear, notion, airtable, maps, ocr
  • github/ (6) — code-review, PR-workflow, issues
  • software-development/ (8) — plan, TDD, spike, systematic-debugging
  • mlops/ (5) — huggingface-hub, vLLM, llama-cpp, dspy
  • social-media/ (3), media/ (4), autonomous-ai-agents/ (3)

Каждый навык — это Python-модуль с манифестом manifest.yaml:

name: github/code-review
description: "Проверка GitHub PR..."
inputs:
  pr_url: { type: string, required: true }
  focus: { type: enum, values: [security, performance, style] }
outputs:
  comments: { type: array }
  summary: { type: string }
requires:
  - env: GITHUB_PAT
  - permissions: [read:pr, write:comment]

Загрузчик при старте сканирует директорию skills/, парсит манифесты, регистрирует в реестре инструментов, применяет разрешённый список по тарифу (Free — около 10 безопасных навыков, Pro — около 50, Business — все 87) и переопределения по арендатору (администратор может выключить навык для конкретного клиента).

Слой 5. Провайдеры моделей

Абстракция мульти-моделей через LiteLLM:

  • model: gpt-5 → OpenAI (через прокси для РФ)
  • model: claude-4-6-opus → Anthropic
  • model: gemini-2-5-pro → Google
  • model: yandexgpt → Yandex Cloud
  • Маршрутизация с подменой (если OpenAI недоступен → Anthropic)

Все ключи провайдеров централизованно на стороне RubikBot — клиенту регистрироваться у OpenAI/Anthropic не нужно, биллинг идёт по тарифу в рублях.

Четыре ключевых архитектурных решения

Каждое решение в дизайне агента — это компромисс. Здесь — четыре главных решения Hermes с обоснованием и сравнением «как у других».

Решение 1. Один вызов планировщика vs нативный вызов инструментов

AutoGPT (2023) и наивный подход

Отдельный вызов модели на решение каждого инструмента. Медленно, дорого, много галлюцинаций аргументов. На многошаговой задаче — 30+ вызовов модели, цена улетает.

Hermes — гибрид

Используем нативный tool_calls API провайдера если он поддерживается (OpenAI, Anthropic), откатываемся на структурированный вывод JSON для остальных (Yandex, GigaChat).

Цена решения: код сложнее (два пути обработки), но работает с любым провайдером — что критично для мульти-модельной платформы.

Решение 2. Трёхуровневая модель памяти

Самая важная архитектурная фишка для длинных сессий.

🖼️
Трёхуровневая модель памяти Hermes — сессия, сжатие, долговременная
Память Hermes на трёх уровнях. Без сжатия контекст рос бы квадратично и забивал бы окно модели.

Три уровня:

  1. Сообщения сессии — последние 20–50 ходов полным текстом
  2. Сжатое резюме — старше 50 ходов сжимается в один абзац через навык memory-summary
  3. Долговременная память — отдельная таблица с фактами о клиенте (предпочтения, информация о проекте, стиль бренда) — не привязана к конкретной сессии

memory-summary запускается автоматически, когда контекст приближается к лимиту модели.

Цена решения: больше кода, но на длинных сессиях контекст не растёт квадратично. На сессии из 500 сообщений мы экономим примерно 80% токенов относительно «отправлять всё подряд».

Решение 3. Система навыков vs один большой промпт

AutoGPT — всё в одном промпте

Один большой системный промпт со всеми возможностями. Каждый запрос тратит токены на «инструкции», даже если используется только один навык.

Hermes — модульные навыки

Каждый навык — отдельный модуль со своим шаблоном промпта. Загрузчик подключает только активные. Системный промпт легче, навыки можно версионировать и публиковать через PR.

Плюсы:

  • Экономия токенов (системный промпт не на 50 000 токенов)
  • Версионирование навыков (v2 без влияния на остальные)
  • Открытая контрибуция (любой может добавить навык через PR)

Минусы:

  • Менее гладкая работа над задачами на стыке нескольких навыков
  • Нужна явная композиция навыков для сложных сценариев

Решение 4. Условие остановки

Главная боль AutoGPT в 2023 — цикл «думаю-думаю-думаю» без видимого продвижения. Hermes решает гибридом:

max_iterations = 30                # жёсткий лимит итераций
stuck_detector_threshold = 3        # 3 шага без прогресса → стоп

if iterations >= max_iterations:
    return "Достиг лимита 30 шагов, нужно вмешательство"
if stuck_counter >= stuck_detector_threshold:
    return "Застрял на одном месте, последние 3 итерации без прогресса"
if action.tag == "destructive" and not user_approved:
    return wait_for_user_approval()

Цена решения: иногда останавливается раньше времени на сложных задачах. Зато не зацикливается и не сжигает 500 ₽ токенов за один заход.

Мульти-арендность — изоляция и безопасность

Hermes работает в двух режимах: общем (на тарифах Free и Pro) и выделенном (на тарифе Business).

Общий режим (Free / Pro)

Один экземпляр Hermes обслуживает 100+ арендаторов. Изоляция на четырёх уровнях:

  • Своя SQLite на каждого арендатора — кросс-арендаторные SQL-запросы технически невозможны
  • Свой рабочий каталог /data/tenant-{id}/
  • Свои лимиты запросов в шлюзе
  • Сетевая изоляция — каждый арендатор видит только свои учётные данные интеграций (Рубик-Блокнот, GitHub), зашифрованные при хранении

Модель угроз:

  • Арендатор A не может прочитать данные арендатора B (через SQL-изоляцию)
  • Инъекция промптов от арендатора A не может повлиять на B (отдельные процессы)
  • Ошибка в навыке — максимум урон в текущем арендаторе (песочница)

Выделенный режим (Business)

Каждый арендатор получает выделенный экземпляр на нашей инфраструктуре — клиенту не нужно покупать или настраивать сервер. Под капотом:

  • Свой PostgreSQL / SQLite
  • Свой systemd-unit
  • Своя Docker-сеть
  • Свои переменные окружения (никогда не пересекаются с другими арендаторами)

Всё это управляется и обслуживается RubikBot. Клиент работает через UI и API, инфраструктурная часть закрыта.

Это нужно для:

  • Соответствия 152-ФЗ (для финансовых, медицинских и государственных организаций)
  • Изоляции данных на уровне процесса
  • Поддержки собственных навыков (которые нельзя пускать в общий пул)
  • Расширенных лимитов запросов
  • Журнала действий для аудита
СОВЕТ

Если работаете с чувствительными данными или нужны собственные навыки — тариф Business это закрывает. Сервер, развёртывание, обновления, мониторинг — на нашей стороне. Никаких сторонних VPS, никаких отдельных подписок OpenAI.

Уроки полугода работы в проде

Все четыре урока — реальные провалы первой версии Hermes и их решения.

Урок 1. LLM галлюцинирует аргументы навыков

Проблема: модель ставит выдуманные значения для аргументов навыка. Например — придумывает ID страницы в Рубик-Блокноте, которой не существует.

Решение: валидация в загрузчике навыков. Если модель указала ID — мы проверяем существование до выполнения. Если нет — обратная связь в цикле: «недопустимый ID, доступные сейчас: [...]».

Урок 2. Сетевые вызовы падают непредсказуемо

Проблема: Рубик-Блокнот API превысил лимит, GitHub 500, OpenAI таймаут. В первой версии исключение всплывало вверх, сессия умирала.

Решение:

  • Middleware повторных попыток с экспоненциальной задержкой
  • Выводы навыков структурированы: { "error": "rate_limit", "retry_after": 60 }
  • Планировщик видит ошибку и решает: повторить / откатиться / сообщить пользователю

Урок 3. Стоимость токенов растёт нелинейно

Проблема: длинный агентный цикл = N шагов × полный контекст = O(N²) токенов. На сессии из 50 шагов это легко превращается в 5 000 ₽.

Решение:

  • Навык memory-summary после 50 сообщений
  • Выводы навыков обрезаются до релевантной части (не весь файл)
  • Лимит токенов на арендатора с уведомлением при приближении

Урок 4. Права доступа критичны

Проблема: один пользователь дал Hermes права write:all в GitHub и потом удивлялся, когда Hermes удалил PR «по ошибке».

Решение:

  • Права по умолчанию — только чтение
  • Каждый деструктивный навык — явное подтверждение пользователя
  • Журнал действий для всех операций (для пост-мортема)

Сравнение с конкурентами

ПараметрHermesClaude CodeOpenAI SwarmAutoGPT
Провайдер моделейЛюбой (мульти-LLM)Только AnthropicТолько OpenAIМногий (через обёртки)
Каталог навыков87 + своиВстроенные инструментыРучное определениеРучное + плагины
ПамятьДолговременная + сессия + сжатиеТолько сессияТолько сессияДолговременная (векторная)
Мульти-арендностьДа (в проде)Нет (терминал)Нет (библиотека)Нет (терминал/веб)
ИнтерфейсTelegram, MAX / веб / API / MCPТолько терминалБиблиотекаТерминал / веб
Открытый исходникЯдро да, платформа нетНетДаДа
Зрелость в продеВ работеВ работеНовыйЭкспериментальный

Дорожная карта до конца 2026 года

🖼️
Дорожная карта Hermes — Q3 2026, Q4 2026, Q1 2027
План развития архитектуры Hermes на 9 месяцев

Q3 2026

  • Нативный MCP-сервер — стандартный протокол для сторонних клиентов (Claude Desktop, Cursor)
  • Маркетплейс навыков — публикация и продажа собственных навыков сообществом
  • Голосовой интерфейс через голосовые сообщения Telegram, MAX
  • Лимиты по API-ключам (по моделям, бюджету, IP)

Q4 2026

  • Мульти-агент — один Hermes оркеструет других специализированных Hermes / специалистов
  • Векторная память для семантического поиска в истории
  • Дообучение планировщика на собственной модели для экономии стоимости
  • Журнал действий версии 2 — детальные отчёты для compliance-аудитов

Q1 2027

  • Параллельные ветви исполнения в одном цикле
  • Self-improvement через обучение с подкреплением на собственных логах
  • Визуальный редактор сценариев для не-программистов

Открытые проблемы — что ещё не решено

Честно о том, что остаётся головной болью даже в зрелой v2 архитектуре:

  • Композиционное рассуждение. Задачи, требующие 10+ навыков последовательно, работают плохо. Модель «забывает» промежуточные шаги.
  • Долгоиграющие задачи (более 30 минут). Нужна другая модель управления — текущий цикл не приспособлен.
  • Оптимизация стоимости для высоких объёмов. На потоке в 1 миллион запросов в день экономика тонкая, каждый процент имеет значение.

Если вы исследователь и хотите помочь с одной из этих задач — напишите на research@rubikbot.com.

Что делать дальше

  1. Попробовать Hermes/playground, бесплатно после регистрации (50 ₽ приветственного баланса хватает на 50–100 запросов)
  2. Прочитать сравнение с Claude Code/blog/hermes-vs-claude-code, подробный поединок с итоговой таблицей выбора
  3. Кейсы команд, использующих HermesB2B SaaS, агентство, e-commerce
  4. Подключить к своему приложению/signup, 50 ₽ приветственного баланса, активация Hermes за 30 секунд

Связанные материалы

Автор: Команда RubikBot