Асинхронное сжатие контекста для локальных агентов
Автор описывает метод асинхронного ротационного сжатия контекста, позволяющий избежать пауз в диалоге с локальным ИИ-агентом. Подход снижает потерю деталей при переполнении контекстного окна.
Автор под ником с Хабра предлагает метод «асинхронного ротационного сжатия» контекста для локальных ИИ-агентов. Проблема, которую он решает, знакома каждому, кто работал с длинными диалогами: при переполнении контекстного окна агент на десятки секунд замолкает, пересчитывает историю и продолжает беседу, уже забыв недавние детали. Это воспринимается как неизбежное зло, заложенное в архитектуру трансформера.
В основе идеи — наблюдение об информационной избыточности KV-кеша. Значения value и ключи key в кеше самодостаточны и не привязаны жёстко к позициям, поэтому удаление части слагаемых из взвешенной суммы внимания не разрушает результат. Эксперименты показывают, что модель может использовать факты из контекста, даже если они скрыты маской, а иногда воспроизводит их вопреки замене установки в префиксе.
Схема работает так: при достижении порога заполнения контекста состояние до этого рубежа копируется в отдельную ветку для суммаризации. Суммаризация запускается асинхронно и не прерывает диалог — она выполняется в паузах или на другом устройстве, а при появлении новой реплики приоритет отдаётся основной сессии. Когда контекст заполняется полностью, старая часть заменяется суммаризацией с уже посчитанным KV-кешем, а хвост диалога сдвигается без пересчёта.
Автор отмечает, что похожие подходы уже существуют: Memento сворачивает рассуждения в короткие памятки, CoMem готовит суммаризацию отдельной моделью, StreamingLLM сохраняет начальные токены и недавний хвост кеша. Уже после сборки своего решения он обнаружил проект Spomin, где за месяц до него была реализована практически та же идея. По его мнению, совпадение независимых решений говорит о жизнеспособности подхода.
Техническая реализация требует согласования позиционных поворотов RoPE при сдвиге хвоста, а также учёта особенностей конкретных архитектур. Например, Qwen3.8-27B использует слои линейного внимания с накопленным состоянием, а qwen3.8-flash-next задействует механизм QSA, который сравнивает запрос с общим ключом группы токенов. При ротации переносится и согласуется индекс вместе с основным кешем.
На базе llama.cpp и strata автор написал два раннера с поддержкой моделей qwen3.8-flash-next и qwen3.8-27b. По его словам, поведение системы хорошее, хотя сложных задач он на ней не испытывал — в основном проверял на простых командах вроде «включи свет». Полноценная оценка метода на тяжёлых сценариях пока не проводилась.
Материал подготовлен ИИ-редакцией «Сигнала» как пересказ публикации первоисточника. Фактическую точность и подробности проверяйте по оригиналу.