Ваш Claude Code внезапно начал тормозить? Виновник найден
Вы запускаете модель через llama.cpp, все работает быстро первые пару минут, а потом - бац - генерация превращается в слайд-шоу. Каждый новый запрос загружает процессор на 100%, словно модель генерирует ответ с нуля. Знакомо? Это не глюк, это классическая инвалидация KV-кэша.
На 30.03.2026 проблема актуальна для Claude Code версии 3.1+ в связке с llama.cpp 0.15.0 и новее. Если вы не фиксите системный промпт - готовьтесь к падению производительности на 40-70%.
Почему кэш сходит с ума и заставляет пересчитывать 20К токенов
KV-кэш (Key-Value cache) - это хитрая оптимизация. Вместо того чтобы пересчитывать внимание для каждого токена заново, модель кэширует промежуточные вычисления. Работает идеально, пока контекст статичен. Но Claude Code по умолчанию ведет себя как невротик - он постоянно меняет системный промпт, добавляя туда мета-информацию, телеметрию, служебные сообщения.
Каждое такое изменение - красная тряпка для llama.cpp. Алгоритм видит, что системная часть контекста изменилась, и полностью сбрасывает KV-кэш. Все эти красивые оптимизации летят в трубу, и модель начинает пересчитывать attention с нуля для всего контекста. В 20К токенов - это примерно 3-5 секунд чистого времени CPU/GPU.
Лекарство простое: заморозить системный промпт
Anthropic в Claude Code реализовали «динамическую телеметрию» - систему, которая дописывает в промпт служебную информацию. Хорошо для отладки, ужасно для производительности. Нам нужно отключить эту «фичу» и сделать промпт статичным.
Файл settings.json в папке Claude Code содержит все настройки. Нас интересует один параметр, который обычно прячется в глубине конфига.
1 Найти и вскрыть settings.json
Расположение зависит от ОС. На Linux и Mac ищите в ~/.config/ClaudeCode/. На Windows - %APPDATA%\ClaudeCode\. Если не нашли - запустите Claude Code один раз, он создаст конфиг автоматически.
# Для Linux/Mac
cat ~/.config/ClaudeCode/settings.json
# Для Windows (PowerShell)
Get-Content "$env:APPDATA\ClaudeCode\settings.json"
2 Найти злосчастный параметр
Откройте файл в любом редакторе. Ищите блок "llamaBackend" или "systemPrompt". В последних версиях Claude Code (на 30.03.2026) параметр называется "enableDynamicSystemPrompt" и обычно установлен в true.
| Параметр | Значение по умолчанию | Что делает |
|---|---|---|
| enableDynamicSystemPrompt | true | Добавляет в промпт время, метаданные, телеметрию |
| systemPromptTemplate | (динамический) | Шаблон, который меняется при каждом запросе |
3 Внести изменения
Вот как должен выглядеть исправленный конфиг:
{
"llamaBackend": {
"enableDynamicSystemPrompt": false,
"systemPromptTemplate": "Тут ваш статичный системный промпт. Без {timestamp} и других переменных."
}
}
Уберите все переменные типа {timestamp}, {session_id}, {telemetry} из шаблона. Оставьте только чистый инструктаж для модели.
Важно: после отключения динамического промпта Claude Code перестанет добавлять служебную информацию. Если вам нужна отладка, включайте эту опцию только на время диагностики.
4 Перезапуск и проверка
Закройте Claude Code полностью (не просто сверните, а завершите процесс). Запустите заново. Откройте два больших файла кода (чтобы набрать контекст ~15K токенов) и сделайте несколько последовательных запросов.
Следите за временем генерации. Первый запрос должен быть таким же медленным, как и раньше. А вот второй, третий, четвертый - должны идти в 2-3 раза быстрее. Если нет - что-то пошло не так.
Где собака зарыта: типичные косяки
- Кэш все равно сбрасывается. Проверьте, не используете ли вы
--prompt-cacheв llama.cpp с NUL-значением. В версиях 0.15.x есть баг с кэшированием пустых промптов. - Настройки не применяются. Убедитесь, что редактируете settings.json в правильной папке. Claude Code иногда создает несколько конфигов в разных местах.
- Производительность упала еще сильнее. Возможно, вы установили слишком длинный статичный промпт. Помните, что каждый токен в системном промпте съедает память KV-кэша.
Вопросы, которые вы зададите (и ответы на них)
Это сломает совместимость с Anthropic API?
Нет. Мы меняем только локальную часть Claude Code, которая отвечает за взаимодействие с llama.cpp. Подключения к облачным API останутся рабочими.
Что делать, если в моей версии Claude Code нет такого параметра?
Обновитесь до последней версии. Если параметра все равно нет - добавьте его вручную в секцию llamaBackend. Код выше совместим с версиями 3.0+.
Поможет ли это для других бэкендов (vLLM, TensorRT)?
Частично. Проблема инвалидации кэша актуальна для любого бэкенда, если системный промпт меняется. Но параметры настройки будут другими. Для vLLM смотрите наш гайд по Hybrid KV Cache Manager.
А если хочется еще больше скорости?
После фикса системного промпта вы выжмете максимум из текущей настройки. Следующий шаг - эксперименты с квантованием KV-кэша. На 30.03.2026 в llama.cpp появилась экспериментальная поддержка 2-битного кэша для некоторых архитектур. Рискованно, но если готовы к артефактам - может дать прирост еще на 30%.
И да, если вы работаете с действительно огромными контекстами (100K+ токенов), простой фиксацией промпта не обойтись. Тут нужно комбинировать несколько техник: оффлоадинг кэша на CPU, сжатие, сегментацию. Но это уже тема для отдельного разговора.
Совет напоследок: после любых изменений в настройках llama.cpp или Claude Code замеряйте производительность на одном и том же датасете. Иначе не поймете, что действительно работает, а что только кажется быстрее.
Теперь ваш Claude Code должен перестать тупить на длинных сессиях. Если нет - пишите в комментарии, разберемся вместе. И не забудьте подписаться на телеграм-канал, где мы разбираем такие косяки раз в неделю.