[МСК]

Что такое компакция контекста и зачем она в длинном диалоге

Зачем это знать

  • Понять, почему длинная сессия с моделью дорожает к своему концу и как это удержать
  • Спрашивать подрядчика, что происходит с историей задачи при заполнении окна
  • Считать бюджет длинных диалогов заранее, до запуска

Что такое компакция контекста простыми словами

Совещание идёт четвёртый час. Стенограмма разрослась до сорока страниц. Новому участнику её целиком не дают. Дают выжимку на страницу: зачем собрались, что уже решили, что осталось.

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

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

Как это работает

Шаг 1
Следят за заполнением окна
Порог ставят в районе 70–80% контекстного окна. До порога переписку копят как есть.
Шаг 2
Отдают старую часть на сжатие
Ранние реплики уходят отдельным запросом с инструкцией пересказать по заданным полям.
Шаг 3
Собирают сводку по шаблону
Поля фиксированы: задача, принятые решения, проверенные факты, что сделано, открытые вопросы.
Шаг 4
Пересобирают запрос
Сводка встаёт в начало, последние три-четыре реплики остаются дословно, остальное убирают.
Один цикл компакции

Дословный хвост нужен ради связности. По последним репликам модель понимает, о чём шла речь минуту назад, а сводка держит рамку всей задачи.

Шаблон сводки — главная настройка. Свободный пересказ модель пишет по-разному от раза к разу, и однажды из него выпадает номер договора. Поля задают заранее и не меняют между сессиями. Тогда сводка проверяется глазами за полминуты.

Отдельно закрепляют то, что терять нельзя. Реквизиты, ссылки на документы, статус согласования кладут вне диалога — в карточку задачи, файл или базу. Диалог сжимается, запись в базе остаётся полной.

Пример из практики

Цифры ниже — расчётные ориентиры для длинной рабочей сессии, а не отчёт по конкретному внедрению. Методика простая: страница делового текста на 1 800 знаков даёт около 800 токенов на русском, сессию считают в двадцать реплик по странице каждая.

Вся история целиком
16000 токенов
Сводка плюс четыре реплики
4800 токенов
Входной объём одной реплики к двадцатому шагу сессии · Источник: расчёт по счётчику токенов: страница 1 800 знаков ≈ 800 токенов на русском; 20 реплик подряд против сводки на 2 страницы плюс 4 последние реплики

Разница — 16 000 токенов против 4 800, примерно втрое. Само сжатие тоже стоит денег: выбрасываемую историю модель читает один раз целиком. На двадцати репликах такой запрос случается один-два раза, и он окупается уже к середине сессии.

Экономия растёт вместе с длиной работы. На пяти репликах компакция не даёт ничего. На сотне она решает, доживёт ли задача до конца.

Что это даёт бизнесу

  • Цена длинной сессии перестаёт быть сюрпризом. Без сжатия каждая следующая реплика дороже предыдущей, и при удвоении длины диалога счёт растёт больше чем вдвое. Со сводкой объём колеблется вокруг постоянной величины. Порядок суммы для своего процесса прикидывают калькулятором бюджета.
  • Длинные задачи вообще становятся выполнимыми. Разбор договора на шестьдесят страниц, многодневная переписка с клиентом, разбор инцидента по шагам — всё это перестаёт обрываться на середине.
  • Появляется точка контроля. Сводка читается человеком за полминуты. Видно, что модель считает решённым, и ошибка ловится до того, как уйдёт в ответ клиенту.
  • Работа переживает перезапуск. Сводка сохраняется отдельно, и вернуться к задаче можно назавтра, без пересказа всей истории заново.

Когда без этого можно обойтись

Короткие обращения сжимать незачем. Один вопрос и один ответ в поддержке укладываются в тысячу-две токенов, до края окна там далеко.

Обрезка последних N реплик
Компакция в сводку
Что делают со старым
выбрасывают без следа
пересказывают по шаблону
Стоимость приёма
ноль дополнительных запросов
один запрос на каждое сжатие
Что помнит модель
последние несколько реплик
рамку задачи целиком
Где уместно
короткие обращения, поиск по базе
многошаговые задачи и агенты
Два способа удержать историю в рамках окна

Не нужна компакция и там, где каждый запрос независим. Поиск по базе знаний, разбор одного документа, классификация писем — история между обращениями там не копится вовсе.

Что важно проверить

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

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

Третье: у подрядчика стоит спросить разбивку входного объёма одной реплики — сколько занимает инструкция, сколько сводка, сколько живая переписка. По этой разбивке сразу видно, где деньги.

Частые вопросы

Компакция контекста простыми словами — это что?

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

Чем компакция отличается от простой обрезки истории

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

Что теряется при сжатии и как это удержать

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

Когда включать компакцию

Порог задают по заполнению контекстного окна — обычно в районе 70–80%. Раньше сжимать невыгодно: каждое сжатие само стоит токенов, потому что старую переписку модель должна прочитать целиком. Позже опасно: запрос упирается в край окна и обрывается. Точный порог подбирают замером на двух-трёх днях реальных сессий.

Сколько стоит само сжатие

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