Skip to content

Управление контекстом: не дайте ему «потерять память» и не сожгите все token

📚 Навигация по серии: Предыдущая статья 18 · Руководство по использованию CLAUDE.md научила вас записывать стандарты проекта в такое «руководство для новых сотрудников». В этой статье мы поднимемся на уровень выше и поговорим о том, как это руководство вместе с вашими диалогами и прочитанными файлами собирается на одном рабочем столе, который называется «контекстное окно» (context window). Как правильно управлять этим рабочим столом и не переполнить его — вот наша сегодняшняя тема.

Когда только начинаешь работать с Claude Code, очень легко совершить одну довольно глупую ошибку.

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

И каков же был результат? Он действительно начал читать один файл за другим, терминал безостановочно прокручивался, и после прочтения более двадцати файлов он заметно замедлился и стал тупить. Когда я попросил его исправить баг входа в систему, он в ответ спросил: «В каком файле находится модуль auth, о котором вы говорите?» — а ведь он читал этот файл всего десять минут назад. Работа еще не была закончена, а он уже «потерял память», и при этом сгорела куча token.

Разобравшись в ситуации, я понял: контекстное окно — это не тот случай, когда чем больше, тем лучше; если оно переполнено, модель становится глупее. Сегодня мы подробно разберем этот «рабочий стол»: что это такое, что происходит при его переполнении, как использовать /compact и /clear для наведения порядка, как в реальном времени отслеживать использование, и как экономить token с самого начала.

Прочитав эту статью, вы получите:

  • Аналогию, которая позволит вам полностью понять суть «контекстного окна» и то, что на самом деле происходит, когда оно переполняется.
  • Четкое понимание (в виде таблицы), когда использовать /compact (сжатие), когда /clear (очистка), а когда просто открывать новую сессию.
  • Способ использования /context и /usage для отслеживания конкретных действий и ожидаемых результатов.
  • Пять привычек для экономии token, которые пригодятся каждый день (все они основаны на реальном опыте ошибок).
  • Понимание того, что на самом деле делает «автоматическое сжатие» (auto-compact) в фоновом режиме, чтобы вы больше не пугались его внезапных прерываний.

01 Контекстное окно: Насколько велик «рабочий стол» Claude

Сперва зафиксируем это самое важное понятие.

Контекстное окно (context window) — это общий объем всего контента, который Claude может одновременно «видеть» в рамках одной сессии. Оно измеряется в token (минимальная единица тарификации обработки текста моделью).

В нем хранятся не только напечатанные вами слова, а целая куча вещей. В официальном context-window.md все это четко расписано, а я переведу это на человеческий язык:

Что находится на рабочем столеКогда попадаетСколько занимает
Системный промпт (правила поведения Claude)При каждом запуске, вы этого не видитеФиксированный объем
Ваш CLAUDE.md (глобальный + проектный)Полностью загружается при запускеЗависит от размера файла
Автоматическая память (auto memory)Загружается при запуске (есть лимит)Средне
Каждая написанная вами фразаДобавляется по мере того, как вы отправляете сообщенияОбычно очень мало
Каждый прочитанный им файлДобавляется после каждого прочтенияСамая большая часть, сгорает быстрее всего
Вывод команд, результаты работы инструментовДобавляется после каждого вызова инструментаЖурналы / большие файлы очень быстро заполняют место

Видите? Вы думали, что диалог состоит в основном из «того, что вы говорите», но на самом деле львиную долю занимают прочитанные им файлы и вывод команд. Когда я в начале попросил его прочитать больше двадцати файлов, это было равносильно тому, что рабочий стол внезапно завалили другими инженерными чертежами, и для «работы» осталось совсем мало свободного места.

Аналогия: размер рабочего стола. Представьте, что Claude — это плотник, работающий за столом. Стол имеет определенный размер, и чертежи, инструменты, полуфабрикаты, заметки, которые вы ему передаете, — все это должно быть разложено на этом столе. Если стол большой, он может одновременно держать в поле зрения много вещей; если стол завален, ему придется отодвинуть старые чертежи в сторону — и информацию с этих чертежей он «забудет».

Насколько велик этот стол? Зависит от используемой модели. У большинства моделей это порядка 200 тысяч token, у некоторых (например, с пометкой [1m]) — до 1 миллиона. Но запомнить одно правило полезнее, чем помнить цифры:

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

