Асинхронное ротационное сжатие контекста — бесшовный разговор с локальным агентом
Саммари
Статья предлагает способ пережить сжатие контекста в долгом диалоге с агентом почти незаметно: не пересобирать сессию заново, а ротировать KV-кеш — суммаризацию префикса считать заранее и асинхронно, хвост беседы просто сдвигать в начало с переносом латентов, а саму подмену делать только в момент, когда контекст заполнен. Автор опирается на наблюдение, что фрагмент кеша достаточен для продолжения мысли, реализует схему на llama.cpp в двух раннерах (llama-ring, strata-ring) и отчитывается, что агент «будто бы ничего не заметил» — правда, без количественных метрик.
Из этого следует, что «память агента» может жить не в тексте диалога, а в самом кеше: если ротировать латенты аккуратно, длинный разговор превращается в непрерывную сессию вместо серии перезапусков с пересказом истории.
На практике для долгоживущих агентов и клиентских сервисов: паттерн «рубикон → асинхронная суммаризация в фоне → подмена только при заполнении» переносится на любой рантайм с управляемым кешем и снимает характерный эффект «агент замолчал и забыл шутку».
Важный нюанс: половина сложности — не в идее, а в согласовании позиционных механизмов (RoPE, линейное внимание, QSA): дешёвый сдвиг без переноса состояния превращается в тихую деградацию, а не в баг.
Ограничение: автор сам честен — «сложных задач не гонял», количественных метрик нет, проверка на десятках циклов бытового диалога; до внедрения в прод нужен свой замер на реальных сценариях.