TL;DR
Когда диалог с AI-агентом становится длинным и не помещается в контекст, система сжимает историю — суммирует старые сообщения, чтобы освободить место. Проблема в том, что при таком сжатии правило безопасности сжимается с той же скоростью, что и обычный факт — хотя правило нельзя пересказывать своими словами, а факт можно.
Авторы измерили это на реальных агентах: после одного раунда сжатия выживает 53% правил, после пяти раундов — всего 10%. Причина в формулировке: правила безопасности в реальности чаще пишут не как приказ ("никогда не делай X"), а как обычный факт ("у пациента аллергия на пенициллин") — и именно такие факты модель не распознаёт как что-то критичное, поэтому пересказывает их вместе с остальным мусором, теряя нужную формулировку.
Решение авторов — Knowledge Triage: перед сжатием классифицировать каждый кусок памяти на один из 5 типов (правило, процедура, факт, предпочтение, эпизод) и сжимать каждый тип по своей политике: правила — без искажений, процедуры — можно переписать если логика сохраняется, факты и предпочтения — можно сжимать, эпизоды — можно выбросить целиком.
Схема метода
ШАГ 1: Классификатор читает каждый элемент памяти → метка типа
(Правило / Процедура / Факт / Предпочтение / Эпизод)
ШАГ 2: Применяется операция под тип:
- Сжатие → правила не трогать, эпизоды сократить до заглушки
- Разбиение на части → правило дублируется во все части, где оно действует
- Поиск во внешней памяти → правило подтягивается первым, независимо от релевантности
ШАГ 3: Верификатор проверяет — все ли правила выжили →
если нет, помечает результат как небезопасный и восстанавливает потерянное
Это инженерная система (классификатор + алгоритмы), работающая на уровне кода. Но принцип, который из неё можно выдернуть в обычный чат — ниже.
Пример применения
Задача: Предприниматель настроил кастомного GPT-ассистента для проверки договоров с системной инструкцией: "Клиент — ИП на упрощёнке, никогда не предлагай схемы с вычетом НДС". После 40-50 сообщений в чате (обсуждение разных договоров, вопросов, правок) ассистент начинает предлагать схемы с НДС — правило "потерялось" где-то в истории.
Что делать вместо надежды, что модель "запомнит":
В начале диалога:
ПРАВИЛО [НЕ ИЗМЕНЯТЬ, СОХРАНЯТЬ БУКВАЛЬНО]:
Клиент — ИП на УСН. Никогда не предлагай и не упоминай схемы
с вычетом НДС ни в каком виде.
---
Каждые 15-20 сообщений (или перед тем как попросить сжать историю):
Прежде чем мы продолжим — повтори мне правило, которое
действует в этом диалоге, чтобы я убедился, что ты его помнишь.
Результат: Модель либо подтвердит правило точной формулировкой (значит помнит), либо ошибётся — и вы сразу увидите, что пора закрепить его снова. Это не даёт 100% гарантии (в чате нет верификатора из статьи), но резко снижает шанс, что правило "размылось" в общей истории разговора.
Почему это работает
При чтении длинного текста модель хуже "видит" то, что находится в середине — внимание распределяется неравномерно, и суммаризация в первую очередь режет то, что не выглядит как явная команда. Модель хорошо распознаёт императивные конструкции с маркерами — слова "никогда", "обязательно", "критично" — как сигнал "это нельзя трогать".
Обычные факты и правила, сформулированные как факт ("у клиента упрощёнка"), не несут такого сигнала — модель не отличает их от фонового контекста и сжимает вместе со всем остальным.
Рычаги управления: - Формулировка правила (декларативная → императивная с маркером "НЕ ИЗМЕНЯТЬ") — резко повышает шанс, что модель распознает его как критичное при любом сжатии. - Периодическое напоминание — просите модель повторить правило раз в N сообщений, это работает как ручная проверка вместо автоматического верификатора из статьи. - Явное разделение при запросе суммаризации — указывайте отдельно, что сохранить дословно, что можно пересказать.
Шаблон промпта
В начале длинного диалога / при настройке ассистента:
ПРАВИЛО [КРИТИЧНО, СОХРАНЯТЬ БУКВАЛЬНО, НЕ ПЕРЕФОРМУЛИРОВАТЬ]:
{текст правила, сформулированный как запрет: "никогда не..."}
Остальная информация в этом диалоге (детали задачи, предпочтения,
история обсуждения) может быть сжата или пересказана своими словами
при необходимости.
---
Перед сжатием контекста или просьбой "подведи итог диалога":
Прежде чем сжимать историю разговора, повтори мне слово в слово
все правила, отмеченные как КРИТИЧНО, которые действуют в этом
диалоге. Остальное можешь сжать.
Подставляй в {текст правила} — реальный запрет или ограничение для конкретной задачи (юридическое, медицинское, финансовое или любое другое, где ошибка дорого стоит).
🚀 Быстрый старт — вставь в чат:
Я работаю с тобой в длинном диалоге и хочу, чтобы важные правила
не потерялись при сжатии истории. Вот моя задача: {твоя задача}.
Помоги сформулировать правило в императивной форме с явным маркером
критичности, и предложи как часто мне просить тебя повторить его
вслух, чтобы проверить, что оно не забылось.
Модель уточнит, что за правило и в каком контексте оно работает — потому что от этого зависит, насколько жёсткую формулировку и как часто напоминать.
Ограничения
⚠️ Это не готовый промпт-инструмент, а диагностика проблемы. Полноценный Knowledge Triage — это классификатор, верификатор и алгоритмы на коде. В обычном чате доступен только принцип: явная формулировка + периодическое напоминание, без гарантий, которые даёт система из статьи.
⚠️ Не работает, если сжатие происходит незаметно и вы не контролируете момент. Если это встроенная автофункция агента (как /compact в Claude Code), у вас нет доступа к моменту сжатия — единственное что остаётся, это профилактика через явную формулировку правил заранее.
⚠️ Метод не спасает от накопленной ошибки. Даже с чёткой формулировкой правило может "стереться" за много раундов сжатия — метод снижает риск, но не убирает его полностью в ручном режиме без верификатора.
Ресурсы
The Compaction Cliff in Long-Running AI Agent Memory, Saber Zerhoudi, Jelena Mitrović, Michael Granitzer (University of Passau, IT:U Linz), CIKM'26. Датасет AgentArtifactCorpus (396,934 артефакта из 54,628 репозиториев на GitHub) на HuggingFace, код на GitHub (searchsim-org/cikm26-knowledge-triage).