💡 Краткий итог: Контекстное окно — это рабочий стол Claude, и основную часть на нем занимают прочитанные им файлы, а не ваши слова; у стола есть границы, и когда он переполняется, из него начинает «выпадать» ранняя информация.


02 Что произойдет, если рабочий стол будет переполнен: Он станет медленнее, глупее и даже «потеряет память»

Это самое важное утверждение, которое нужно запомнить из этой статьи: контекст не означает, что чем больше, тем лучше; при переполнении до определенной степени производительность Claude заметно снизится.

Почему? Чем больше вещей на столе, тем сильнее распыляется «внимание» модели, и ранее добавленный нерелевантный контент начинает мешать текущей задаче. В индустрии это явление называют «деградацией контекста» (context rot).

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

  • Он начинает противоречить сам себе, забывая решения, которые вы уже согласовали ранее.
  • Ответы становятся расплывчатыми и общими, деталей становится все меньше, он начинает говорить правильные, но бесполезные вещи.
  • Он বারবার спрашивает о том, на что вы уже ответили (как тот вопрос «в каком файле находится auth» из начала).
  • Вы дважды исправляете его на один и тот же вопрос, а он продолжает топтаться на месте.

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

Так что же будет делать Claude, если стол действительно переполнится? Он запустит автоматическое сжатие (auto-compact) — об этом подробно в разделе 05. Пока просто знайте: это пассивное действие для спасения, время которого выбираете не вы, и оно может внезапно прервать вас в разгар выполнения критической задачи.

Поэтому правильный подход такой: не ждите автоматического сжатия, управляйте этим проактивно. Как управлять? Читайте дальше.

💡 Краткий итог: Переполнение контекста вызывает «деградацию контекста» — противоречия, расплывчатость, повторяющиеся вопросы; вместо того чтобы постоянно исправлять ошибки на загрязненном столе, лучше проактивно его очистить.


03 Две метлы: сжатие /compact против очистки /clear

Для наведения порядка на рабочем столе Claude Code дает вам две метлы, которые служат совершенно разным целям, и их ни в коем случае нельзя путать.

/compact: «упаковывает и сжимает» вещи на столе, но оставляет их

/compact (сжатие) делает следующее: собирает текущую длинную историю диалога в краткую выжимку, затем заменяет исходную дословную запись этой выжимкой, чтобы можно было продолжить работу над той же задачей.

Аналогия: собрать кучу черновиков со стола в одну страницу с основными пунктами. Вы обсуждали с коллегами два часа, и стол завален забракованными эскизами. /compact — это как обобщить эту кучу эскизов в один лист с тезисами «В итоге мы приняли А, отклонили Б, следующий шаг — В», освободив стол, но сохранив выводы.

Важный момент — он поддерживает инструкции, указывающие, что именно следует сохранить:

text
/compact 保留认证流程的架构决策和已确认的 API 格式,丢掉调试中的无效尝试

Официальный пример на английском из costs.md: /compact Focus on code samples and API usage (сосредоточься на примерах кода и использовании API) — смысл тот же.

Когда использовать /compact: Задача еще не закончена, но контекст почти переполнен, и при этом то, что обсуждалось ранее, еще понадобится. Например, когда функционал сделан наполовину, архитектурные решения, принятые на ранней стадии, нельзя потерять, но кучу выводов команд из промежуточных попыток методом проб и ошибок можно выбросить.

/clear: полная очистка, начать все сначала

/clear (очистка) действует жестче: полностью удаляет всю историю диалога, что равносильно началу совершенно новой сессии.

Но не пугайтесь — /clear не затронет ваши CLAUDE.md и автоматическую память, они так же автоматически загрузятся в новой сессии. Вы теряете только «содержание, обсуждавшееся в этом разговоре», стандарты проекта и долгосрочная память остаются.

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

Официальная документация costs.md прямо рекомендует: при переключении на не связанную работу используйте /clear, чтобы начать заново, потому что «устаревший контекст будет тратить token на каждое последующее сообщение».

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

💡 Краткий итог: /compact — это «упаковать, сжать и оставить для дальнейшего использования», /clear — это «полностью очистить, сменить задачу и начать заново»; если исправили дважды, а результата нет — не сомневайтесь, используйте /clear.


04 Мониторинг использования: используйте /context и /usage, чтобы видеть, сколько осталось места на столе

