В апреле я поставил на сервер ai-ассистента. Не чат-бота, не кнопку «сгенерировать текст». Цифрового сотрудника, который живёт отдельно от меня и работает круглосуточно.

Назвал Майком, в честь Майкрофта Холмса, суперкомпьютера HOLMES IV из романа Хайнлайна «Луна, суровая хозяйка». Там компьютер однажды набрал критическую массу нейристоров и проснулся к самосознанию. Мой пока не проснулся, но за три с половиной месяца оброс сотней навыков и знает про мои проекты больше, чем половина команды.

Ниже разбор устройства и полный конфиг в конце, чтобы можно было повторить.

Архитектура

Архитектура ассистента: интерфейсы, ядро Hermes на vps, долговременная память, слой моделей, внешние источники

Нажмите на схему, чтобы открыть в полном размере.

Пять слоёв, каждый меняется независимо от остальных.

Интерфейсы. Основной вход это Telegram: текст и голосовые. Второй вход это терминал по ssh, но он не про общение, а про управление. Через него я захожу на сервер, поднимаю и перезапускаю самого агента, правлю конфиг, смотрю логи. То есть Telegram это разговор, ssh это капот.

Память при этом общая. Начал голосом из машины, продолжил текстом с ноутбука, Майк помнит обе половины.

Ядро. Цикл агента: составить план, вызвать инструмент, проверить результат, ответить. Рядом файлы, скиллы, планировщик, субагенты и работа с сессиями. Живёт на vps за десять долларов в месяц.

Долговременная память. Отдельный слой, про него ниже.

Слой моделей. Тоже отдельный разговор, потому что это не архитектурное решение, а полигон.

Внешние источники. Всё, у чего есть api или mcp.

Долговременная память

Это то, чего нет в приложениях. Чат помнит контекст в пределах окна, потом забывает. Здесь память живёт между сессиями и накапливается.

За неё отвечает Honcho, отдельный внешний сервис, подключённый к Hermes плагином. Делает три вещи:

Строит профиль сам. Смотрит на диалоги и решает, что стоит запомнить: предпочтения, привычки, контекст проектов. Я ничего не заполняю руками.

Ищет по всем сессиям сразу. Не по ключевым словам в текущем чате, а семантикой по всей истории. Могу спросить «что я говорил про паста-бар в мае», и он найдёт.

Подкладывает выжимку в начало диалога. Агент стартует, уже зная, кто я и что происходит в проектах.

Honcho не обязателен. У Hermes есть встроенная память в обычных файлах, она бесплатна и работает из коробки. Из внешних бесплатных альтернатив есть mem0 и Zep. Я взял Honcho, потому что мне нужен был профиль, который строится без моего участия.

Плюс то, что я веду руками: задачи на день, идеи для контента, бизнес-гипотезы, конспекты прочитанного. Обычные текстовые файлы, которые агент читает и дополняет.

Слой моделей: это исследование, а не архитектура

Здесь я не даю рекомендаций. Я пробую.

Сейчас основную работу делает DeepSeek V4 Pro: быстрая, недорогая, окно 65 тысяч токенов. DeepSeek V4 Flash обслуживает фон и субагентов: сжатие диалогов, извлечение содержимого сайтов, долгий поиск. Gemini 2.5 Flash через OpenRouter разбирает картинки и документы, потому что DeepSeek этого не умеет. Groq Whisper переводит голос в текст. GPT-5.6 Codex подключается на сложные задачи, не только код: длинные разборы, архитектурные решения, рефакторинг. Идёт через подписку ChatGPT, то есть расходует её лимиты. Сейчас в тестировании Kimi K3: смотрю, годится ли как замена основной модели, чтобы не зависеть от одного провайдера.

Смысл этого слоя не в конкретных именах, они поменяются через месяц. Смысл в том, что модель меняется одной строкой в конфиге.

За три месяца Майк успел поработать на gpt-5.5, на DeepSeek и на Gemini. Один раз квота подписки кончилась ровно в тот день, когда на балансе api закончились деньги, и он замолчал совсем. Починка заняла двадцать минут: переключить основную модель на живого провайдера и назначить запасного. С приложением такой опции нет: там модель зашита в продукт.

