Автоматическое резюмирование контекста
По умолчанию, когда разговор приближается к лимиту контекстного окна модели, Kodik автоматически резюмирует его, чтобы освободить место и продолжить работу. Необязательные автоматические триггеры можно выключить в Settings → Agents; резюмирование также можно запустить вручную с помощью команды /compact.
Как это работает
Заголовок раздела «Как это работает»Kodik отслеживает использование токенов и изменения контекста по ходу разговора. Авторезюмирование может сработать в следующих случаях:
- Проактивно — по умолчанию примерно при достижении 90% контекстного окна модели либо раньше, если окончательный запрос к провайдеру не оставляет достаточно места для запрошенного ответа. Порог сохраняет полный резерв для максимального ответа модели, поэтому на моделях с небольшим окном он может опускаться ниже 90%. В выборе модели и Settings показывается именно этот эффективный порог.
- После паузы — при включённой настройке, после заданного периода бездействия (по умолчанию пять минут), если разговор накопил достаточно контекста (~30 тыс. токенов), чтобы резюмирование окупилось. Этот триггер по умолчанию выключен; чтобы использовать его, включите Summarize after inactivity в Settings → Agents.
- После смены модели — необязательно, при следующем ходе, если включена настройка Summarize on model switch и накопилось достаточно старого контекста. Исключение — обязательная защитная передача контекста с модели с большим окном на модель с меньшим: она выполняется, даже если выключены Automatic summarization или Summarize on model switch.
Триггеры размера контекста и простоя основаны на токенах, а не на количестве сообщений: пара огромных ходов с результатами инструментов может быть сжата, а десятки крошечных — нет. Сжатие после смены модели использует то же токеновое разделение и не обращается к модели, если старого контекста для сворачивания нет.
Во время сжатия строка в чате показывает точную причину: размер контекста, простой, смену модели, переполнение контекста или ручную команду /compact.
После успешного сжатия завершённая карточка показывает использование контекста до и после резюмирования. Значение после сжатия учитывает новый системный промпт, активные определения инструментов и сжатый разговор — те же категории, что и меню Context Usage, — поэтому обе поверхности показывают одинаково освобождённый контекст даже при очень больших старых результатах инструментов.
При срабатывании:
- Kodik выбирает старую часть истории для модели и сохраняет недавний хвост в пределах токенового бюджета. Во время активного автономного хода исходная задача остаётся дословной, а сжимать можно только завершённые обмены с инструментами.
- Завершённые вызовы инструментов и соответствующие результаты перемещаются вместе как неделимые доказательства. Самые свежие результаты сохраняются целиком, чтобы недавний хвост оставался точным; активный промпт использует ограниченное представление более старых результатов, а точные исключённые сообщения провайдера сохраняются вне контекстного окна.
- Модель сжатия создаёт контрольное резюме непотоковым запросом. Обычно это выбранная для чата модель. Перед обязательным переходом на модель с меньшим окном Kodik использует прежнюю модель с большим окном и её провайдера. Следующий ход отправляется новой модели только после успешного создания резюме; иначе Kodik безопасно останавливает ход, не отправляя запрос новой модели. Разговор отправляется ровно в том виде, в котором его только что получила модель, а инструкция добавляется последней, поэтому у провайдеров с кэшированием промпта история оплачивается по более дешёвому кэш-тарифу, а новой является только инструкция. Kodik передаёт ту же детерминированную схему инструментов, что и в выбранном префиксе промпта, но принудительно задаёт
tool_choice=none: запрос остаётся совместимым с кешем, выполнение инструментов отключено, и модель сжатия не может начать новую работу. - Контекст для модели становится парой «What did we do so far?» + резюме, после которой идёт точный недавний хвост. Видимая история чата не заменяется.
Если один автономный ход заполняет окно результатами инструментов, провайдер отправляет терминальную передачу для сжатия с точной историей разговора и сразу освобождает исходный запрос. Владелец хода сжимает завершённые обмены, а затем запускает новое продолжение с тем же идентификатором хода, не ожидая нового сообщения пользователя. Уже первый огромный результат можно сжать после завершения, а длинный ход может повторять цикл «передача — сжатие — продолжение» по мере накопления новых результатов. Локальные и размещённые сессии, а также делегированные субагенты используют один и тот же поток, поэтому разговор провайдера не остаётся приостановленным в ожидании межпроцессного обратного вызова. Если сжатие завершается ошибкой, ход заканчивается видимым сообщением «Automatic summarization did not complete» — можно повторить ход или выполнить /compact вручную — вместо того чтобы молча заморозить чат.
Непосредственно перед каждым запросом к провайдеру — первым запросом и каждым продолжением после инструмента — Kodik оценивает точную окончательную нагрузку, которая будет отправлена по сети. Бюджет включает текст сообщений, имена, идентификаторы и аргументы вызовов инструментов, связь с их результатами, мультимодальные изображения, сериализованные схемы инструментов, резерв на запрошенный ответ и 5-процентный запас на погрешность токенизатора. Если провайдер сообщил объём входных токенов для неизменившегося префикса провайдера, модели и схем инструментов, Kodik распространяет этот измеренный показатель на новый суффикс и использует большее из двух значений: локальную оценку или проекцию провайдера. Изменение префикса, модели, провайдера или схем инструментов делает показатель несовместимым.
Запросы сжатия повторяются только при временных сетевых сбоях, тайм-аутах, ответах HTTP 408/425/429 и ошибках сервера. Один запрос ограничен четырьмя сетевыми попытками, а также лимитами времени на попытку и на весь процесс. Неповторяемая ошибка или исчерпание попыток отклоняет сжатие; владелец хода запускает новое продолжение только после создания контрольного резюме. Если сам провайдер сообщает о переполнении контекста, Kodik также повторяет исходный ход только после успешного сжатия. Иначе ход безопасно завершается ошибкой лимита контекста без повторной отправки слишком большого запроса.
Перед заменой Kodik сохраняет и ограниченный вход резюмирования, и, когда доступен точный завершённый префикс провайдера, полные исходные сообщения без ограничения размера, которым грозит исключение или усечение, в локальном для рабочей области архиве доказательств. Полный источник восстановления остаётся доступен, даже если активный промпт использует сокращённое представление большого результата инструмента; устаревшие или уже сокращённые источники помечаются как проекция и не выдаются за точные. Каждое дополнение публикуется как отдельный неизменяемый снимок, поэтому прерванная запись или устаревший файл блокировки не мешают последующим сжатиям, а параллельные ветви не перезаписывают друг друга. Установленное резюме указывает на один успешно сжатый префикс, поэтому более поздняя заменённая попытка не попадёт в активную или ответвлённую историю. Если понадобятся пропущенные детали, модель может постранично прочитать установленный архив этой сессии инструментом только для чтения read_compaction_evidence; пути и указатели архива модели не передаются. При удалении чата его архив также удаляется.
Что сохраняется в резюме
Заголовок раздела «Что сохраняется в резюме»Резюме создаётся по фиксированному шаблону. Оно всегда содержит:
- Goal — краткое описание задачи одной фразой
- Constraints & Preferences — требования и предпочтения пользователя
- Progress — выполненная работа, текущие задачи, блокеры
- Key Decisions — принятые технические решения
- Next Steps — следующие действия
- Critical Context — важные технические факты, ошибки, открытые вопросы
- Relevant Files — пути к файлам и их значимость
Провайдер сжатия
Заголовок раздела «Провайдер сжатия»Обычно сжатие использует модель и провайдера, выбранные для этого чата. Исключение — обязательный переход с модели с большим контекстным окном на модель с меньшим: Kodik сохраняет прежний выбор на время создания резюме истории, которая не поместится в новое окно, даже если выключены Automatic summarization или Summarize on model switch, и только после этого допускает следующий ход на новой модели. Если это сжатие завершается ошибкой, запрос новой модели не отправляется. Kodik, пользовательские OpenAI-совместимые провайдеры и Ollama используют один и тот же путь запросов; отдельного сервиса с фиксированной моделью больше нет. Попадание в кеш промпта — лишь оптимизация, а не требование корректности.
Для моделей Kodik каждый запрос одного чата также передаёт через Kodik API один и тот же идентификатор задачи, чтобы вышестоящий провайдер мог направлять разговор в уже прогретый кеш. Чтобы проверить результат, откройте инструменты разработчика рабочей области, выберите Console и отфильтруйте [KodikChat][PromptCache]. После каждого завершённого ответа журнал показывает кешированные/общие токены промпта, процент попадания в кеш, записанные в кеш токены и некешированные токены промпта; содержимое промпта в журнал не попадает.
Вне сжатия Kodik фиксирует системный промпт в начале эпохи кеша и сохраняет завершённый префикс провайдера неизменным. Если меняется режим, правило, память, навык, определение MCP или другой источник инструкций, Kodik добавляет одно хронологическое системное обновление вместо переписывания старого префикса. Зафиксированная база и принятые обновления переживают перезагрузку. После успешного сжатия начинается новая эпоха: актуальное состояние инструкций становится новой базой, а устаревшие обновления удаляются. Запрос с точным префиксом сохраняет ту же детерминированную схему инструментов, отключая их выполнение через tool_choice=none; если схема больше не совпадает, Kodik использует безопасно пересобранный промпт и не считает префикс точным.
Ручное резюмирование: /compact
Заголовок раздела «Ручное резюмирование: /compact»Чтобы сжать разговор в любой момент, используйте /compact. Команда немедленно запускает тот же процесс, не ожидая порога токенов, и сохраняет недавний хвост в пределах токенового бюджета дословно. Подробности — в обзоре slash-команд.
Контрольные точки и восстановление
Заголовок раздела «Контрольные точки и восстановление»Kodik сохраняет контрольные точки в ходе работы. Если резюмирование произошло, вы можете откатиться к состоянию до него через контрольную точку. Точные исключённые сообщения провайдера также остаются привязаны к активной сжатой сессии и доступны для ограниченного чтения до удаления чата.