Оценивать на глаз, «почти ли заполнилось», слишком ненадежно. Claude Code предоставляет две команды, чтобы вы могли посмотреть точные цифры, не путайте их.

/context: посмотреть, чем заполнен стол

text
/context

/context использует цветную диаграмму для визуализации текущего использования контекста в реальном времени и распределяет его по категориям: сколько занимает системный промпт, сколько CLAUDE.md, сколько различные сервисы MCP, сколько история диалога, а также дает советы по оптимизации. Официальный context-window.md ясно указывает: если хотите узнать реальное использование вашего контекста в любой момент времени, запустите /context.

Полезная привычка: перед началом большой задачи сначала проверьте «основу» с помощью /context. Если вы обнаружите, что какой-то сервис MCP занимает большой кусок впустую или CLAUDE.md раздут до немыслимых размеров, сначала приберитесь, а затем приступайте к работе.

В комплекте также есть команда /memory, которая используется для проверки того, какие именно файлы CLAUDE.md и автоматической памяти были загружены при запуске — используйте её, когда подозреваете, что модель что-то «запомнила неправильно».

/usage: посмотреть, сколько token / денег сгорело за эту сессию

text
/usage

Блок Session в верхней части /usage показывает статистику использования token в текущей сессии, а также пересчитывает её в доллары на основе локальных оценок. В официальном costs.md пример выглядит примерно так:

text
Total cost:            $0.55
Total duration (API):  6m 19.7s
Total duration (wall): 6h 33m 10.2s
Total code changes:    0 lines added, 0 lines removed

Объяснение ожидаемого вывода: Total cost — это ориентировочная стоимость данной сессии (рассчитанная локально, может отличаться от реального счета; за авторитетными цифрами обращайтесь в Claude Console); Total duration (API) — это фактическое время, потраченное на вызовы модели; Total duration (wall) — это общее время, в течение которого вы держали эту сессию открытой.

⚠️ Напоминание: Стоимость сессий для пользователей с подписками Pro / Max включена в подписку, эта сумма в долларах не имеет прямого отношения к вашему счету, просто воспринимайте её как относительный показатель масштаба. Конкретные тарифные планы и биллинг мы уже обсуждали в статье 06, в этой статье мы смотрим на token только с точки зрения «контекста».

Лень каждый раз набирать вручную? Официальная версия также поддерживает постоянное отображение использования контекста в строке состояния (statusline), чтобы оно всегда было на экране. Конкретный метод настройки см. в официальной документации statusline, в этой статье мы не будем на этом останавливаться.

💡 Краткий итог: /context показывает, «чем занят стол», /usage показывает, «сколько token / денег сгорело в этот раз»; перед началом большой задачи сначала взгляните на основу с помощью /context.


05 Автоматическое сжатие (auto-compact): оно спасает ситуацию, но не стоит на него полагаться

Ранее мы несколько раз упоминали «автоматическое сжатие», в этом разделе мы объясним, что это такое.

auto-compact (автоматическое сжатие) — это встроенный механизм спасения в Claude Code: когда контекст близок к достижению верхнего предела окна, он автоматически обобщает историю диалога в выжимку, освобождая место для продолжения работы и избавляя вас от прямой ошибки переполнения. В официальном costs.md оно ставится в один ряд с prompt caching как один из двух способов «автоматической оптимизации затрат» в Claude Code.

Аналогия: автоматическая выгрузка на конвейере. Если конвейерная лента вот-вот переполнится, система сама сгребает и уплотняет старый материал, чтобы не заклинило всю линию. Вам не нужно ничего делать, это срабатывает автоматически.

Звучит очень заботливо, но я советую вам не полагаться на это по двум причинам:

Во-первых, время срабатывания выбираете не вы. Вполне возможно, что вы просите модель выполнить какой-то важный шаг, и в этот момент стол оказывается заполненным, она «хлоп» и останавливается, чтобы сначала выполнить сжатие — весь ритм работы сбивается.

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

Поэтому правильный подход — действовать проактивно: когда вы чувствуете, что диалог становится длинным, а /context показывает высокую загрузку, сначала самостоятельно сделайте /compact и добавьте инструкцию, чтобы указать, что важно сохранить. У проактивного сжатия есть два преимущества: вы сами выбираете время, и вы сами решаете, что сохранить.

