Compression and summarization
When and how to compress history: schema-based compaction, anchor facts, tool-result cleanup, and what must never be compressed.
Lesson content is currently available in Russian.
What you will learn
- →Выбирать момент компакции и понимать её цену для кэша и качества.
- →Писать схемную суммаризацию с якорными фактами вместо вольного пересказа.
- →Чистить результаты инструментов, заменяя содержимое ссылками.
Когда сжимать: пороги и цена компакции
Компакция — это замена части истории её сжатым пересказом. Стандартный триггер — порог заполнения окна около 80%: до него живём с полной историей, после — сжимаем старую часть, оставляя последние ходы нетронутыми. Именно так работает автокомпакция в Claude Code: свежие сообщения и результаты сохраняются дословно, давняя история сворачивается в сводку.
У компакции есть две цены, и обе надо учитывать. Первая — риск потери: любая суммаризация выбрасывает детали, и заранее неизвестно, какая из них понадобится через двадцать ходов. Классический симптом пережатия — агент повторяет уже сделанную работу или «забывает» договорённость, зафиксированную в начале сессии. Вторая цена — кэш: компакция переписывает историю, а значит инвалидирует KV-cache всей изменённой части. Отсюда правило: не компактить по чуть-чуть на каждом ходу, а делать это редко и крупными порциями — иначе вы платите за инвалидацию кэша чаще, чем экономите на токенах.
Порядок приоритетов при нехватке места: сначала чистятся тяжёлые результаты инструментов (о них — третья секция), потом сжимается старая история, и только в крайнем случае трогается свежая. Последние 5–10 ходов почти всегда должны оставаться дословными: именно на них модель опирается при следующем шаге.
Схемная суммаризация вместо вольного пересказа
Просьба «суммаризируй диалог» даёт непредсказуемый результат: модель сохранит то, что показалось важным ей, а не то, что понадобится агенту. Рабочий приём — фиксированная схема сводки, одинаковая для всех компакций:
## Цель сессии
## Принятые решения (с обоснованием)
## Отвергнутые варианты (чтобы не предлагать заново)
## Затронутые файлы, ID, пути — дословно
## Открытые вопросы и блокеры
## Следующий шаг
Ключевое требование — якорные факты: идентификаторы, пути файлов, номера версий, числа и цитаты переносятся в сводку дословно, без пересказа. «Обновили конфиг» — бесполезная строка; «в server/config.ts поднят таймаут с 30 до 120 секунд» — рабочая. Раздел «отвергнутые варианты» недооценивают, а зря: без него агент через десять ходов радостно предложит решение, которое вы отклонили час назад.
Для очень длинных сессий сводки строят иерархически: каждые N ходов — локальная сводка, при следующем пороге локальные сводки сворачиваются в одну верхнеуровневую. Свежая история при этом всегда остаётся сырой. И держите промпт компакции под версионным контролем рядом с кодом: это такой же артефакт системы, как схема БД, и его изменения должны проходить через эвалы (об этом — последний урок).
Чистка результатов инструментов
Как мы видели в первом уроке, результаты инструментов — самая тяжёлая статья контекста, поэтому именно с них начинается экономия. Первый рубеж — обрезка на входе: инструмент не должен возвращать 30 000 токенов лога, если агенту нужны последние 200 строк. Ограничивайте вывод на стороне инструмента (head/tail, пагинация, лимит строк) — это дешевле, чем сжимать потом.
Второй рубеж — очистка задним числом: старые результаты, с которыми агент уже поработал, заменяются заглушкой вида «результат очищен; полный вывод доступен по пути tmp/build-log-42.txt». Полное содержимое сохраняется во внешнем хранилище, и если оно вдруг понадобится — агент перечитает файл инструментом. Этот паттерн поддержан и на уровне API: у Anthropic есть механика context editing, автоматически убирающая устаревшие результаты инструментов из окна.
Третий рубеж — ссылки вместо содержимого с самого начала: вместо вставки целого файла в контекст — путь и диапазон строк, вместо полного JSON-ответа — извлечённые поля плюс ссылка на сырой ответ. Файловая система здесь работает как «внешняя память с произвольным доступом»: контекст хранит указатели, а данные лежат снаружи и подгружаются точечно. Общий принцип всех трёх рубежей: информация не уничтожается, а вытесняется на более дешёвый уровень хранения — восстановимость отличает чистку от потери.
Что сжимать нельзя
У компрессии есть запретная зона. Никогда не пересказывайте: точные идентификаторы (ID транзакций, хэши коммитов, артикулы), диффы кода, числовые данные и денежные суммы, юридические формулировки, тексты ошибок. Сообщение об ошибке и первые строки stack trace вставляются дословно: перефразированная ошибка теряет сигнатуру, по которой её можно найти в трекере или в коде. Инварианты сессии («не пушить в main», «отвечать только по-русски») не сжимаются вовсе — они переезжают в каждую сводку без изменений.
Качество компакции — измеримая величина, а не вопрос вкуса. Практичный метод: соберите десяток контрольных фактов из длинной сессии (принятые решения, ключевые числа, пути), прогоните компакцию и задайте модели вопросы по этим фактам, глядя только на сжатый контекст. Доля выживших фактов — метрика вашего компакт-промпта; меняете промпт — прогоняете набор заново.
И финальное правило — компрессия по месту потребления: сжатие должно происходить как можно позже и только для того, что действительно вышло из горячей зоны. Преждевременная суммаризация «на всякий случай» — самый частый способ потерять деталь, которая была нужна уже на следующем ходу. Сначала бюджет и чистка инструментов, потом компакция — и лишь когда порог реально достигнут.
Practice
Компакт-промпт со схемой и проверкой
Напишите промпт компакции с фиксированной схемой сводки и якорными фактами. Возьмите реальную длинную сессию (40+ ходов), выберите 10 контрольных фактов, выполните компакцию и проверьте вопросами, сколько фактов выжило.
Deliverable
Компакт-промпт, сжатая сводка, таблица «факт → выжил/потерян» и число токенов до и после компакции.
Checkpoint
Агент после автокомпакции повторно предложил решение, отвергнутое час назад. Разберите первопричину и предложите исправление компакт-промпта.
- ✓ Первопричина названа: вольный пересказ без раздела отвергнутых вариантов или потеря якорных фактов.
- ✓ Предложена фиксированная схема сводки с разделом «отвергнутые варианты» и дословными идентификаторами.
- ✓ Предложен способ измерить исправление: контрольные факты и повторный прогон.
Check yourself
Sources