Блог / Память агентов

Сжатие контекста: что это и как не терять нить работы

Context compaction — когда клиент сжимает историю диалога в пересказ. Что при этом теряется, как заметить потерю и как работать, чтобы сжатие не пугало.

•4 мин чтения
Память агентов Объяснитель

Коротко: сжатие контекста (compaction) — это когда клиент, упершись в лимит окна, заменяет историю диалога на её автоматический пересказ. Пересказ сохраняет сюжет, но режет детали: точные формулировки решений, числа, «почему» и «что делать дальше». Чтобы ничего не терять, записывайте важное сразу во внешнюю память, закрывайте этапы явно и не дотягивайте сессию до аварийного сжатия.

Что такое compaction

У каждой модели есть лимит контекста — максимум токенов, которые она видит за раз. Длинная сессия рано или поздно в него упирается. Тогда клиент (Claude Code, Cursor, другие) делает сжатие: отдаёт историю диалога модели с просьбой «перескажи главное» и продолжает работу уже с этим пересказом вместо полной истории.

Механически это разумно: альтернатива — оборвать сессию посреди задачи. Проблема не в самом факте сжатия, а в том, что именно теряется при пересказе.

Что теряется при сжатии

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

  • Точные формулировки решений. «Решили использовать JWT» переживёт сжатие. «JWT, потому что мобильное приложение не умеет в куки, а сессии не масштабируются на два региона» — уже лотерея. Через неделю агент уверенно предложит сессии: аргументы-то пропали.
  • Числа и ограничения. Порог в 200 мс, лимит в 10 000 строк, договорённость «не трогаем таблицу users до миграции» — для суммаризатора это мелочи, для работы — нет.
  • Открытые хвосты. «Осталось дописать миграцию и обновить воркер» в пересказе часто схлопывается в «задача почти готова».
  • Отвергнутые варианты. Самое коварное: «мы отказались от Redis из-за стоимости инфраструктуры» сжимается до нуля, и агент снова предлагает Redis. Вы снова объясняете. Каждую неделю.

Как заметить, что сжатие уже ударило

Три характерных симптома в середине длинной сессии:

  1. Агент «забыл» договорённость из начала разговора — предлагает то, от чего вы его отговорили час назад.
  2. Ответы стали правильными по смыслу, но размытыми: пропали конкретные имена файлов, числа, ссылки на «тот баг».
  3. Агент переспрашивает вещи, которые уже обсуждались, или радуется «новой» идее, которую вы вместе отвергли.

Многие клиенты показывают индикатор сжатия — но замечать его вовремя получается редко. Симптомы выше надёжнее интерфейса.

Как работать, чтобы сжатие было не страшно

Пишите факты сразу, а не в конце. Решение существует, пока оно записано. Если договорённость «деплой только через скрипт с preflight» живёт только в истории чата — она исчезнет при первом же сжатии. Если она записана во внешнюю память (в нашем случае — в граф MaxGraph через add_observations), сжатие истории её не касается: агент восстановит её из памяти в любой момент. Это главное изменение привычки: «записал, как узнал» вместо «потом подведём итоги».

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

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

После сжатия — восстановление из памяти. Если сжатие уже случилось, не полагайтесь на пересказ: попросите агента заново прочитать дайджест памяти (session_start) и сверить текущую задачу с записанными решениями. Пересказ — про сюжет; память — про факты.

Где связка с памятью решает проблему целиком

Compaction режет только то, что лежит внутри окна. Всё, что вынесено наружу — в граф памяти, в файлы проекта, в issue-трекер — сжатию неподвластно. Поэтому рабочая схема выглядит так: окно — для текущего разговора, память — для всего, что должно пережить разговор. Разделили эти два слоя — и сжатие превращается из источника потерь в техническую деталь, которую можно вообще не замечать.

FAQ

Compaction — это то же самое, что «модель забыла»? Нет. Модель ничего не «забывает» — клиент физически заменяет полную историю на её пересказ, и дальше модель видит только пересказ. Забывание между сессиями — отдельный механизм: там история просто не загружается. Подробнее: почему AI-агент забывает ваш проект.

Можно ли отключить сжатие? Обычно нет — это аварийный механизм клиента при переполнении окна. Можно не доводить до него: короткие сессии, явное закрытие этапов, вынос фактов в память до того, как окно заполнится.

Большое окно контекста решает проблему? Отодвигает, но не решает. Окно в миллион токенов всё равно кончается, а длинный контекст ухудшает точность: модель хуже находит детали в середине длинной простыни. Плюс каждый запрос с огромной историей стоит заметно дороже.

Чем плохо просто перечитать пересказ после сжатия? Пересказ — это мнение суммаризатора о том, что было важно. Он не содержит точных формулировок и может уверенно искажать детали. Сверяться надо с первичными записями — памятью, а не с производной от истории.

Что дальше

MaxGraph

Дай своему агенту память

Триал 7 дней без карты. Установка — один промпт, дальше агент сделает сам.

Тарифы ✓ Скопировано