Есть еще один, более простой способ: записать предпочтения сжатия прямо в CLAUDE.md. Официальный costs.md предлагает добавить такой фрагмент в CLAUDE.md:

markdown
# Compact instructions

When you are using compact, please focus on test output and code changes

Таким образом, при каждом сжатии (будь то ручное или автоматическое) модель будет в приоритетном порядке сохранять указанный вами контент, что является своеобразной страховкой для автоматического сжатия. Например, если в CLAUDE.md часто используемого проекта написать «при сжатии сохраняй утвержденные архитектурные решения и соглашения по интерфейсам», то вам не придется каждый раз напоминать об этом вручную.

💡 Краткий итог: Автоматическое сжатие нужно для спасения в крайнем случае, но оно прерывает вас и может удалить важную информацию; вместо того чтобы ждать его, лучше проактивно делать /compact с инструкциями или жестко прописать предпочтения сохранения в CLAUDE.md.


06 Пять приемов экономии token: с самого начала не давайте столу так быстро заполняться

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

Прием первый: не тренируйтесь на больших проектах. Как уже говорилось в статье 07 — на этапе обучения и экспериментов создайте игрушечный проект из трех-пяти файлов. Файлов мало, он читает мало, стол чистый, и вы четко видите, что он сделал. Проблема с «потерей памяти после прочтения двадцати файлов» в начале статьи была вызвана тем, что мы сразу взялись за незнакомый репозиторий среднего размера.

Прием второй: используйте @ для точного указания файлов, не заставляйте его искать по всему репозиторию. Вместо того чтобы сказать «исправь баг входа» и заставлять его перерывать файлы один за другим, лучше сказать прямо: @src/api/auth.ts 修复 401 的问题. Официальный costs.md говорит очень прямо: расплывчатые запросы вызывают обширное сканирование, конкретные запросы позволяют работать эффективно с минимальным чтением файлов. Символ @ приковывает его взгляд прямо к нужному файлу.

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

Прием четвертый: разбивайте длинные задачи и очищайте контекст после завершения этапа. Не надейтесь, что большую функцию можно от начала до конца сделать в одной сессии. Сделали относительно независимый этап — используйте /compact для сжатия; переключились на совершенно другую часть — используйте /clear для перезапуска.

Прием пятый: перекладывайте длительные операции на субагентов (subagents). Запуск тестов, просмотр огромных журналов, чтение документации — работу, которая порождает огромное количество вывода, поручайте субагентам: они будут возиться на своих независимых рабочих столах и вернут в ваш основной диалог только краткое изложение выводов. В примере из официального context-window.md субагент прочитал файлы на 6100 token, а вернувшись в основной контекст, занял всего 420 token. Субагенты — это мощный инструмент для экономии контекста, им будет посвящена отдельная статья. (Ссылка будет добавлена позже)

Если сравнить «исправление» и «профилактику», вы поймете, на что стоит направить усилия:

ДействиеХарактерКогда использовать
/compactИсправление · Сжатие и сохранениеЗадача не завершена, контекст загружен, предыдущая информация еще нужна
/clearИсправление · Очистка и перезапускПереключение на не связанную работу или слишком сильное загрязнение контекста
Просто открыть новую сессию (выйти и запустить claude)Профилактика · Полная чистотаНужен абсолютно чистый стол, даже без следов памяти текущей сессии
@ для точного указания файловПрофилактика · Меньше читать файлыЭто нужно делать при каждой постановке задачи
Игрушечные проекты для тренировкиПрофилактика · Меньше с самого началаНа этапе обучения и экспериментов
Субагент для длинных задачПрофилактика · Изоляция выводаЗапуск тестов / просмотр журналов / чтение документации

💡 Краткий итог: Наведение порядка на столе — это исправление, а вот читать меньше файлов, разбивать задачи на мелкие и отдавать их субагентам — это профилактика; мышечная память, которую нужно выработать в первую очередь, — это использовать @ для точного указания файлов при постановке требований.


07 Практика: пройдем процесс управления контекстом за три шага

Если только читать и не пробовать, ничего не запомнишь. Ниже приведен минимальный процесс, который позволит вам своими глазами увидеть, как контекст растет и как /compact его сжимает. Запустите claude в директории любого проекта и следуйте инструкциям.

Шаг первый: сначала посмотрите на основу

После запуска Claude первым делом введите:

text
/context

