TL;DR
Контекст гниёт. Когда диалог с AI затягивается, старые ошибочные рассуждения, отброшенные гипотезы и нерелевантные поиски накапливаются в памяти модели — и тянут её назад. Модель начинает повторять уже опровергнутые пути и хуже отвечает, даже если правильный ответ уже был найден ранее. Это явление называют «гниением контекста» (context rot).
Главная находка: сжимать контекст нужно не по расписанию («каждые 10 сообщений»), а по смыслу. Если попросить модель суммировать разговор в середине рассуждения — она сотрёт именно то, что ещё не успела использовать. Результат хуже, чем если бы не сжимала вообще. Момент имеет значение больше, чем периодичность.
SELFCOMPACT решает это через рубрику — короткий список условий, по которым модель сама решает: «сейчас сжать» или «продолжить». Рубрика задаёт два триггера «сжать» (подзадача завершена, разговор сходится к ответу) и два запрета «продолжить» (я в середине цепочки рассуждений, я завис и хожу по кругу). Инструмент без рубрики работает хаотично — модели либо сжимают слишком часто, либо не используют инструмент совсем.
Схема метода
Каждые N шагов (токенов / вызовов инструментов):
ШАГ 1: ПРОВЕРКА РУБРИКИ
→ Модель получает рубрику и выносит вердикт: СЖАТЬ или ПРОДОЛЖИТЬ
ШАГ 2а (если СЖАТЬ):
→ Модель создаёт резюме всей истории
→ История заменяется резюме, работа продолжается
ШАГ 2б (если ПРОДОЛЖИТЬ):
→ Рубрика и вердикт убираются из контекста
→ Работа продолжается без изменений
Оба шага — в одном чате, одной моделью, без внешних инструментов
Пример применения
Задача: Артём запускает SaaS-продукт для B2B-сегмента (управление задачами для малого бизнеса). Он провёл с Claude часовую сессию: исследовал конкурентов, анализировал ценообразование, обсуждал позиционирование — и разговор уже 40 сообщений. Нужно продолжать, но ответы стали хуже: модель возвращается к вариантам, от которых уже отказались.
Промпт:
Оцени наш разговор по рубрике и реши — нужно ли сейчас сделать сводку.
СЖАТЬ, если выполнено хотя бы одно условие:
— Мы завершили отдельный блок (анализ конкурентов / ценообразование /
позиционирование) и зафиксировали чёткий вывод
— Мы уже сходимся к финальному решению, осталось уточнить детали
ПРОДОЛЖИТЬ, если:
— Мы в середине рассуждения и мысль не завершена
— Мы застряли и ходим по кругу — сжатие не поможет
Ответь одним словом: СЖАТЬ или ПРОДОЛЖИТЬ.
Если СЖАТЬ — составь резюме в таком формате:
✅ Что решено (факты, выводы, цифры — точно)
🔄 Что сейчас исследуем (текущий вопрос)
❓ Что осталось открытым (следующие шаги)
После резюме продолжи работу с того места, где остановились.
Результат: Если рубрика говорит «ПРОДОЛЖИТЬ» — модель просто продолжает. Ни токена лишнего. Если «СЖАТЬ» — появится резюме в трёх блоках: что уже решено (сохранятся конкретные цифры и выводы), что сейчас в работе, что ещё открыто. После резюме модель продолжит с актуального вопроса, не возвращаясь к отброшенным вариантам.
Почему это работает
Слабость LLM: плохая память о своём же контексте. Модель не ведёт внутренний журнал «что уже решено». Она каждый раз переваривает весь разговор заново. Когда старых ошибочных цепочек накапливается много — они буквально вытесняют свежие правильные мысли. Проблема не в длине, а в качестве: 10 релевантных сообщений работают лучше 40 смешанных.
Сильная сторона LLM: оценка по критериям. Попроси модель «скажи когда нам стоит сделать паузу» — она не справится. Но дай ей конкретные критерии («задача завершена / мы в середине рассуждения») — и она точно их применяет. От расплывчатого вопроса к структурированной рубрике — принципиальный переход.
Как метод использует это: Рубрика переводит абстрактный вопрос «хороший момент для паузы?» в набор проверяемых условий. Модель не угадывает — она сверяется со списком. Два условия «когда жать», два «когда не жать» — достаточно, чтобы попасть в правильный момент. Инструмент без рубрики хаотичен; рубрика без инструмента бесполезна. Вместе — работает.
Рычаги управления: - Частота проверки — в исследовании каждые N токенов/вызовов. В ручном режиме: раз в 8-10 сообщений или после завершения смыслового блока - Формат резюме — можно добавить блок «что убрали и почему» для полной прозрачности - Условия рубрики — можно расширить под свой контекст (например, добавить «завершена ли итерация правок») - Кто вызывает — в исследовании модель сама; в ручном режиме — вы явно вставляете промпт-проверку
Шаблон промпта
Оцени наш разговор по рубрике и реши — нужно ли сейчас сделать сводку.
СЖАТЬ, если выполнено хотя бы одно:
— Мы завершили отдельный блок работы и есть чёткий вывод
— Мы уже сходимся к решению, осталось уточнить детали
ПРОДОЛЖИТЬ, если:
— Мы в середине рассуждения, мысль не завершена
— Мы застряли и повторяемся — сжатие не поможет
Ответь: СЖАТЬ или ПРОДОЛЖИТЬ.
Если СЖАТЬ — составь резюме:
✅ Что решено: {что зафиксировать — факты, выводы, цифры}
🔄 Сейчас в работе: {текущий открытый вопрос}
❓ Открытые вопросы: {что ещё нужно разобрать}
После резюме продолжи с {текущей задачи}.
Плейсхолдеры:
- {что зафиксировать} — уточни если нужно что именно сохранять (например: «ключевые числа», «принятые решения»)
- {текущий открытый вопрос} — что сейчас исследуется
- {текущей задачи} — с какого вопроса продолжать после сводки
🚀 Быстрый старт — вставь в чат:
Вот шаблон SELFCOMPACT для умного сжатия контекста.
Адаптируй под мою задачу: {твоя задача, например:
"анализ бизнес-модели маркетплейса"}.
[вставить шаблон выше]
LLM спросит о типе задачи и логических блоках, на которые она делится — потому что условия рубрики «СЖАТЬ/ПРОДОЛЖИТЬ» должны соответствовать структуре именно твоей работы.
Ограничения
⚠️ Короткие диалоги: Для разговоров до 15-20 сообщений рубрика не нужна — контекст ещё не засорился, проверка добавит токены впустую.
⚠️ Застревание в петле: Если модель ходит по кругу, рубрика скажет «ПРОДОЛЖИТЬ» (так и задумано — сжатие не поможет застрявшей модели). Проблему петли нужно решать иначе: сменить подход или начать новый чат.
⚠️ Качество резюме: Метод работает настолько хорошо, насколько хорошо модель умеет суммировать. Если в резюме потерялась важная деталь — это не исправить. Проверяй блок ✅ перед тем как продолжать.
⚠️ Ручной режим требует дисциплины: В оригинале модель сама вставляет рубрику периодически. В ручном режиме ты должен помнить вставить промпт-проверку. Помогает привычка: проверять каждые 10 сообщений или при смене смыслового блока.
Как исследовали
Команда Джонса Хопкинса поставила простой вопрос: что если дать модели инструмент «сжать контекст» — она воспользуется им разумно? Ответ оказался «нет»: одни модели давили кнопку сжатия каждые два шага, другие игнорировали её совсем. Это и стало точкой входа для рубрики.
Тестировали на семи моделях семейства Qwen и трёх поисковых агентах (MiniMax, GLM, MiMo) — шесть бенчмарков: олимпиадная математика (IMO-Answerbench, HMMT) и сложный агентный поиск (BrowseComp). Сравнивали три режима: без сжатия, фиксированный интервал (каждые 30% контекста), и SELFCOMPACT с рубрикой.
Самый показательный результат — в математике на Qwen3.5-9B: без сжатия 25%, фиксированный интервал 33%, SELFCOMPACT 41%. Почти двойной разрыв между «не сжимать» и «сжимать умно». Но вот что интересно: был и «оракульный» тест — модели дали знать когда ответ уже правильный и сжимать не нужно. Оракул дал 52.9%. Это значит, что SELFCOMPACT ещё далёк от потолка — принцип правильный, потенциал не исчерпан.
В поисковых задачах SELFCOMPACT оказался дешевле базового варианта, несмотря на дополнительные вызовы. Стоимость на вопрос упала на 33-67% — потому что сжатый контекст дешевле обрабатывать на каждом следующем шаге.
Адаптации и экстраполяции
🔧 Техника: «Резюме после каждого блока задачи»
Если работаешь по структурированному плану (исследуешь 5 вопросов подряд) — вставляй рубрику не по времени, а после каждого закрытого пункта. Модель сама скажет «СЖАТЬ» — и ты начнёшь следующий пункт с чистым, сфокусированным контекстом.
Мы завершили пункт {N} нашего плана.
Прежде чем переходить к пункту {N+1}:
Оцени: нужно ли зафиксировать итог в резюме или
контекст ещё достаточно чистый?
Если резюме нужно — составь сводку по пункту {N}
(ключевые факты, решения, открытые вопросы),
затем переходи к {N+1}.
🔧 Техника: «Зеркало для длинного проекта»
Экстраполяция на многосессионную работу (несколько отдельных чатов). В конце каждой сессии — вместо того чтобы просто закрыть чат — запускаешь рубрику и сохраняешь резюме. В начале следующей сессии вставляешь его в системный промпт или первое сообщение. SELFCOMPACT превращается в протокол передачи контекста между сессиями.
Мы заканчиваем сессию по задаче {название задачи}.
Составь сводку для следующей сессии:
✅ РЕШЕНО ОКОНЧАТЕЛЬНО: [список с деталями]
🔄 В ПРОЦЕССЕ: [что не дорешали сегодня]
❓ ОТКРЫТЫЕ ВОПРОСЫ: [что нужно разобрать дальше]
🚫 НЕ ДЕЛАТЬ: [что уже проверили и отбросили]
Блок «🚫 НЕ ДЕЛАТЬ» — самый важный:
он не даст нам повторить ошибочные пути в следующий раз.
Ресурсы
Self-Compacting Language Model Agents (2026, preprint, под рецензией)
Авторы: Tianjian Li, Jingyu Zhang, William Jurayj, Xi Wang, Chuanyang Jin (Johns Hopkins University), Mehrdad Farajtabar (Apple), Eric Nalisnick, Daniel Khashabi
Контакт: tli104@jhu.edu, danielk@jhu.edu
Связанные работы упомянутые в статье:
- ReasoningCache (Wu et al., 2026) — scaffold для сжатия рассуждений
- Claude /compact command (Anthropic, 2025) — пользовательский триггер сжатия
- Cursor AI compaction (Cursor Research, 2026) — фиксированный порог в IDE
