Как оптимизировать контекст и стоимость сессии Claude Code
Узнайте, почему Claude Code замедляется и расходует лишние токены при длительной работе. Используйте команды /context, /clear и /compact для контроля размера контекста.
Как предотвратить замедление и рост стоимости длительной сессии Claude Code
Длительная сессия Claude Code становится медленной и дорогой, так как на каждом шаге повторно отправляется весь контекст, объем которого постоянно растет. Решение заключается в соблюдении гигиены в определенном порядке. Запустите /context, чтобы увидеть, что именно заполняет окно контекста, удалите элементы, за которые вы платите при каждом запросе, затем используйте /clear между несвязанными задачами и /compact с инструкцией внутри одной длительной задачи. Работайте непрерывными сессиями, так как «холодный» кэш промптов превращает дешевое чтение в полную перезапись всего, что вы ввели ранее.
Ответ на вопрос, почему счетчик расхода токенов продолжает расти, приведен в счетчик токенов в сессии агента.
Ознакомьтесь с /context перед внесением изменений
Не пытайтесь угадать, что заполняет окно контекста. Claude Code предоставит вам эту информацию.
/context [all] отображает текущее использование контекста в виде цветной сетки с рекомендациями по оптимизации для инструментов, потребляющих много ресурсов, и выявлению избыточного использования памяти; all разворачивает подробный разбор по элементам в полноэкранном режиме. Воспринимайте результат как пять категорий.
- Системный промпт. Инструкции для самого Claude Code. Фиксированы на время сессии.
- Определения инструментов. Схемы для всех инструментов, которые может вызвать агент, включая все подключенные серверы MCP (Model Context Protocol).
- Файлы памяти.
CLAUDE.mdи автоматическая память, загружаемая при запуске сессии. - Файлы и результаты работы инструментов. Все прочитанные файлы и всё, что вывели ваши команды.
- История сообщений. Ваши запросы и ответы агента.
Первые три категории — это фиксированные затраты, которые оплачиваются при каждом запросе на протяжении всей сессии. Последние две категории растут. Сократите фиксированные затраты один раз в начале; управляйте растущей частью постоянно.
Две строки сообщают о том, что окно заполнено:
Context exceeds the 200k-token limit by 94k tokens — run /compact or /clear to continue.
Context is 94k tokens past the 200k-token compaction window — run /compact to reduce usage.Первая строка указывает на жесткий лимит, при котором запрос отклоняется; соответствующая ошибка API (application programming interface) выглядит как Prompt is too long. Вторая строка — это окно сжатия, которое может находиться ниже реального окна контекста модели при использовании модели с 1 миллионом токенов. Запросы продолжают выполняться после достижения этого порога, поэтому это скорее предупреждение, чем отказ.
В платной подписке /usage добавляет вторую половину данных, отмечая такие действия, как использование длинного контекста или промахи кэша, а также распределяя недавнее использование между отдельными навыками, субагентами и серверами MCP. Если система сообщает, что лимит уже исчерпан, то, какого именно лимита вы достигли, определяет, поможет ли сейчас очистка контекста или вам нужно выбрать другой способ продолжения работы.
CLAUDE.md — это постоянные расходы, поэтому сохраняйте файл компактным
Ваш CLAUDE.md загружается в контекст при запуске сессии и остается там. Если в нем содержится подробная процедура развертывания, эти токены будут занимать место, даже когда вы просто исправляете опечатку в тестовом файле. Рекомендация Anthropic — включать только самое необходимое и поддерживать объем файла менее 200 строк.
Переносите процедуры в навыки (skills). Навык загружается только при вызове, поэтому рабочий процесс, который вы запускаете дважды в неделю, не требует затрат в остальные дни. У навыков есть собственный бюджет после сжатия (compaction): тела навыков повторно внедряются с ограничением в 5000 токенов на навык и 25 000 токенов в сумме, при этом самые старые данные удаляются первыми. Усечение сохраняет начало файла, поэтому размещайте наиболее важные инструкции в верхней части SKILL.md.
То, что остается после сжатия, определяет, где должна находиться инструкция.
- Системный промпт и стиль вывода остаются неизменными, так как они не являются частью истории сообщений.
- Файл
CLAUDE.mdв корне проекта, глобальные правила и автоматическая память повторно внедряются с диска. - Правило с метаданными
paths:теряется до тех пор, пока соответствующий файл не будет прочитан снова. - Вложенный
CLAUDE.mdв поддиректории теряется до тех пор, пока файл в этой поддиректории не будет прочитан снова. - Хуки продолжают срабатывать, так как хук выполняется как код; только контекст, добавленный хуком ранее, суммируется вместе с остальной частью диалога.
Таким образом, правило, от которого вы зависите, должно находиться в CLAUDE.md в корне проекта: Claude Code сначала очищает старые выводы инструментов, а затем выполняет суммаризацию, поэтому инструкции из начала диалога могут быть потеряны. Редактируйте память с помощью /memory. Claude Code хранит копию, загруженную при старте сессии, поэтому изменение файла в середине сессии сохраняет кэш промпта и не применяется до следующего /clear, /compact или перезапуска. Потеря контекста — лишь одна из причин, по которой правило перестает соблюдаться, поэтому, если правило явно находится в окне контекста, но все равно игнорируется, разберитесь с другими причинами, прежде чем переписывать его.
Очистка между задачами и сжатие внутри одной задачи
Эти две команды выглядят взаимозаменяемыми, но их стоимость существенно различается.
/clear [name] начинает новый диалог с пустым контекстом. Запрос не отправляется, поэтому плата не взимается. Передайте имя, чтобы пометить предыдущий диалог в списке /resume; /reset и /new являются псевдонимами. Используйте эту команду сразу при переключении на несвязанную задачу, иначе старая задача будет повторно отправляться и оплачиваться с каждым сообщением в новой.
/compact [instructions] освобождает контекст, продолжая тот же диалог: команда создает краткое изложение истории и заменяет её этим текстом. Используйте её внутри одной длительной задачи, где требуется сохранение непрерывности.
Всегда давайте /compact инструкцию. Обычная команда /compact создает резюме на основе стандартного промпта, который не «знает», какая часть работы вам еще нужна. Инструкция позволяет сохранить нужные детали:
/compact focus on the auth bug fix
/compact keep only the plan and the diffЕсли вы сжимаете контекст по одной и той же причине, добавьте постоянную инструкцию в файл CLAUDE.md вашего проекта в раздел # Compact instructions. В новой сессии /compact выводит Not enough messages to compact., что означает недостаточное количество сообщений для создания резюме; это может произойти даже при полном контексте, если он был заполнен одним большим вставленным фрагментом.
Здесь часто путают два вида затрат. Запрос на создание резюме использует ваш префикс, поэтому он считывает существующий кэш, а не обрабатывает историю заново, и основное время уходит на генерацию самого резюме. Сжатие большого контекста все равно является «тяжелым» запросом, так как входными данными служит вся история диалога. Шаг после сжатия не является медленным: он перестраивает кэш для гораздо более короткого промпта.
Существуют две более дешевые команды. /rewind откатывает код и диалог к контрольной точке; для пути, который вы хотите полностью забросить, это лучше, чем сжатие, так как команда обрезает историю до префикса, который уже кэширован. /recap добавляет резюме как вывод команды, вместо того чтобы заменять историю, поэтому кэшированный префикс остается нетронутым.
Автоматическое сжатие, срабатывающее постоянно, выводит следующее сообщение:
Autocompact is thrashing: the context refilled to the limit...Сжатие выполнено успешно, но вывод файла или инструмента несколько раз подряд переполнял окно, поэтому Claude Code прекратил попытки. Для восстановления ситуации прочитайте слишком большой файл по частям, выполните /compact с фокусом, исключающим большой вывод, перенесите эту работу на субагента или используйте /clear, если предыдущий диалог завершен.
Серверы MCP создают фиксированные накладные расходы
Каждый подключенный сервер MCP увеличивает объем данных для каждого запроса на протяжении всей сессии. Вы платите за него независимо от того, вызываете ли вы инструменты.
Claude Code смягчает эту проблему. Определения инструментов MCP по умолчанию откладываются, поэтому в контекст попадают только имена инструментов, пока Claude не воспользуется конкретным из них. Запустите /context, чтобы увидеть реальную стоимость ваших серверов, и /mcp disable <name>, чтобы отключить сервер, который не понадобится вам сегодня. Если вы запускаете собственные серверы MCP на VPS, та же арифметика ограничивает количество инструментов, которые должен предоставлять один сервер.
Выполняйте это в начале сессии. Пока определения остаются отложенными, подключение или отключение сервера лишь добавляет записи в историю диалога, а кэш сохраняется. В случаях, когда определения загружаются в префикс (поскольку поиск инструментов отключен, недоступен или находится ниже порога auto), это же изменение заставит следующий запрос заново считывать все данные.
Фильтрация подробного вывода инструментов перед его попаданием в контекст
Результат работы инструмента становится входными данными, которые повторно отправляются при каждом последующем запросе. Тестовый запуск, выводящий 20,000 токенов, — это не разовые затраты: вы оплачиваете их снова на каждом шаге, пока этот вывод не выйдет за пределы окна контекста.
Выполняйте фильтрацию у источника. Хук, который сокращает результаты теста до списка ошибок перед тем, как их увидит Claude, превращает массивный вывод в несколько сотен токенов — как в текущем запросе, так и при каждой его повторной отправке:
npm test 2>&1 | grep -E "FAIL|Error:" | head -40Хуки сами по себе не попадают в контекст, так как они исполняются как программный код. Применяйте этот подход для любого инструмента, вывод которого превышает размер экрана. Та же логика применима к файлу на 3,000 строк: запрашивайте только нужный диапазон строк, так как весь файл остаётся в окне контекста после того, как он был туда загружен.
Ограничение области чтения агента и делегирование ресурсоемких задач
Запрос, в котором указаны конкретный файл и симптом, приводит к чтению только этого файла. Общий запрос на приведение проекта в порядок заставляет агента читать всё, что он сочтет нужным, и каждое такое чтение остается в контекстном окне.
Делегируйте объемные задачи субагенту. Запуск тестов и обработка логов потребляют значительный объем контекста; субагент сохраняет этот вывод в своем собственном окне и возвращает только краткое резюме. Компромисс заключается в том, что субагент создает собственный кэш, который не дает попаданий при первом вызове, и использует пятиминутное время жизни кэша даже при наличии подписки. Делегирование надежно защищает ваш основной контекст. Оно не всегда снижает общее количество токенов.
Часы кэширования: работайте сессиями
Кэширование промптов делает повторную отправку запросов экономически выгодной. Запись префикса стоит 1.25x от базовой стоимости входных токенов или 2x при часовом времени жизни. Чтение обходится в 0.1x для Haiku 5.5, 0.05x для Opus 5.5 и Sonnet 5.5 ($0.20 и $0.10 за миллион токенов) и 0.025x для Fable 5.1 ($0.25 за миллион). Каждое использование обновляет запись без дополнительных затрат, поэтому отсчет времени идет от момента последнего обращения. Эти множители показывают структуру счета, но не его итоговый размер, поэтому используйте их вместе с реальной стоимостью миллиона токенов, чтобы перевести объем контекстного окна в денежный эквивалент.
Время жизни кэша зависит от способа аутентификации, поэтому утверждение «кэш всегда истекает через пять минут» неверно.
- При наличии подписки Claude, Claude Code автоматически запрашивает часовой интервал жизни кэша.
- Как только лимит вашего плана исчерпан и вы начинаете использовать платные кредиты, время жизни сокращается до пяти минут.
- При использовании API key или облачного провайдера время жизни составляет пять минут. Установка
promptCacheTtlв значение1hилиENABLE_PROMPT_CACHING_1H=1активирует часовой интервал, аFORCE_PROMPT_CACHING_5M=1принудительно возвращает его к пяти минутам.
Рекомендация по темпу работы одинакова в обоих случаях: работайте непрерывными сессиями. Простой, превышающий время жизни кэша, приведет к тому, что при следующем запросе префикс будет записан заново. Отсоединенная сессия Claude Code в tmux не требует затрат во время простоя, но именно время простоя приводит к потере прогретого кэша.
Некоторые действия сбрасывают кэш, даже если вы продолжаете работу: переключение моделей, изменение уровня усилий (effort level) в старых моделях, включение быстрого режима, подключение или отключение MCP-сервера, отказ от использования инструмента при загрузке определений, включение или выключение плагина, добавляющего инструменты, сжатие данных, удаление старых изображений при переполнении диалога и обновление Claude Code. В моделях Opus 5.5, Sonnet 5.5, Haiku 5.5 и Fable 5.1 при использовании API key или подписки изменение уровня усилий теперь сохраняет кэш. /model обычно вызывает неожиданные расходы, так как у каждой модели свой кэш: следующий запрос считывает всю историю без попаданий в кэш, даже если содержимое идентично. Это повторное чтение тарифицируется по расценкам целевой модели как новая запись в кэш. Таким образом, переключение на Fable в середине сессии приведет к оплате всей накопленной истории по опубликованным тарифам Fable на запись в кэш: $12.50 за миллион токенов при пятиминутном времени жизни или $20 при часовом (тарифы одинаковы для Fable 5 и Fable 5.1).
Редактирование файлов, редактирование CLAUDE.md, вызов навыков и команд, выполнение /recap, отмена действий (rewind) и запуск субагентов сохраняют кэш. Область действия кэша ограничена одной машиной и одной директорией, поэтому две сессии в разных директориях не используют кэш друг друга. Эта область действия привязана к CLI, а не к вашей учетной записи, поэтому данные не переносятся в десктопное приложение Claude, которое в Linux является отдельной бета-версией, устанавливаемой параллельно с CLI.
Чтобы проверить, работает ли кэширование, изучите current_usage. cache_creation_input_tokens была записана по тарифу записи в кэш; cache_read_input_tokens была обработана по тарифу чтения из кэша, который составляет от 2.5% до 10% от стандартной стоимости входных токенов в зависимости от модели. Высокое соотношение чтения к созданию — признак нормальной работы. Если показатель создания остается высоким на протяжении нескольких запросов, значит, что-то в вашем префиксе постоянно меняется.
Решает ли эту проблему увеличенное контекстное окно?
Отчасти. Все текущие модели (Fable 5.1, Opus 5.5, Sonnet 5.5 и Haiku 5.5) поддерживают контекстное окно в 1 миллион токенов, и сжатие работает аналогичным образом при достижении этого лимита. Экономика процесса не меняется, так как полный промпт по-прежнему отправляется заново и тарифицируется при каждом запросе. Большее окно лишь определяет момент, когда вы вынуждены принять меры; гигиена данных определяет стоимость. Если проблема заключается в счете, а не в ограничении объема, то какой тариф Claude подходит для вашего стиля работы определяет, расходуете ли вы денежные средства или лимиты тарифного плана.
Редактирование контекста и сжатие в API — это разные вещи
Если вы создаете собственного агента на базе Messages API, команд с косой чертой не существует, и вам придется реализовать это самостоятельно. Заложите бюджет на эту работу заранее, так как бесплатные лимиты API не покроют ваши токены. Новые пользователи получают небольшое количество бесплатных кредитов для тестирования API, а стандартные лимиты, указанные Anthropic (50 бесплатных часов в день на организацию на странице цен, 1550 в месяц в документации), покрывают время работы контейнера выполнения кода, которое оплачивается отдельно от токенов. Каждый шаг повторно отправляет необрезанную историю и тарифицирует её целиком: по ставке чтения из кэша, если префикс кэширован, или по ставке полного ввода (или с наценкой за запись в кэш), если нет. Выбор провайдера определяет эту арифметику еще до начала обрезки, поэтому, если выбор еще открыт, рассчитайте стоимость одной и той же нагрузки на обоих API, а не сравнивайте заголовки цен за токен. Две серверные функции выполняют эту работу, и это не одна и та же функция.
Редактирование контекста выборочно очищает историю диалога по мере её роста, заменяя каждый удаленный результат текстом-заглушкой, чтобы Claude понимал, что часть данных была удалена. Это бета-функция: отправьте anthropic-beta: context-management-2025-06-27 и настройте стратегии в context_management.edits. clear_tool_uses_20250919 очищает результаты работы инструментов, а clear_thinking_20251015 управляет блоками размышлений (thinking blocks). Параметр trigger по умолчанию равен 100 000 входных токенов, keep — последним 3 использованиям инструментов, а clear_tool_inputs — false, поэтому входные данные остаются, а удаляются только результаты.
Сжатие генерирует резюме и заменяет им всю историю диалога. Существует две бета-версии. Пороговое сжатие (threshold compaction) выполняется внутри обычных запросов: отправьте anthropic-beta: compact-2026-01-12 и используйте тип редактирования compact_20260112. Триггер по умолчанию равен {"type": "input_tokens", "value": 150000}, а значение должно быть не менее 50 000. Сжатие по запросу (on-demand compaction) позволяет вашему коду решать, когда его запускать: отправьте anthropic-beta: compact-2026-09-04 с верхним уровнем "compaction": {"type": "summarize"}, и ответом будет только блок резюме. В обзоре сжатия от Anthropic рекомендуется использовать сжатие по запросу везде, где это возможно.
У порогового сжатия есть одно правило передачи данных, которое незаметно ломает агентов. Ответ начинается с блока контента compaction, содержащего резюме, за которым следует обычный текстовый блок. Вы должны передать этот блок обратно в последующих запросах, и тогда API отбросит все блоки контента перед ним. На практике: добавляйте весь response.content, а не только текст. Сжатие по запросу работает наоборот: вы сами удаляете сжатые сообщения, помещаете возвращенный блок первым в messages и отправляете его обратно в точности в том виде, в котором он был получен, включая подпись.
Документация Anthropic называет серверное сжатие основной стратегией управления контекстом в длительных диалогах, а редактирование контекста — опцией для более точного контроля над тем, что именно удаляется. Сначала проверьте поддержку модели. Все текущие модели поддерживают оба вида сжатия, включая Haiku 5.5; старая модель claude-haiku-4-5 — нет, и каждая страница о сжатии содержит актуальный список. Ни одна из этих бета-функций не управляет собственной командой /compact в Claude Code, которая, согласно документации, является отдельным запросом на создание резюме, отправляемым клиентом вместе с вашей историей.
FAQ
Почему сессия Claude Code становится медленнее и дороже по мере работы?
Потому что при каждом новом запросе вся история диалога отправляется повторно. Таким образом, однострочный вопрос в сессии, которая была открыта весь день, несет в себе весь объем данных за этот день. Prompt caching позволяет снизить расходы, пока кэш остается активным: чтение стоит 0.1x от базовой стоимости входных данных для Haiku 5.5, 0.05x для Opus 5.5 и Sonnet 5.5, и 0.025x для Fable 5.1. Как только запрос не попадает в кэш, тот же префикс перезаписывается с коэффициентом 1.25x или 2x при часовом времени жизни. Запустите /context, чтобы увидеть, что именно заполняет окно контекста, и ознакомьтесь с тем, за что вы платите в сессии Claude Code, чтобы понять механизм тарификации.
В чем разница между /clear и /compact в Claude Code?
/clear начинает новый диалог с пустым контекстом. Команда не отправляет запрос, поэтому она бесплатна и лучше всего подходит для переключения между несвязанными задачами. /compact сохраняет текущий диалог, заменяя историю кратким содержанием, поэтому этот вариант оптимален для одной длительной задачи. Укажите фокус, как в /compact keep only the plan and the diff, так как именно инструкция определяет, какая информация будет сохранена.
Как узнать, что именно расходует окно контекста Claude Code?
Запустите /context или /context all для получения полной детализации по элементам. Команда отображает системный промпт, определения инструментов, MCP-серверы, файлы памяти и историю в виде цветной сетки с рекомендациями по инструментам, потребляющим много контекста, и избыточным данным в памяти. На платных тарифах /usage также распределяет недавнее использование между отдельными навыками, субагентами и MCP-серверами.
Стоит ли использовать окно контекста на 1 миллион токенов вместо сжатия?
Большое окно лишь откладывает проблему, а не решает её. Каждая текущая модель (Fable 5.1, Opus 5.5, Sonnet 5.5 и Haiku 5.5) поддерживает окно контекста в 1 миллион токенов, и сжатие работает там аналогичным образом. Каждый запрос по-прежнему отправляет полный промпт и тарифицируется, поэтому диалог на 400,000 токенов будет дорогим независимо от того, помещается он в окно или нет.
В чем разница между редактированием контекста и сжатием в Claude API?
Редактирование контекста выборочно удаляет старый контент (в основном результаты работы инструментов), оставляя текст-заглушку, чтобы Claude знал о факте удаления. Сжатие создает краткое резюме и заменяет им всю историю. Документация Anthropic называет сжатие основной стратегией для длительных диалогов, а редактирование контекста позиционирует как более точный инструмент. Оба метода находятся в стадии бета-тестирования, имеют собственные заголовки и отличаются от команды /compact в Claude Code.