← На главную

Компакция спасает кодинг-агентов от лимита контекста

13.08.2026 17:57 · hackernews

Длинная сессия в кодинг-агенте вроде Pi, Claude Code или Codex рано или поздно упирается в compaction — сжатие контекста. У LLM ограниченное контекстное окно: transformer architecture ставит потолок на входные данные. В каждый запрос агенту попадают system prompt, загруженные файлы вроде AGENTS.md, описания инструментов и вся история диалога. Каждый ход добавляет сообщения и результаты tool calls. Когда история превышает лимит, модель возвращает ошибку вроде Request exceeds the maximum size.

Тут два варианта. Можно начать новую пустую сессию без накопленного контекста — но тогда теряются прошлые решения и незакрытая работа. Иногда это нормально: качество ответов LLM падает по мере роста контекста. А можно сделать компактное представление истории. Это и есть compaction. В теории его можно реализовать детерминированной функцией, но на практике используют отдельный LLM-запрос, который заменяет часть истории выжимкой и освобождает место.

В Pi compaction включается автоматически, когда контекст приближается к лимиту, или вручную командой /compact. Pi проверяет auto-compaction после конца хода, и до этого каждый запрос расширяет текущий prompt, переиспользуя кешированный префикс. Если во время хода Pi ловит ошибку переполнения, он может сжать контекст прямо в середине хода. При сжатии Pi оставляет нетронутыми несколько последних сообщений. Их количество зависит от настраиваемого token budget: дефолт 20 000 токенов, это примерно 5–20 ходов. Более ранние сообщения Pi извлекает, сериализует и отправляет в сводку.

Промпт для compaction у Pi специальный. Вместо «экспертного ассистента по коду» модель получает роль context summarization assistant, а user message просит structured summary of this conversation branch for context when returning later с разделами goal, progress и key decisions. Это отдельный запрос без старой истории, поэтому для него можно взять другую LLM без лишних расходов. Идеальный результат — как передача смены: остаётся только то, что важно для следующего запроса. Pi добавляет сводку в сессию как запись, и диалог продолжается.

Pi хранит сводку как plain text, поэтому сжатый контекст читаем и переносим: можно сменить модель и продолжить. Но compaction ломает prompt caching. Кеш требует точного совпадения префикса: оставшиеся сообщения содержат те же токены, но теперь идут после другого префикса, так что старый кеш не подходит. После compaction кеширование снова начнёт работать. Pi расширяемый: можно попросить его создать extension с собственным compaction-промптом и заменить механизм.

Читать оригинал →