С чего началось
Я гоняю Hermes Agent от Nous Research – это персональный ИИ-агент, который живёт на моей машине: терминал, файлы, браузер, телеграм-шлюз, планировщик задач, память между сессиями. Работает через RouterAI на deepseek-v4-flash.
Смотрю статистику у провайдера и вижу три запроса подряд:
| время | входящих | исходящих | ответ |
|---|---|---|---|
| 15:42:28 | 58 157 | 2 477 | 20,37 сек |
| 15:43:25 | 60 754 | 649 | 5,44 сек |
| 15:43:40 | 61 571 | 1 479 | 12,06 сек |
Шестьдесят тысяч входящих. При этом я в той сессии написал ему буквально «ты тут?», «але» и «сейчас на роутер аи работаем?».
Спросил у него самого. Он ответил уверенно: системный промпт 17 тысяч токенов, схемы инструментов 8 тысяч, история сессии 24 тысячи. И добавил, что память забита под потолок – 6 000 из 6 000.
Половина этого оказалась неправдой. Не потому что он врал – он просто не видит себя со стороны.
Что на самом деле в системном промпте
Hermes пишет каждую сессию в SQLite вместе с системным промптом. Выгрузил и померил.
Промпт – 34 999 символов. Разложил по блокам:
| блок | символов | доля |
|---|---|---|
| каталог навыков | 22 894 | 65 % |
| правила поведения агента | 6 779 | 19 % |
| всё остальное: память, профиль, платформа | ~5 300 | 16 % |
Две трети – список навыков. Сто тридцать четыре записи с описаниями, которые уезжают в модель при каждом запросе. Содержимое навыка грузится по требованию, а вот перечень постоянный.
Что в нём было: pokemon-player, gif-search, songwriting-and-ai-music, ascii-video, manim-video, pixel-art, touchdesigner-mcp, управление умными лампами, поиск по закладкам Firefox. Я не ставил почти ничего из этого – оно приехало пачкой при установке и при обновлениях.
Память и профиль, на которые он грешил, занимали в сумме пару тысяч символов из тридцати пяти.
Историю раздувает не переписка
Дальше я разобрал историю той самой сессии. Сто десять сообщений, сорок пять вызовов инструментов.
| что лежит в истории | символов |
|---|---|
| размышления модели | 123 710 |
| их точная копия во втором поле | 123 708 |
| результаты вызовов инструментов | 63 312 |
| собственно его ответы | 6 271 |
| мои реплики | 831 |
Восемьсот тридцать один символ – это весь мой вклад в разговор. Остальное он произвёл сам.
Сорок три вызова терминала. Когда я спросил про расход токенов, он полез перебирать логи: посчитал completion_tokens через awk, заглянул в errors.log, потом пять раз подряд разными запросами в базу сессий, потом снова в логи, потом в журнал обновлений. Один результат – 15 220 символов. И каждый такой кусок остаётся в контексте навсегда: следующий запрос тащит его целиком.
Вот откуда рост. Не «история переписки», а протокол его собственной суеты.
Размышления, за которые платишь молча
Четверть мегабайта размышлений в одной сессии, записанных дважды – в поля reasoning и reasoning_content, копия в копию.
Обратно в модель они не уходят, за это отвечает отдельный флаг, и он выключен. То есть на входящие токены они не влияют. Но модель их генерирует, а генерация – это исходящие, которые стоят втрое дороже входящих.
В конфиге у меня стояло reasoning: none. Выглядит как «размышления отключены». Полез в исходники – такого ключа в коде нет вообще. Настройка называется reasoning_effort, и выключает её значение false. У меня там стояло medium.
Проверил на живом запросе, «сколько будет 17 × 23»:
| запрос | выход | из них размышления |
|---|---|---|
| без параметра | 43 токена | 41 |
| с отключёнными размышлениями | 1 токен | 0 |
Разница в цене – в шесть раз на пустом месте.
Сжатие, которого не было
У Hermes есть сжатие контекста: когда история упирается в потолок окна, вспомогательная модель ужимает её в конспект. Настройка была включена, порог стоял.
Только вспомогательной моделью была назначена reka/reka-edge. У неё контекстное окно 16 384 токена. А сжимать её просили историю на сто тысяч.
То есть сжатие числилось работающим и не работало ни разу. История росла без остановки именно поэтому.
Заменил на mistral-nemo: окно 131 072, вход 2,1 рубля за миллион против 11,3 у Reka. Дешевле впятеро и физически способна проглотить то, что ей дают.
Фоновая задача, о которой я не знал
В логах наткнулся на строки, которых не ожидал:
| время | вызовов | входящих | исходящих |
|---|---|---|---|
| 22:31:13 | 8 | 22 110 | 13 823 |
| 22:42:26 | 3 | 12 401 | 11 790 |
| 22:52:11 | 6 | 18 023 | 9 695 |
Это не мои запросы. После каждого хода агент форкает сам себя, проигрывает копию разговора и спрашивает: не пора ли сохранить новый навык или запись в память. По восемь вызовов за раз и по десять-четырнадцать тысяч исходящих токенов.
В конфиге этой секции не было вовсе. В коде это описано прямо: если настройки нет – считаем включённой, «чтобы сломанный конфиг не отключил ревью молча». Механизм полезный, память он ведёт сам. Но гонять его на основной модели незачем – перевёл на ту же дешёвую Nemo. Бонусом: при смене модели он сам переходит с полного проигрывания разговора на компактный конспект.
А теперь неожиданное: денег это почти не стоило
Когда всё посчитал, вышло не то, чего я ждал.
У deepseek-v4-flash вход 6,2 рубля за миллион токенов, выход 19,8. Запрос на 60 000 входящих – 40 копеек. Сто запросов – сорок рублей. Фоновое ревью – 34 копейки за прогон.
Плюс кэш. Посмотрел учёт по вызовам:
Вход 36 944 токена, из них из кэша – 36 864.
Девяносто девять и восемь десятых процента контекста читается из кэша по льготной цене. Полную стоимость платишь только за первый холодный запрос в сессии.
Так что версия «агент разоряет» не подтвердилась. Настоящая цена другая, и она хуже денег.
Скорость. Двадцать секунд на ответ вместо двух. Модель перемалывает шестьдесят тысяч токенов, чтобы ответить «да, тут».
Качество. Когда в контексте лежат сорок три выдачи терминала, модель отвечает хуже. Ты спрашиваешь одно, а она тащит за собой всё, что нагребла полчаса назад, и путается. Это и есть настоящая расплата за раздутый контекст – не счёт, а деградация ответов.
Что сделал и что получилось
По порядку, от крупного к мелкому.
Навыки: со ста тринадцати до двадцати восьми. Каталог в промпте ужался с 22 894 символов до 4 613. Отдельно поставил маркер, чтобы обновление не подсыпало удалённое обратно – иначе всё вернётся при первом же update.
Размышления выключил правильным ключом.
Сжатие перевёл на модель с нормальным окном, порог опустил до 40 % – чтобы история подрезалась раньше, а не в теории.
Фоновое ревью – на дешёвую модель.
И главное, что дало больше всего: запретил ему лазить по файлам без нужды. У Hermes есть режим «кодерской осанки»: если рабочая папка похожа на проект, агент считает уместным её изучать. В терминале я почти всегда в такой папке. Выключил режим и добавил в описание личности прямое правило: не ходить по файловой системе и не запускать команды, если без этого нельзя ответить.
Результат замерил по логам за сутки:
| вызовов | медиана входящих | |
|---|---|---|
| терминал, до настройки | 481 | 63 051 |
| телеграм, до настройки | 85 | 27 469 |
| после настройки, оба канала | – | прирост ~300 на сообщение |
Триста токенов – это ровно текст моего сообщения плюс его ответ. Без хвостов.
Разница между каналами, кстати, объяснилась не техникой. Системные промпты почти одинаковые – 34 999 символов в терминале против 34 554 в телеграме. Отличалось поведение: 2,8 вызова инструментов на реплику в терминале против 0,8 в телеграме. В телеграме я с ним разговариваю, в терминале ставлю задачи – и он идёт копать.
Грабли, на которые уже наступил
Настройка с правдоподобным именем может ничего не значить. reasoning: none выглядит как отключение размышлений. В коде такого ключа нет. Проверять надо не по здравому смыслу, а по исходникам – благо Hermes открытый.
Агент не видит себя со стороны. Он уверенно назвал состав своего промпта и ошибся в главном: списал всё на память и профиль, а каталог навыков не упомянул. Спрашивать агента о его расходах – всё равно что спрашивать у человека, сколько он потратил, без выписки по карте.
Штатная команда удаления может молча ничего не делать. skills uninstall отработала на сорока шести навыках, вернула успех – и не удалила ни одного. Она рассчитана на установленные из хаба, а встроенные игнорирует. Проверил по диску, иначе бы так и жил с иллюзией.
Не чините то, что не меряли. Я час гонялся за 96-килобайтным файлом инструкций, который, по коду, должен был подмешиваться в промпт. Померил фактический промпт – его там нет. Вывод по исходникам оказался неверным, а замер занял пять минут.
Вспомогательные модели надо проверять по окну, а не по цене. Дешёвая модель на роли компрессора бесполезна, если её окно меньше того, что она должна сжать. Такая ошибка не падает с ошибкой – она просто тихо не работает.
Вопросы и ответы
Это касается только Hermes или любого агента? Механизмы общие. Каталог инструментов и навыков в системном промпте, история вызовов, которая не выбрасывается, фоновые задачи, размышления в исходящих – всё это есть у любого агентного каркаса. Отличаются названия настроек и то, насколько разработчик даёт до них добраться.
Почему нельзя просто увеличить окно контекста? Можно, и именно это создаёт ловушку. У модели окно в миллион токенов, поэтому ничего не ломается и предупреждений нет – история просто пухнет. Проблема всплывает не как ошибка, а как медленные и плохие ответы.
Кэш ведь и так экономит, зачем чистить контекст? Кэш экономит деньги, но не время и не внимание модели. Прочитанные из кэша шестьдесят тысяч токенов всё равно проходят через неё целиком, и релевантная часть в них тонет.
Сколько времени заняла настройка? Вечер, из которого большая часть ушла на замеры, а не на правки. Сами изменения – это шесть строк в конфиге, удаление лишних навыков и три предложения в описании личности.
Что дало наибольший эффект? Запрет самовольно лазить по файлам. Все остальные правки вместе взятые срезали около двух тысяч токенов на вызов, а эта убрала десятки тысяч, потому что убрала причину, а не следствие.
Что делать, если у меня нет доступа к конфигу агента? Начинать новую сессию после каждой законченной задачи. Это единственный рычаг, который работает без настроек, и он же самый действенный: история – самая крупная часть раздутого контекста.
Если у вас похожая история
Первое, что стоит сделать – не менять настройки, а посмотреть выгрузку одной сессии и посчитать, из чего она состоит. У меня после этого замера половина первоначальных гипотез отпала, включая мою собственную.
Если нужен разбор вашего случая или помощь с внедрением агентов так, чтобы они не съедали бюджет и не тормозили – напишите, посмотрим вместе.
Эту задачу закрывает отдельная услуга – аудит бизнес-процессов.
