Устранение неполадок: «Мой агент как будто поглупел»

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

1. Проверьте, какую модель использует сессия

Симптом: Ответы стали более поверхностными, качество кода упало, рассуждения хромают — и всё это сразу.

Проверка: Запустите /model без аргументов, чтобы увидеть текущую модель, или /status — там сразу видно модель, провайдера и профиль сессии.

Что это значит: Смена модели меняет возможности агента, и легко оказаться не на той модели, что вы думаете:

  • Обычное переключение /model <name> по умолчанию действует только для текущей сессии (если не задан model.persist_switch_by_default: true) — модель, на которой вы работаете, может не совпадать с той, что прописана в config.yaml.
  • Смена основной модели на странице Models в дашборде применяется только к новым сессиям — уже открытый чат продолжает работать на той модели, с которой начался.
  • Если вы переключились на более быструю модель для простой задачи (такой приём рекомендуют Советы и рекомендации), не забудьте вернуться к прежней модели для сложных рассуждений.

Если модель не та, /model <name> исправит это для текущей сессии; добавьте --global, чтобы закрепить изменение в config.yaml. Учтите: переключение модели посреди сессии сбрасывает кэш промпта, и следующий ход перечитывает всю переписку по полной цене входных токенов — в долгой сессии иногда дешевле сразу начать заново на нужной модели.

2. Проверьте использование контекста

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

Проверка: Запустите /usage, чтобы увидеть использование токенов и состояние окна контекста, или /context — для наглядной разбивки того, что занимает окно (системный промпт, определения инструментов, навыки, память, переписка) и сколько места свободно.

Что это значит: В долгих беседах накапливаются сообщения и результаты работы инструментов, и сессия приближается к лимиту контекста. Заметив деградацию в длинной сессии:

# Сжать переписку (суммирует историю, сохраняя важный контекст)
/compress

# Или начать новую сессию
/new

/compress суммирует историю переписки, заметно сокращая число токенов и сохраняя при этом важный контекст. /compress here [N] оставляет N последних обменов репликами дословно и суммирует всё остальное, а тема фокуса (/compress focus <topic>) сужает то, что сохраняет полная сводка.

совет

Используйте /compress регулярно в течение долгой сессии, не дожидаясь проблем, и время от времени проверяйте /usage, чтобы понимать, где вы находитесь.

3. Проверьте определённую длину контекста

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

Проверка: Посмотрите на стартовую строку CLI — там показана определённая длина контекста (например, 📊 Context limit: 128000 tokens). Проверить можно и во время сессии командой /usage.

Что это значит: Hermes мог автоматически определить неверную длину контекста для вашей модели. Задайте её явно:

# В ~/.hermes/config.yaml
model:
  default: your-model-name
  context_length: 131072  # реальное окно контекста вашей модели

Или для пользовательских эндпоинтов — отдельно для модели, в записи провайдера:

providers:
  my-server:
    api: "http://localhost:11434/v1"
    models:
      qwen3.5:27b:
        context_length: 64000

Пользователям Ollama: если вы задали собственный num_ctx, укажите такую же длину контекста в Hermes — /api/show в Ollama сообщает максимальный контекст модели, а не действующий num_ctx, который вы настроили. На работающем шлюзе изменения model.context_length или любого ключа compression.* применяются со следующего сообщения — перезапуск не нужен.

См. Определение длины контекста — как работает автоопределение и какие есть варианты переопределения.

4. «Я сказал ему что-то, а он забыл» — замороженный снимок памяти

Симптом: Вы попросили Hermes запомнить что-то в этой сессии, он подтвердил сохранение, но позже в той же самой сессии словно не в курсе.

Проверка: Тут ничего не сломано — дело во времени. Память, сохранённая посреди сессии, сразу же записывается на диск, но в системном промпте она появится только со следующей сессии.

Что это значит: Это задокументированное, намеренное поведение. Память попадает в системный промпт как замороженный снимок на момент начала сессии, и это внедрение не меняется в течение сессии — так сохраняется префиксный кэш LLM ради производительности. Когда агент добавляет или удаляет записи памяти в ходе сессии, изменения сразу сохраняются на диск, но в системном промпте отражаются только с началом следующей сессии. Ответы инструментов всегда показывают актуальное состояние, так что само сохранение подтверждено и реально.

инфо

Замороженный снимок на практике: фраза «запомни X» в текущей сессии гарантирует, что X будет доступно в следующей сессии. В текущей сессии этот факт всё ещё существует в истории переписки — агент забудет его, только если эта часть переписки к тому моменту уже была сжата (см. пункт 7).

См. Постоянная память — там вся механика подробно.

5. Память ограничена и курируется — это не стенограмма

Симптом: Hermes не помнит деталь из сессии на прошлой неделе, хотя вы обсуждали её подробно.

