← Context engineering: beyond the prompt
04 / 07 · 45 min

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

Почему компакцию стоит делать редко и крупными порциями, а не понемногу каждый ход?

01Почему компакцию стоит делать редко и крупными порциями, а не понемногу каждый ход?

Что такое якорные факты в схемной суммаризации?

02Что такое якорные факты в схемной суммаризации?

Как правильно чистить старые результаты инструментов?

03Как правильно чистить старые результаты инструментов?

Что из перечисленного запрещено пересказывать при компрессии?

04Что из перечисленного запрещено пересказывать при компрессии?

Sources

Compression and summarization · Context engineering: beyond the prompt · VORCL