Компакция: что выживает и что тихо исчезает
Компакция — ответ индустрии на деградацию из предыдущей части: раз окно кончается и портится, старую историю периодически сворачивают в сводку. Механизм рабочий и почти везде включён по умолчанию. Проблема в том, что решение о том, что безопасно забыть, принимает софт, и об ошибке ты узнаёшь не из стектрейса.
Компакция: что выживает и что тихо исчезает
Как устроена авто-компакция
Lance Martin из LangChain описывает базовый случай: Claude Code вызывает авто-компакцию при заполнении окна на 95% (200 000 токенов для Claude) — это суммаризация всей траектории. Ragunath Jawahar на Developer Summit подтверждает тот же порядок и оговаривается: практики чистят контекст, не дожидаясь автосрабатывания, но эвристика «когда чистить» исследованием не подкреплена, это ощущение практиков.
Пороги у других реализаций заметно ниже. Emre из OpenAI на Build Hour формулирует три правила запуска сжатия. Первое: собирать снапшоты контекста из прода и из дизлайков, чтобы знать типичный размер контекста в сессии. Второе: не резать в середине хода — turn определяется как сообщение пользователя и всё, что произошло до следующего сообщения пользователя. Разрез внутри хода резко повышает вероятность «потери нити». Третье: не ждать удара в лимит, ставить пороги на 40% или 80% заполнения. Демо-параметры конкретные и мелкие: у trimming это max turns 3 и keep recent 3, у компакции — trigger 4 и keep recent 2.
Разбор архитектуры агента Hermes (Hugging Face и Alejandro AO) даёт третий набор цифр: при установке агент спрашивает, на каком проценте заполнения запускать компакцию, по умолчанию — 50%, а для моделей с маленьким окном рекомендуют 70–80%. Там же две детали, которые стоит скопировать. Проверка размера контекста делается дважды: перед каждым обращением к модели и повторно на ошибке, когда провайдер вернул превышение окна, — второй путь страхует от неточной оценки. А сама оценка до первого вызова делается грубо: общее число символов делится на 4 — настоящий токенайзер гонять дорого, а для срабатывания порога точность не нужна. После первого ответа переключаются на поле usage из ответа провайдера и просто суммируют. Форматы usage у провайдеров при этом различаются.
Отдельно стоит различать инструменты: David Mahler в разборе Claude Code разводит /compact с подсказкой («focus on the current working state of the lab») — ручную компакцию на чекпойнте, не дожидаясь авто, — и /clear, то есть новую сессию с обнулённой историей, правильный ход при смене темы.
Что именно сохраняют
Root Cause в разборе по документации Anthropic описывает механику так: всю историю отдают модели, сжимают в сводку и переинициализируют окно этой сводкой и 5 последними использованными файлами — остальное стёрто. Выживать должны архитектурные решения, нерешённые баги и детали реализации. Уходить должны повторяющиеся tool-выводы и сырые результаты из глубины истории.
Разбор The Working Thesis добавляет коэффициент и принцип. Коэффициент: история на 50 000 токенов сжимается до 1–2 тысяч. Принцип: хороший харнесс использует специальный системный промпт компакции, который сохраняет решения и опускает сырые входы, приведшие к ним, — «решили игнорировать type warnings в legacy-модуле» вместо текста самого предупреждения. И сверху — гибрид, который стал дефолтом: харнесс почти никогда не компактит всю историю, последние 5–10 ходов остаются дословными. Marina Wyss описывает тот же паттерн в других числах (последние ~10 сообщений дословно, старше — в running summary), а учебный агент Google Cloud — в третьих (5 последних находок сырыми, старше — в 3 строки, режим прямо назван «loss-aware»).
Второй, более узкий рычаг — context editing. Это автоматическая чистка старых результатов tool-вызовов при переходе порога токенов, старые первыми. По умолчанию нетронутыми остаются 3 последних tool call. Цифры Anthropic по нему выглядят убедительно: context editing сам по себе срезает потребление токенов на 84% и позволяет доводить до конца сценарии, которые иначе упёрлись бы в лимит. Связка memory tool и context editing даёт прирост производительности на 39% относительно baseline на 100-ходовом web-search прогоне, из которых 29 пунктов приходится на сам context editing. Оговорка обязательна: это вендорские цифры на одном бенчмарке.
Официальную позицию Anthropic Root Cause цитирует как recall-first, precision-second: сначала максимизировать полноту сводки и только убедившись, что ничего важного не теряется, ужимать в сторону точности. Там же прямое признание: слишком агрессивная компакция ведёт к потере тонкого, но критичного контекста, важность которого выясняется позже. Полнота при этом оплачивается токенами — команда ежедневно выбирает точку на кривой «цена сводки против полноты». Dan Biderman из Engram добавляет структурное возражение: компакция бинарна, токен либо сохраняется, либо выбрасывается, промежуточных степеней нет, и на длинном горизонте это даёт забывчивость глубоко в сессии. Оговорка: это позиция вендора, продающего альтернативу, проверяемых цифр в интервью нет.
Есть и скрытая статья расходов: компакция выбрасывает prompt cache — так же бесшумно, без ошибки, просто счёт после неё выше. В Claude Code, по наблюдению Arize, много усилий вложено именно в то, чтобы компакция не инвалидировала кэш.
Что исчезает молча
Всё вышеперечисленное — про то, что компакция теряет по замыслу. Хуже, когда она теряет то, что терять не должна.
Что произошло: правило, пережившее 50 ходов, умерло в сводке
- Кто: GitHub issue 24460 против Claude Code, разобранный в материале Root Cause.
- Что делали: обычная длинная сессия с файлом проектных инструкций CLAUDE.md — конвенции коммитов, процедуры пуша, правила безопасности, нейминг. Правило «никогда не пушить в main» держалось 40–50 ходов.
- Результат: сработала компакция — и следующим ходом агент запушил в main. Суммаризатор воспринял содержимое файла правил как обычную историю разговора и проредил наравне с болтовнёй. Ошибки нет, стектрейса нет, агент не колеблется.
- Вывод: правило исчезло целиком, и единственным сигналом стали последствия. Обходной путь репортера — после каждого compact вручную просить агента перечитать CLAUDE.md — работает, пока кто-нибудь не забудет. Предложенный фикс: считать файл правил постоянным инвариантом, а не историей.
Здесь важно показать, что источники по этому вопросу прямо противоречат друг другу. David Mahler в своём разборе Claude Code утверждает, что memory-файлы (CLAUDE.md и авто-память) после компакции сохраняются, — и именно поэтому их надо держать в порядке. Root Cause документирует баг, где содержимое CLAUDE.md после /compact фактически терялось. Скорее всего, речь о расхождении версий или конфигураций, и не исключено, что оба правы для своей сборки. Но вывод из этой пары не зависит от того, кто прав: гарантия по описанию и гарантия по проверке — разные вещи. Документация говорит, что правило переживает компакцию. Лог говорит, что в конкретной сессии оно не пережило. Верить надо логу.
Отсюда следует дешёвый и обязательный тест, который формулирует Root Cause: прогони сессию хотя бы один раз за реальную точку компакции и проверь, держится ли правило на следующем ходу. Не считай, что держится, только потому, что держалось раньше. Это тест-кейс.
Второй канал тихой потери — сам summary. Emre из OpenAI называет источники poisoning, и все три лежат внутри механизма сжатия: лоссовая суммаризация, свободноформатная накапливающаяся заметка и старый summary, перетирающий новый. Лекарство — три инструкции-предохранителя в summary-промпте: остерегайся противоречий, соблюдай временной порядок, контролируй галлюцинации. Дальше — доменная схема сводки: продукт и окружение, заявленные проблемы, что сработало и что нет, идентификаторы, временные вехи, текущий статус и следующие шаги. Hermes решает ту же задачу списком секций в context_compressor.py: цель, ограничения, выполненные действия, активное состояние, на чём агент заблокирован, ключевые решения, релевантные файлы, критический контекст, следующие ходы. Подходы сходятся по идее и расходятся в цене: авторы Hermes сами отмечают, что их промпт менее минималистичен — богаче и дороже.
Что отвергли в Arize и к чему пришли
Самую полезную часть материала составляют два задокументированных провала. Sally-Ann Delucia рассказывала про агента Alex, который анализирует трейсы их же observability-платформы: спаны растут, упираются в лимит контекста, агент падает, повтор с ещё большим объёмом снова заканчивается падением. Система, анализирующая данные, была ограничена этими же данными.
Первая попытка — наивная truncation: брать первые 100 символов блоба и выбрасывать остальное. Работало для простых случаев, пока не перестало: агент забывал всё, и follow-up выглядел как новый разговор — на «расскажи подробнее про input B» он просто не понимал, о чём речь. Подход убивал связность диалога и был отброшен.
Вторая попытка — чистая суммаризация: сжимать весь контекст через LLM. Очевидное решение оказалось слишком нестабильным — нет контроля над тем, что модель сочтёт важным, результат ненадёжен. Спикер отдельно отметила, что именно этот провал удивил её больше всего.
Рабочая схема получилась гибридной и намеренно тупой: берут первые 100 символов и последние 100, середину вырезают и складывают в memory store, откуда агент в любой момент может достать её сам. Дополнительно дубликаты сообщений схлопывают, из длинных tool call оставляют только последний результат, системный промпт не сбрасывают никогда. Схема не менялась несколько месяцев. Формула автора: контекст — это то, что модель видит, а память решает, что выживает. Сами они признают, что это эвристика: принципиального контекстного бюджета и метрик качества контекста у них нет. Отдельная деталь: разобрав код Claude Code, они ожидали найти магию и обнаружили похожую комбинацию truncation и compression.
Крайняя позиция по компакции — у Dex Horthy из HumanLayer: «/compact — мусор, я им никогда не пользуюсь». Вместо автосжатия агента заставляют записать progress-файл на диск, и этим файлом онбордят следующего агента в новом окне. Работа разбита на фазы, каждая заканчивается компактным markdown-артефактом, каждая следующая стартует с чистого окна, где лежит только он. Сначала research: суб-агенты читают код, их мусор остаётся у них, на выходе — файл с путями, сигнатурами и подводными камнями. Затем сброс контекста. Затем planning с человеческим ревью. Затем implementation, где у агента только план и progress.md. Числа: сырой research съедает 60–80% окна, артефакт сжимает это до 15–20%. Про заявленные «35 000 строк кода за одну 7-часовую сессию» — подано как «reportedly», то есть как маркетинговое заявление без измерения.
И бытовое наблюдение: Jono Catliff отмечает, что если после компакта осталось 2–3% свободного окна, каждое следующее сообщение вызывает рекомпакцию — тогда дешевле /clear или новая вкладка. Компакт не спасает переполненную сессию, он её только продлевает. Порядок величины, без измерения.
Что с этим делать
Не отдавай выбор порога умолчанию. 95% Claude Code — страховочная сетка. Ставь свой порог (40% или 80%, как у OpenAI, 50%, как у Hermes) и режь на границе хода.
Пиши схему сводки вместо общей просьбы «суммаризируй это». Списки секций у OpenAI и Hermes копируются целиком. Сохранять надо решения и опускать сырые входы. И добавь в промпт защиты от противоречий, нарушения временного порядка и галлюцинаций: без них summary сам становится каналом отравления.
Проверь компакцию тестом. Прогони сессию за реальную точку компакции и посмотри, держится ли правило на следующем ходу. Источники расходятся в том, переживают ли memory-файлы сжатие, — значит, у тебя это открытый вопрос до первой проверки.
Начинай с самого дешёвого рычага — с tool-выводов. Context editing с сохранением последних 3 вызовов и очистка сырых результатов из глубины истории дают больше всего экономии при наименьшем риске.
Оставляй хвост дословным. 5–10 последних ходов без сжатия — рабочий дефолт. Наивная обрезка без такого хвоста ломает связность диалога — это ровно то, на чём споткнулись в Arize.
Планируй компакцию заранее. Фиксируй результат фазы в артефакт на диске и стартуй следующую с чистого окна. И следи за побочным эффектом: компакция бесшумно инвалидирует prompt cache, счёт после неё будет выше.
Построим такой контур в вашей компании
coMind переводит команды и компании в AI-Native: первый контур за 30 дней, методика — в книгах серии «Путь компании к AI-Native».