Перейти к содержимому

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

Сжатие освобождает место в долгой сессии: старая переписка заменяется резюме, и сессия продолжается за пределами контекстного окна модели.

Когда сессия приближается к лимиту контекста, ZubrCode резюмирует весь текущий разговор и сохраняет самую свежую часть — около 15 000 токенов по умолчанию, — чтобы точные недавние детали оставались доступными.

до [ системный промпт ][ старая переписка ....... ][ свежие 15k ][ работа ]
запрос [ системный промпт ][ старая переписка ....... ][ свежие 15k ][ инструкции резюме ]
после [ системный промпт ][ резюме старого + свежее ][ свежие 15k ][ работа ]

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

Включено по умолчанию и срабатывает около лимита контекста; оно же один раз восстанавливает работу, когда провайдер отклоняет запрос как слишком длинный. Сжатие с потерями: увеличьте keep.tokens, если важны точные недавние детали, или запросите сжатие сами до автоматического.

Сжать сессию можно в любой момент — команда /compact в TUI:

/compact

Через API:

Окно терминала
zubrcode api post /api/session/ses_example/compact --data '{}'

Ответ подтверждает приём запроса, но не ждёт резюме: о завершении сообщают события session.compaction.*. Запрос выполняется в ближайшую безопасную точку; повторные запросы сливаются с ожидающим. Ручное сжатие работает и при compaction.auto: false.

opencode.jsonc
{
"compaction": {
"auto": true,
"keep": { "tokens": 15000 },
"buffer": 20000
}
}
Поле По умолчанию Поведение
auto true сжимать около лимита контекста и один раз восстанавливаться после отказа «слишком длинный»
keep.tokens 15000 сколько свежей переписки хранить рядом с резюме: больше — детальнее, но меньше места новой работе
buffer 15% лимита, не меньше 16k сколько токенов держать свободными ниже лимита модели: больше — сжатие начинается раньше

keep.tokens и buffer — неотрицательные целые числа.

По умолчанию резюме пишет ZubrCode моделью сессии. Некоторые провайдеры умеют сжимать переписку у себя — включается настройкой settings.compaction провайдера или модели ("native" — силами провайдера, "summary" — своё резюме). Провайдер отдаёт непрозрачную зашифрованную точку, а свежие сообщения и вложения до keep.tokens остаются рядом с ней. Такая точка работает только с тем же провайдером и моделью: при смене модели сессия продолжится с исходной переписки.

Резюме структурировано так, чтобы по нему можно было продолжить работу: цель и требования, решения, сделанное и текущее, препятствия и следующие шаги, относящиеся файлы. В свежей переписке рядом длинный вывод инструментов сокращается, а данные вложений заменяются кратким описанием. После сжатия текущие версии файлов инструкций становятся базой сессии (Инструкции).

Ограничение Результат
Модель сжатие использует модель сессии — отдельной модели для него нет
История сжимать нечего, если запрос состоит в основном из фиксированных инструкций и схем инструментов
Размер слишком длинная переписка сжимается урезанной текстовой версией, старые обмены могут выпасть
Восстановление запрос, отклонённый как слишком длинный, сжимается и повторяется один раз; второй отказ возвращается ошибкой
Хранение старые сообщения остаются в сессии, даже когда больше не отправляются модели