Перейти к содержанию

Сжатие контекста

v0.5.0

Сжатие контекста помогает продолжать длинный диалог, не теряя важные решения и при этом не расходуя слишком много токенов. Вместо полной истории Koda сохраняет краткий конспект предыдущей части разговора.

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

Koda создаёт summary на основе части истории диалога, а затем использует этот конспект вместо полной ранней переписки.

Обычно в summary попадают:

  • цель обсуждения;
  • важные решения;
  • изменения в файлах и структуре проекта;
  • результаты работы последних инструментов;
  • договорённости, которые нужны для продолжения работы.

В интерфейсе такое место в истории помечается отдельным маркером, чтобы было видно, где ранние сообщения были сжаты.

Маркер автоматического сжатия в чате

Маркер автоматического сжатия в чате

Зачем это нужно

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

Сжатие позволяет:

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

Ручное сжатие

Если вы хотите сжать историю сами, используйте команду:

/summarize

Команда создаёт конспект всей текущей истории диалога.

Это удобно, когда:

  • завершён отдельный этап работы;
  • диалог заметно разросся;
  • вы хотите зафиксировать текущее состояние перед новой задачей.

Ввод команды суммаризации

Ввод команды суммаризации

Автоматическое сжатие

v0.6.2

Автоматическое сжатие работает в агентском режиме. Оно запускается, когда фактический расход входных токенов последнего ответа модели достигает порога сжатия:

  • для моделей с окном до 40 000 токенов — 75% окна;
  • для моделей с большим окном — окно минус 40 000 токенов запаса (например, при окне 128 000 сжатие начнётся примерно на 88 000 токенов).

Такой же порог используется в Koda CLI, поэтому поведение плагина и CLI совпадает. Сжатие всегда срабатывает раньше, чем запрос перестанет помещаться в окно модели.

Сжимается не вся история, а только её ранняя часть. Если эта часть меньше 30 000 токенов, сжатие не выполняется: слишком короткий конспект не окупает потерю деталей. В этом случае диалог продолжается как обычно.

Проверка выполняется перед следующим запросом к модели. Если до порога далеко, сжатие не задерживает диалог. Если порог достигнут, следующий запрос модели отправляется только после завершения сжатия — в это время в чате отображается статус «Сжатие контекста...». По умолчанию автоматическое сжатие включено.

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

Автоматическое сжатие работает и для субагентов по тем же правилам: когда контекст субагента приближается к порогу, его задача приостанавливается, создаётся сводка выполненной работы, и субагент продолжает её со сводкой и недавними сообщениями — следующий запрос субагента также отправляется только после завершения сжатия. В сессии субагента появляется такой же маркер сжатия. Настройка Автоматическое сжатие контекста управляет обоими случаями.

Процесс суммаризации

Процесс суммаризации

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

Что происходит при переполнении контекста

Если запрос вместе с резервом на ответ не помещается в окно модели, Koda не отправляет его и сообщает об ошибке с предложением выполнить /summarize или уменьшить сообщение и вложения. Автоматическое сжатие обычно не даёт дойти до этой ситуации, но оно может не сработать, если новая часть диалога сама занимает больше половины окна — в таком случае сократите сообщение вручную или начните новую сессию.

Что важно учитывать

Сжатие контекста не копирует диалог слово в слово. Оно сохраняет главное, поэтому второстепенные детали или промежуточные формулировки могут быть опущены.

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

Если для вас критичны точные формулировки, команды или фрагменты кода, лучше зафиксировать их отдельно до сжатия.

Когда использовать

Сжатие особенно полезно в таких случаях:

  • долгая отладка или рефакторинг;
  • многошаговая работа над одной задачей;
  • переход от обсуждения к реализации;
  • длинная агентская сессия с несколькими изменениями файлов.

Практический совет

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