Dynamic Context Pruning — умное сжатие контекста для OpenCode

· 2 мин чтения
context llm tokens optimization opencode
📂 Исходный код на GitHub

Плагин динамического сжатия контекста для OpenCode — интеллектуально управляет контекстом диалога, чтобы оптимизировать расход токенов.

Dynamic Context Pruning — умное сжатие контекста для OpenCode

Dynamic Context Pruning (DCP)

Dynamic Context Pruning — это плагин для OpenCode, который автоматически снижает расход токенов, интеллектуально управляя контекстом диалога с LLM. Проект набирает популярность: почти 4 000 звёзд на GitHub.

Установка

Плагин ставится прямо из CLI:

opencode plugin @tarquinen/opencode-dcp@latest --global

Команда устанавливает пакет и добавляет его в глобальный конфиг OpenCode.

Как это работает

DCP уменьшает размер контекста через инструмент компрессии и автоматическую очистку. При этом история сессии никогда не изменяется — плагин заменяет обрезанный контент плейсхолдерами перед отправкой запроса в LLM.

Компрессия (Compress)

Compress — инструмент, который выдаётся модели. Он заменяет закрытые, устаревшие фрагменты диалога на высокоточные технические резюме.

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

Поддерживаются два режима:

  • range — сжимает непрерывные промежутки диалога в одно или несколько резюме.
  • message (экспериментальный) — сжимает отдельные «сырые» сообщения, позволяя модели управлять контекстом точнее.

В режиме range, когда новое сжатие перекрывает более раннее, раннее резюме вкладывается в новое — так информация сохраняется через слои компрессии, а не размывается. В обоих режимах защищённые выводы инструментов (субагенты, навыки) и защищённые паттерны файлов сохраняются в резюме, чтобы важная информация не терялась. Опция protectUserMessages сохраняет ваши сообщения дословно (но большие вставленные промпты тогда никогда не сожмутся).

Дедупликация

Находит повторные вызовы инструментов (тот же инструмент, те же аргументы) и оставляет только самый свежий результат. Пересчитывается при запуске Compress, так что промпт-кэш затрагивается только вместе с компрессией.

Очистка ошибок (Purge Errors)

Удаляет входные данные неуспешных вызовов инструментов после заданного числа ходов (по умолчанию 4). Сообщения об ошибках сохраняются; удаляется только потенциально большой входной контент. Также пересчитывается при использовании Compress.

Конфигурация

DCP использует собственный файл конфигурации, который ищется в порядке приоритета:

  1. Глобальный: ~/.config/opencode/dcp.jsonc (или dcp.json), создаётся автоматически при первом запуске.
  2. Пользовательская папка конфигов: $OPENCODE_CONFIG_DIR/dcp.jsonc, если задана переменная OPENCODE_CONFIG_DIR.
  3. Проектный: .opencode/dcp.jsonc в папке .opencode проекта.

Каждый уровень перекрывает предыдущий, то есть проектные настройки имеют приоритет над глобальными. После изменения конфига нужно перезапустить OpenCode.

Совет: если вы используете модели с меньшими окнами контекста (GitHub Copilot или локальные модели), снизьте compress.minContextLimit и compress.maxContextLimit в конфигурации.

Базовый пример конфига:

{
    "$schema": "https://raw.githubusercontent.com/Opencode-DCP/opencode-dynamic-context-pruning/master/dcp.schema.json",
    "enabled": true,
    "autoUpdate": true,
    "debug": false,
    "pruneNotification": "detailed",
    "pruneNotificationType": "chat",
    "manualMode": {
        "enabled": false,
        "automaticStrategies": true
    },
    "compress": {
        "mode": "range",
        "permission": "allow",
        "showCompression": false,
        "summaryBuffer": true,
        "maxContextLimit": 100000,
        "minContextLimit": 50000,
        "nudgeFrequency": 5,
        "iterationNudgeThreshold": 15,
        "nudgeForce": "soft",
        "protectUserMessages": false
    },
    "strategies": {
        "deduplication": {
            "enabled": true
        },
        "purgeErrors": {
            "enabled": true,
            "turns": 4
        }
    }
}

Поддерживаются modelMaxLimits и modelMinLimits для пер-модельных переопределений (например, "openai/gpt-5.3-codex": 120000 или "anthropic/claude-sonnet-4.6": "80%").

Команды

  • /dcp — открывает панель DCP с контекстом, статистикой и контролем ручного режима.
  • /dcp-compress [focus] — просит модель выполнить один проход компрессии. Необязательный текст focus указывает, что именно сжимать, следуя активному compress.mode.

Переопределение промптов

DCP предоставляет шесть редактируемых промптов: system, compress-range, compress-message, context-limit-nudge, turn-nudge, iteration-nudge. Функция отключена по умолчанию — включите experimental.customPrompts: true. По умолчанию они записываются в ~/.config/opencode/dcp-prompts/defaults/, переопределения — в отдельной папке с теми же именами файлов.

Защищённые инструменты

По умолчанию от сжатия защищены: task, skill, todowrite, todoread, compress, batch, plan_enter, plan_exit, write, edit. Массивы protectedTools в commands и strategies дополняют этот список. Для инструмента Compress настройка compress.protectedTools гарантирует, что выводы указанных инструментов попали в сжатое резюме.

Влияние на промпт-кэширование

LLM-провайдеры кэшируют промпты на основе точного совпадения префикса. Когда DCP обрезает контент, он меняет сообщения, что инвалидирует кэшированные префиксы с этой точки.

Компромисс: вы теряете часть кэш-хитов, но выигрываете в экономии токенов и снижении галлюцинаций от устаревшего контекста. В большинстве случаев, особенно в длинных сессиях, экономия перевешивает потери. В тестах доля кэш-хитов составила примерно 85% с DCP против 90% без.

Нет влияния для: провайдеров с оплатой за запрос (например, GitHub Copilot) и единообразным тарифом на токены (например, Cerebras).

Статус проекта

Разработка DCP замедлилась: большая часть новых функций управления контекстом переехала в Sleev — локальный прокси для Claude Code, Codex и OpenCode, который развивает идеи DCP и работает с любым харнесом. Для новых пользователей рекомендуется начать с npm i -g sleev, но DCP остаётся доступен для пользователей плагина OpenCode.

Лицензия: AGPL-3.0-or-later.

Источник: https://github.com/Opencode-DCP/opencode-dynamic-context-pruning