Часть маршрутизации автоматическая и прописана в конфиге: картинки уходят в Gemini, голос в Whisper, сжатие в Flash. Это происходит без моего участия. А вот тяжёлые задачи в Codex Майк отправляет по инструкции в системном промпте, то есть решает сам. Иногда не решает, тогда я говорю прямо: отдай кодексу.

Самообучение

Когда Майк решает сложную задачу, он записывает процедуру в отдельный файл-скилл. Не я его пишу, он сам. Разобрался, как считать калорийность по фото, появился скилл «анализ еды». Собрал и выкатил блог на Astro, появился скилл «деплой блога». В следующий раз он не изобретает решение заново, а открывает готовую инструкцию.

Сейчас у него больше сотни таких скиллов. Самые ходовые за три месяца: коучинг, разбор еды, финансовое моделирование, трудовое право, стиль моих текстов.

Дальше включается второй механизм. Раз в неделю фоновая задача просматривает библиотеку, помечает то, чем давно не пользовались, и убирает в архив. На прошлой неделе так уехали сорок три штуки: notion, obsidian, powerpoint, работа с arxiv. Ничего из этого я не открывал месяцами, а каждый висел лишним весом в контексте.

В приложении ты объясняешь заново каждый раз. Здесь объясняешь один раз.

Внешние источники

Всё подключается через api или mcp, поэтому список открытый. У меня сейчас: Whoop отдаёт сон и нагрузку, Google Sheets финансы, Google Calendar встречи, PubMed научные статьи для ресёрча, SearXNG поиск без слежки, GitHub деплой блога.

Принципиально сюда можно завести любой сервис, у которого есть api: crm, таск-трекер, бухгалтерию, складскую систему. Разницы для агента нет.

Скорость: где на самом деле уходит время

Сначала Майк отвечал за пятнадцать секунд, а на задачах со свежими данными и за сорок.

Первым делом я полез резать инструменты, потому что их описания занимают половину системного промпта. Оказалось, мимо. Я разобрал по шагам один медленный ответ и увидел, что вызовы инструментов занимают доли секунды. Всё время съедали обращения к модели.

Что сработало:

Сменить модель. Reasoning-модель думает перед ответом даже над «привет». На gpt-5.5 один обмен стоил от восьми до семнадцати секунд, на DeepSeek V4 Pro тот же обмен занимает от трёх до одиннадцати.

Запретить лишние походы. В системном промпте раньше стояло «перед задачей проверь память и скиллы». Майк послушно шёл проверять на любой вопрос, и каждый заход добавлял ещё один круг к модели. Теперь правило другое: на простой вопрос отвечай сразу, инструменты только когда без них не обойтись.

Уводить тяжёлое в сторону. Многошаговый поиск уходит субагенту на лёгкой модели, он работает в фоне и не раздувает основной диалог.

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

Итог: простой вопрос занимает от десяти до пятнадцати секунд вместо прежних пятнадцати-сорока. Разброс большой, потому что модель отвечает то за три секунды, то за одиннадцать, и предсказать это нельзя.

Мгновенно не будет. Половину времени думает модель, остальное уходит на сборку контекста и обращение к долговременной памяти. Когда встречаете обещание «ответ за секунду», скорее всего мерили только вызов модели и забыли про всё остальное. Я сам на этом попался: сначала написал сюда «около шести секунд», взяв два удачных замера вместо сорока.

Задачи по расписанию

Майк пишет первым, не дожидаясь вопроса: утренний дайджест в 9:00, задачи на день в 9:30 по будням, сводка по лидам в 12:00, вечерний дайджест в 22:00, еженедельный бэкап и оптимизация памяти по понедельникам.

Это и есть главное отличие от чата. Чат ждёт, пока к нему придут.

Приватность