Проверка: Объём и содержимое памяти. Заголовок памяти в системном промпте показывает заполненность (например, [67% — 1,474/2,200 chars]), а hermes journey list выводит все сохранённые записи памяти и навыки.

Что это значит: Постоянная память намеренно ограничена — 2 200 символов (~800 токенов) для MEMORY.md и 1 375 символов (~500 токенов) для USER.md. В ней хранятся отобранные важные факты, а не стенограммы бесед. Сохранять стоит предпочтения, факты об окружении, договорённости и поправки; сырые подробности обсуждения там намеренно не хранятся.

Для запроса вида «мы обсуждали X на прошлой неделе?» у агента есть отдельный механизм: session_search ищет по всем прошлым сессиям (они хранятся в SQLite с полнотекстовым поиском) и находит то, что обсуждалось недели назад, даже если это не попало в активную память. Просто спросите — «поищи в прошлых сессиях обсуждение деплоя».

Можно помочь и напрямую: скажите «запомни это на будущее» после продуктивной сессии или «приберись в памяти», когда она почти заполнена, — тогда агент объединит записи. См. Советы по памяти и навыкам и Управление объёмом.

6. Проверьте, что навыки и инструменты загружены

Симптом: Раньше Hermes уверенно справлялся с определённым процессом, а теперь подходит к нему как новичок или говорит, что не может сделать то, что делал прежде.

Проверка:

  • /skills — посмотреть установленные навыки (нужный агенту навык мог быть удалён).
  • /reload-skills — заново просканировать ~/.hermes/skills/ на предмет новых или удалённых навыков.
  • /tools list — посмотреть доступные инструменты; инструмент, отключённый ранее командой /tools disable, остаётся вне набора инструментов агента на всю сессию.
  • /context all — список затрат по каждому навыку и набору инструментов, заодно служит инвентарём того, что реально загружено.

Что это значит: Навыки — это процедурные знания агента: многошаговые процессы и инструкции по работе с конкретными инструментами. Если навык отсутствует или набор инструментов урезан (например, сессия запущена командой hermes chat -t "terminal", чтобы облегчить промпт), у агента в этой сессии буквально меньше возможностей. Включите инструменты обратно командой /tools enable или вызовите навык явно по имени (/github-pr-workflow), чтобы убедиться, что он загружается.

7. Побочные эффекты сжатия

Симптом: После долгой сессии (или сразу после /compress) Hermes помнит общую канву, но теряет мелкие детали из начала переписки.

Проверка: Сработало ли сжатие — /usage и /context показывают статистику сжатия и состояние контекста на платформах обмена сообщениями, а ручной /compress всегда сообщает о результате.

Что это значит: Сжатие заменяет более старую историю переписки сводкой — в этом весь смысл, и оно неизбежно меняет детализацию на свободное место. Вот как это устроено:

  • Недавние сообщения защищены: по умолчанию последние 20 сообщений остаются несжатыми (protect_last_n), а начальный обмен репликами закреплён (protect_first_n: 3), чтобы исходная цель оставалась на виду.
  • Сжатие не разрушительно: при значении по умолчанию compression.in_place: true сессия сохраняет один постоянный id, а обороты до сжатия мягко архивируются — их по-прежнему можно найти через session_search и восстановить, они не удаляются.
  • При in_place: false (устаревшее поведение) каждое сжатие переносит данные в новую сессию, связанную со старой — озаглавленная сессия превращается в "my project" → "my project #2" → "my project #3". Если вы возобновляете сессию по названию, hermes -c "my project" автоматически выбирает самый свежий вариант.
  • Тема фокуса сужает то, что сохраняет полная сводка: /compress focus auth-refactor сохраняет детали этой темы за счёт всего остального.

Если сжатая деталь важна, попросите агента найти её (session_search достаёт архивные обороты) или вставьте ключевые факты обратно в переписку.

См. Сжатие контекста — полный справочник по настройкам, и Автоматическая цепочка сессий при сжатии — как связываются озаглавленные сессии.


Краткая справка

СимптомПервая командаВероятная причина
Всё кажется менее толковым/modelСессия работает на другой модели, чем вы думаете
Деградация в долгой сессии/usageДавление на контекст — сожмите или начните заново
Лимиты наступают подозрительно раностартовая строка CLI / /usageНеверно определена длина контекста
Забыл то, что я сказал в этой сессии— (так и задумано)Замороженный снимок памяти — появится в следующей сессии
Забыл обсуждение прошлой неделипопросите его выполнить session_searchПамять ограничена и хранит только отобранные факты
Утратил конкретный навык/skills, /tools listНавык или набор инструментов не загружен в этой сессии
Потерял старую деталь после долгой сессии/usage, /contextСжатие суммировало более старую историю
перевод и редактура:

обновлено

⌕ ESC