Сжатие контекста
В длинных беседах история сообщений рано или поздно перерастает контекстное окно модели. Велес решает это не обрезанием старых сообщений, а сжатием контекста: старые ходы заменяются одним структурированным резюме, а системный промпт и свежие сообщения сохраняются дословно. Так беседа остаётся связной даже спустя многие часы работы. Cжатие никогда не переписывает стенограмму. Вместо этого Велес сдвигает границу уже обработанной истории и хранит накопительное резюме в метаданных сессии.Когда срабатывает
Перед каждым ответом Велес оценивает размер промпта. Как только оценка превышает долю окна, заданную полемthreshold (по умолчанию 50 %), запускается
сжатие. Порог считается от контекстного окна модели, а не от окна модели,
которая пишет резюме.
Сжатие срабатывает заранее, до переполнения окна, поэтому у модели всегда
остаётся запас на ответ.
Что происходит при сжатии
- Выбор границы. Велес выбирает точку разреза так, чтобы:
- защитить «хвост» из свежих сообщений по бюджету токенов (
targetRatio) и не меньше, чемprotectLastNпоследних сообщений; - разрез всегда попадал на сообщение пользователя и никогда не разрывал пару «вызов инструмента / результат инструмента».
- защитить «хвост» из свежих сообщений по бюджету токенов (
- Генерация резюме. Ходы до границы отправляются вспомогательной модели,
которая заполняет структурированный шаблон: активная задача, цель,
ограничения, выполненные действия, текущее состояние, решения, отвеченные и
открытые вопросы, затронутые файлы, оставшаяся работа, критический контекст.
Резюме пишется на языке беседы, а секреты заменяются на
[REDACTED]. - Накопительное обновление. Если резюме уже существует, модель обновляет его, а не пишет заново: выполненные пункты переносятся в «сделано», отвеченные вопросы — в «решённые». Так преемственность сохраняется через множество циклов сжатия.
- Сохранение. Резюме кладётся в метаданные сессии и при следующих запросах
подставляется в системный промпт с пометкой «только для справки». Сжатый
участок дополнительно выгружается в долговременную память (файлы
memory/), поэтому его можно найти инструментомmemory_search.
Защита от сбоев
- Запасное резюме. Если вспомогательная модель недоступна или вернула пустой ответ, Велес формирует детерминированное запасное резюме (последние сообщения пользователя и упомянутые файлы) и дописывает его к прежнему резюме, не теряя ранее накопленную преемственность.
- Пауза после ошибки. После сбоя генерации резюме включается пауза, чтобы Велес не тратил вызовы модели на повторные неудачные попытки каждый ход.
- Защита от «пробуксовки». Если очередной цикл почти не уменьшил размер
промпта, сжатие останавливается и предлагает начать новую беседу командой
/new.
Настройка
Все параметры находятся в блокеagents.defaults.compression — см.
Конфигурация.
| Поле | По умолчанию | Назначение |
|---|---|---|
enabled | true | Включает сжатие. При false действует прежняя посегментная выгрузка в память |
threshold | 0.5 | Доля окна, при превышении которой запускается сжатие (0.2–0.95) |
targetRatio | 0.2 | Бюджет защищённого хвоста как доля порога (0.05–0.8) |
protectLastN | 20 | Минимум последних сообщений, сохраняемых дословно |
maxSummaryTokens | 3000 | Верхний предел размера резюме |
summaryModel | "" | Модель для резюме; пусто — модель сессии |
Связь с памятью
Сжатие контекста и долговременная память дополняют друг друга. Сжатие управляет активным окном беседы, а память хранит устойчивые факты и полные стенограммы. При каждом сжатии свёрнутый участок выгружается в память, поэтому детали не пропадают: резюме удерживает связность прямо в промпте, а память позволяет поднять точные записи по запросу. Команда/new завершает беседу и очищает накопленное резюме вместе с рабочим
окном.