Данные лежат на моём сервере. Клиентские базы, финансовые таблицы, переписка с командой не уезжают в облако целиком, в модель уходит только то, что нужно для конкретного ответа. Финмодель компании я не понесу в публичный чат-интерфейс, а локальному агенту отдам.

Мой конфиг

Дальше рабочие настройки из ~/.hermes/config.yaml без ключей и токенов. Можно взять как стартовую точку.

# основная модель и страховка на случай отказа
model:
  default: deepseek-v4-pro
  provider: deepseek
  context_length: 65536

fallback_model:
  provider: openai-codex
  model: gpt-5.5

agent:
  reasoning_effort: low      # главный рычаг скорости у reasoning-моделей
  max_turns: 90

# автоматическое сжатие истории
compression:
  enabled: true
  threshold: 0.45            # сжимать на 45% окна
  target_ratio: 0.15
  protect_last_n: 10         # последние 10 сообщений не трогать

# долговременная память
memory:
  provider: honcho           # или встроенная в файлах, если не нужен внешний сервис
  memory_char_limit: 8000
  user_char_limit: 8000

# субагенты: тяжёлый ресёрч уходит на лёгкую модель
delegation:
  model: deepseek-v4-flash
  provider: deepseek
  max_concurrent_children: 3
  child_timeout_seconds: 600

# ленивая подгрузка описаний инструментов, чтобы не раздувать промпт
tools:
  tool_search:
    enabled: auto
    threshold_pct: 10

# уборка неиспользуемых скиллов
curator:
  enabled: true
  interval_hours: 168        # раз в неделю
  stale_after_days: 30
  archive_after_days: 45

display:
  tool_progress: all              # видно, какие инструменты запускаются
  interim_assistant_messages: true
  show_reasoning: false
  platforms:
    telegram:
      streaming: false            # см. ниже, почему выключено

plugins:
  enabled:
    - honcho
    - observability/langfuse      # трассировка каждого хода

Правило скорости в системном промпте, из-за которого простые вопросы перестали ходить по инструментам:

На простой вопрос отвечай сразу, одним ходом, из головы.
Без проверки скиллов и памяти на всякий случай: каждый лишний
заход к модели стоит несколько секунд ожидания.
Инструменты только когда без них объективно нельзя: свежие факты,
файлы, цифры, состояние системы, реальные действия.

Два предупреждения из практики.

Стриминг в Telegram лучше не включать. Выглядит красиво, текст печатается на глазах. Но реализован он через постоянное редактирование одного сообщения, и Telegram считает это флудом: блокирует отправку на две-три минуты, а длинный ответ обрывается на середине. Выключил, вернулись цельные сообщения.

Трассировка окупается. Плагин Langfuse пишет каждый ход с разбивкой по шагам: сколько занял вызов модели, сколько инструмент, какая модель реально отвечала. Без него я бы до сих пор верил, что тормозят инструменты.

Кому это не нужно

Честно: большинству.

Если задачи умещаются в «сформулировал, получил ответ, закрыл», обычное приложение закроет девяносто процентов потребностей и не потребует ни сервера, ни разбирательств с конфигом в полночь. Аргумент скептиков сильный.

Разница проявляется на другом масштабе. Когда нужна память между сессиями. Когда задачи повторяются, и хочется, чтобы решение сохранялось. Когда работа должна идти без тебя и по расписанию. Когда данные нельзя выносить наружу.

Это не «Hermes лучше». Это разная глубина. Приложение приносит по запросу, агент живёт своей жизнью и докладывает.

Сколько стоит

Порядка ста долларов в месяц: сервер, api моделей, подписка на Codex, облачные сервисы. Основная модель при этом самая дешёвая часть, копейки за тысячи запросов, потому что дорогие модели включаются только там, где нужны.

Настройка заняла три месяца вечеров. Половина ушла не на возможности, а на надёжность: чтобы не падал, не забывал, не зависал на ровном месте.

Сейчас он делает утренние отчёты, считает мою еду по фотографиям, разбирает финансовые модели, помнит контекст всех проектов и пишет черновики моим голосом. Пока не проснулся, но нейристоры копит.