Ожидание: В терминале будет выведен список текущего использования контекста по категориям — вы увидите, что системный промпт, CLAUDE.md и т.д. уже занимают часть места (наличие занятого места до начала диалога — это нормально), а внизу будет указано общее использование и советы по оптимизации. Запишите это начальное число.

Шаг второй: специально «скормите» ему немного контента и посмотрите на изменения

Попросите его прочитать несколько файлов и проведите несколько раундов общения, например:

text
读一下这个项目的主要源码文件,给我讲讲整体结构

Когда он закончит читать и ответит, введите еще раз:

text
/context

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

Шаг третий: используйте /compact, чтобы сжать его обратно

text
/compact 保留这个项目的整体结构结论,丢掉逐个文件的原始内容

Ожидание: В терминале появится сообщение вроде «Conversation compacted» (Диалог сжат), сжатие происходит в фоновом режиме, и выжимка не будет выводиться на весь экран. После сжатия введите /context, чтобы посмотреть еще раз: занятое место в колонке истории диалога должно уменьшиться — выводы о структуре он еще помнит, но исходные байты каждого отдельного файла были сжаты в резюме.

Проверка: Запустите /context до и после сжатия, и если количество token в истории диалога сначала высокое, а потом низкое, значит, /compact сработало. Если хотите проверить, что он «не потерял память», спросите: «Какую структуру проекта ты только что резюмировал?», и он должен быть в состоянии ответить.

⚠️ Важная деталь: Сжатие — это операция с потерями. Оно сохраняет указанные вами ключевые моменты и общий ход мыслей, но дословный вывод инструментов из более ранних этапов будет удален. Поэтому для действительно важных выводов возьмите за правило записывать их в CLAUDE.md, как описано в статье 18 — либо попросите Claude «добавить это в CLAUDE.md», либо отредактируйте сами с помощью /memory. Это надежнее, чем держать все это сжатым в диалоге.

💡 Краткий итог: Выполнив /context → скормив контент → /compact → и снова /context, вы своими глазами увидите, как контекст растет и как сжатие его уменьшает; сравнив количество token в истории диалога до и после, вы поймете, сработало ли это.


08 Резюме

В этой статье мы рассмотрели «контекстное окно» (этот рабочий стол) от начала до конца:

Что вы узналиКраткая суть
Что такое контекстное окноРабочий стол Claude, основную часть которого занимают прочитанные им файлы, а не ваши слова
Что будет, если оно переполнитсяВызовет деградацию контекста — замедление, расплывчатость, противоречия, потерю памяти
/compactУпаковать и сжать для дальнейшего использования, можно добавить инструкцию, что именно сохранить
/clearПолная очистка, смена задачи и перезапуск, не затрагивает CLAUDE.md и память
/context · /usageОдно показывает, «чем занято», другое — «сколько сгорело»
Автоматическое сжатиеМеханизм спасения, но прерывает работу и может удалить важное, лучше действовать проактивно
Экономия tokenИгрушечные проекты, указание файлов через @, не давать слишком много задач сразу, разбивать задачи, поручать субагентам

Теперь вы должны уметь: Понимать, что находится в контекстном окне и почему при его переполнении Claude становится глупее; использовать /compact, когда нужно сжатие, и /clear, когда нужно начать заново; отслеживать использование в реальном времени с помощью /context и /usage; и с самого начала применять привычки экономии token при постановке задач, чтобы на столе всегда оставалось свободное место для работы.

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

Контекстное окно и /compact, /clear

На этой картинке контекстное окно сравнивается с рабочим столом: когда он завален файлами и диалогами (на рисунке примерно до 92%), мы используем /compact, чтобы сжать стопку диалогов в одну страницу с основными пунктами (чтобы оставить её для дальнейшей работы), или /clear, чтобы полностью очистить стол (и начать с нуля) — первое сохраняет информацию, второе обеспечивает чистоту.


Следующая статья 20 · Настройка прав доступа — в этой статье мы контролировали, «сколько Claude может запомнить», а в следующей будем контролировать, «сколько он может сделать сам». Чтение файлов, изменение кода, выполнение команд: о чем он должен сначала спросить вас, а что можно разрешить? Как настроить правила доступа, чтобы было и безопасно, и удобно? Оставлю вам вопрос на подумать: согласились бы вы, чтобы он напрямую запускал git push без вашего согласия?


Рекомендуемое чтение