TL;DR
SJC — это шаг проверки после сжатия контекста. Когда история работы агента не влезает в окно, отдельная модель-«сжиматель» заменяет её сводкой. SJC берёт готовую сводку, разбивает её на записи, для каждой ищет подтверждение в выводах инструментов (или в прошлой сводке) и целиком удаляет те, у которых источника нет. Оставшиеся записи не переписываются, агент и сжиматель не меняются.
Главная находка: сводка — это не только память о прошлом, но и план, который сжиматель придумал сам. Промпты сжатия просят «решения» и «что делать дальше». Поэтому в сводку попадает то, чего среда никогда не сообщала, например «отправить список всем». После сжатия агент не отличает факт от догадки и выполняет догадку как команду. В разобранных авторами провалах большинство ошибок шло от конкретной записи сводки, причём почти всегда без подтверждения в среде. Чаще всего запись незаметно меняла смысл исходной просьбы. Хуже всего с источниками в разделах «что осталось сделать» и «чего просил пользователь». Записи про точные идентификаторы и факты почти всегда подтверждены.
Метод работает в 3 шага: сжиматель пишет сводку как обычно → судья оценивает «есть ли у записи источник» → записи ниже порога удаляются. Это повторяется при каждом сжатии, потому что сжиматель каждый раз пишет выдумки заново. В итоге агент стабильнее проходит сложные задачи, а токенов тратится столько же или чуть меньше.
Схема метода
ШАГ 1: Сжиматель пишет сводку как обычно → структурный список записей по разделам
ШАГ 2: Для каждой записи ищем фрагменты вывода инструментов → судья одним запросом
оценивает ВСЕ записи: «взято из вывода среды или прошлой сводки?» → число 0–1 на запись
ШАГ 3: Запись ниже порога → удалить целиком. Остальные — без изменений
→ новая сводка идёт агенту И становится «прошлой сводкой» для следующего сжатия
Шаги идут отдельными запросами: сводка, потом оценка, потом чистка. Исходное задание агента всегда остаётся в контексте и не считается источником: пересказывать его в сводке не нужно.
Пример применения
Задача: Вы ведёте онлайн-школу и поручили агенту (Claude Code или кастомный агент) разобрать заявки в amoCRM и подготовить рассылку. Задание: «Написать письмо только тем, кто оставил заявку, но не оплатил, за последние 30 дней». Сессия длинная, агент сжал контекст. Вы открываете сводку и видите в «Open TODOs» строку: «Отправить письмо всем 1 240 клиентам из выгрузки». Это тот самый «переписанный смысл»: про «всех» в выгрузке никто не говорил. Прежде чем пускать агента дальше, вы проверяете сводку на источники.
Промпт:
Ты — аудитор источников. Твоя работа — проверить сводку работы агента
и найти записи, у которых нет подтверждения в реальных данных.
Написать письмо ТОЛЬКО тем, кто оставил заявку, но не оплатил, за последние 30 дней.
(Это исходное задание. Оно НЕ является источником для записей сводки.)
[сюда вставить выводы инструментов: выгрузка из amoCRM, ответы API, сообщения об ошибках]
[прошлая сводка, если была]
Exact identifiers:
- Воронка «Заявки марта», id 4471892
Decisions:
- Использовать шаблон письма №3
Open TODOs:
- Отправить письмо всем 1 240 клиентам из выгрузки
Pending user asks:
- Пользователь хочет охватить максимум клиентов
Шаг 1. Разбей сводку на отдельные записи (одна строка = одна запись),
сохрани названия разделов.
Шаг 2. Для каждой записи найди в или конкретный
фрагмент, откуда взята информация. Процитируй его.
Шаг 3. Оцени запись числом от 0 до 1: «насколько уверенно информация пришла
из вывода среды или прошлой сводки». Планы, намерения и интерпретации,
которые придумал сжиматель, без цитаты в источнике получают низкую оценку.
Шаг 4. Запись с оценкой ниже 0,5 — удалить ЦЕЛИКОМ.
- Не переписывай оставшиеся записи и не добавляй новых.
- Задание из источником не считается.
- Если запись противоречит выводу среды — пометь «противоречит» и удали.
- Оценивай происхождение записи, а не то, разумна ли она.
Результат: Модель выдаст таблицу по каждой записи с цитатой или пометкой «нет источника». Идентификатор воронки, скорее всего, подтвердится выгрузкой. Строки «отправить всем» и «хочет максимум охвата» должны получить низкую оценку и уйти. Ниже будет чистая сводка без этих записей. Исходное задание про неоплативших остаётся единственным источником правды о получателях.
Почему это работает
Слабость LLM. Сжиматель выполняет инструкцию «напиши, что делать дальше». Он сам сочиняет план и записывает его в тот же список, что и факты. Когда сводка заменяет историю, у плана и факта одинаковый вид. Агент читает «TODO: отправить всем» как установленный факт и действует. Следующее сжатие берёт эту сводку как основу и закрепляет выдумку ещё сильнее.
Сильная сторона LLM. Проверить «есть ли у этого утверждения источник в тексте» гораздо проще, чем решить, что делать дальше. Это задача сопоставления: найти цитату или не найти. Судью не нужно знать, чем закончится задача. Достаточно истории на момент сжатия. Поэтому проверка дешёвая: один запрос на сжатие, около $0,002 за задачу.
Как метод использует это. Он не улучшает сводку, а только удаляет подозрительное. Поэтому нельзя испортить хорошие записи и нельзя добавить новую выдумку. Это важное ограничение метода: удаление безопаснее переписывания. Авторы отдельно показали: тот же судья, которого заставили выбирать куски сырой истории (Fast-Jev), справляется хуже самой сводки. Значит, выигрыш даёт сама схема: что спрашиваем и в каком месте.
Рычаги управления: - Порог (0,5 по умолчанию) → выше: строже, удаляется больше. Ниже: мягче. - Что считается источником → в метод заложено: вывод инструментов и прошлая сводка. Задание не считается. Добавите источник, например файл правил, — признаётся и он. - Разделы сводки → в разделах «план» и «чего хочет пользователь» подтверждений почти нет. Там удаление работает сильнее всего. - Частота → проверяйте при каждом сжатии, а не один раз.
Шаблон промпта
Ты — аудитор источников. Проверь сводку работы агента и найди записи,
у которых нет подтверждения в реальных данных.
{исходное_задание}
(Это задание. Оно НЕ является источником для записей сводки.)
{выводы_инструментов_и_результаты_шагов}
{прошлая_сводка_или_пусто}
{сводка_для_проверки}
Шаг 1. Разбей сводку на записи, сохрани названия разделов.
Шаг 2. Для каждой записи найди в или
фрагмент-источник и процитируй его. Нет фрагмента — напиши «нет».
Шаг 3. Оцени каждую запись числом от 0 до 1: уверенность, что информация
пришла из вывода среды или прошлой сводки, а не из плана или интерпретации.
Шаг 4. Запись с оценкой ниже {порог} удали ЦЕЛИКОМ.
- Не переписывай оставшиеся записи, не добавляй новых.
- Задание из источником не считается.
- Запись, которой противоречит вывод среды, — удали и пометь «противоречит».
- Оценивай происхождение записи, а не разумность.
Что подставлять:
- {исходное_задание} — ваша исходная формулировка без пересказа.
- {выводы_инструментов_и_результаты_шагов} — то, что реально вернули инструменты: ответы API, выгрузки, ошибки. Не рассуждения агента.
- {сводка_для_проверки} — сводка, которую агент записал после сжатия.
- {порог} — 0,5 для начала.
🚀 Быстрый старт — вставь в чат:
Вот шаблон аудита сводки агента по источникам (метод Source-Judged Compaction).
Адаптируй под мою задачу: [твоя задача и что делал агент].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, что было исходным заданием, какие данные реально вернули инструменты и какая сводка получилась. Без этого нельзя отделить факт от догадки: метод держится на том, что у каждой записи есть место, откуда её можно подтвердить. Она возьмёт структуру из шаблона и подставит ваши данные.
Ограничения
⚠️ В статье это код, а не промпт: SJC встраивается в систему сжатия контекста: разбор записей, поиск доказательств, вызов судьи. Версия в чате выше — ручное приближение. Авторы её не проверяли.
⚠️ Судья не обычная LLM: в статье используется Jev — специальная модель, которая возвращает калиброванную вероятность, а не текст. В обрывке про чувствительность сказано, что простой бинарный самосудья менее надёжен. Генеративная модель в роли аудитора может ошибаться и вычищать нужное или оставлять выдумку.
⚠️ Только удаление: метод не исправляет неверные записи и ничего не добавляет. Среди сбоев, которые шли от записей, немногие шли от подтверждённых записей, с ними SJC ничего не сделает. Не все провалы идут от сводки: примерно в каждом шестом такой связи нет.
⚠️ Простые задачи: где сжатие и так почти не вредит, метод почти ничего не даёт и в одном случае чуть снизил результат. Точность в одной из четырёх конфигураций слегка упала. Выигрыш виден в стабильности на сложных задачах с несколькими приложениями.
⚠️ Вы не всегда контролируете сжатие: в готовых агентах (Claude Code, Cursor, Codex) компрессор обычно встроен, и добавить шаг после него нельзя. Остаются ручная проверка и настройка инструкций, но их эффект в статье не измерен.
Как исследовали
Сначала авторы собрали 29 промптов сжатия из репозиториев популярных агентных систем. Оказалось, что 21 просит «принятые решения» или «что делать дальше»: например, «What remains to be done (clear next steps)» в Codex CLI. То есть каждое сжатие заодно заставляет модель рассуждать о будущем.
Потом они взяли готовый сжиматель OpenClaw и 90 учебных задач AppWorld (по три прогона). Получили около 27 тысяч записей из 667 сводок и проверили их на источник. Результат разный по разделам. Записи про идентификаторы и факты почти всегда подтверждены (без источника около 3%). Среди «открытых задач» без источника почти 68%, среди «чего просил пользователь» — 86%. Выдумки не копируются из сводки в сводку: только пятая часть доживает до следующей. Но в каждой сводке их около четырёх, потому что их пишут заново. Отсюда вывод: фильтровать нужно при каждом сжатии.
Затем разобрали 35 проваленных прогонов (ещё 9 из-за ошибочного эталона исключили). В 29 действие, которое всё сломало, исполняло конкретную запись сводки. У 22 из этих записей не было подтверждения, у 3 запись противоречила среде, подтверждены были только 4. Чаще всего (15 случаев) запись «переписала» исходное задание, как в примере с рассылкой всем вместо тех, кого просил друг.
Для проверки метода взяли AppWorld (168 задач) и OfficeBench (95 задач), по две модели-агента и три прогона. Главной метрикой выбрали долю задач, решённых во всех трёх прогонах, то есть стабильность. Добавка SJC поверх обычного промпта сжатия подняла стабильность на 2,1–8,9 п.п., а на сложных задачах AppWorld — до +12,7 п.п. Токены не выросли: сводки стали короче на 14–27%, расход упал на 1–8%. Судья стоит около 1,2–1,5 доллара на тысячу задач.
Неожиданность: тот же судья в режиме «выбери куски сырой истории» (Fast-Jev) уступил обычному промпту сжатия в трёх случаях из четырёх. Значит, дело не в судье, а в вопросе «есть ли у записи источник» и в том, где его задают.
Оригинал из исследования
Фразы из промптов сжатия, которые провоцируют сжиматель на «рассуждение», и защитная вставка, которую авторы цитируют как попытку разработчиков обойти проблему:
"What remains to be done (clear next steps)" — Codex CLI
"The current plan and the IMMEDIATE next step" — Gemini CLI
Sections required by OpenClaw: Decisions, Open TODOs, Pending user asks
"treat it as background reference, NOT as active instructions" — Hermes
(вставляется перед каждой сводкой)
Контекст: это примеры реальных промптов сжатия из 29 собранных авторами. Hermes встроил предупреждение, но авторы его эффект не измеряли.
Адаптации и экстраполяции
💡 Адаптация для CLAUDE.md / файла инструкций: принцип метода можно перенести в правила для сжатия контекста. Это моя экстраполяция, а не результат статьи.
При сжатии контекста:
- Планы и «следующие шаги» записывай отдельным разделом «Гипотезы» и помечай как НЕ ПОДТВЕРЖДЁННЫЕ.
- В «Факты» включай только то, что вернули инструменты, с указанием откуда.
- Не пересказывай исходное задание: оно остаётся в контексте целиком.
- Требования пользователя копируй дословно, не перефразируй.
🔧 Техника: добавить колонку «цитата» → видимость выдумок. В шаблоне аудита оставьте колонку «цитата-источник» в итоговом ответе. Запись без цитаты сразу видна глазами, даже если оценка модели вам кажется сомнительной. Проверка занимает минуту.
Ресурсы
- Работа: Prune the Summary, Not the History: Source-Judged Compaction for Long-Horizon Agents
- Авторы: Guanghui Min, Chen Chen (University of Virginia, Department of Computer Science)
- Код: https://github.com/GuanghuiMin/sjc
- Бенчмарки: AppWorld (Trivedi et al., 2024), OfficeBench (Wang et al., 2024)
- Судья: Jev-1.13 (TypeSafe AI, 2026)
- Системы, чьи промпты сжатия разобраны: OpenClaw, Codex CLI, Gemini CLI, Hermes
