Skip to content

Лучшие практики DCP

Что вы сможете делать после изучения

  • Понимать компромисс между Prompt Caching и экономией токенов
  • Выбирать подходящие стратегии защиты (защита ходов, защищённые инструменты, режимы файлов)
  • Использовать команды для ручной оптимизации использования токенов
  • Настраивать конфигурацию DCP в соответствии с требованиями проекта

Компромисс Prompt Caching

Понимание компромисса между кэшированием и обрезкой

При обрезке вывода инструментов DCP изменяет содержимое сообщений, что приводит к аннулированию Prompt Caching на основе точного префиксного совпадения с этого момента.

Сравнение тестовых данных:

СценарийПопадание в кэшЭкономия токеновКомплексный эффект
Без DCP~85%0%Базовый уровень
DCP включён~65%20-40%✅ Положительный эффект

Когда следует игнорировать потери кэша

Рекомендуемые сценарии использования DCP:

  • Длинные диалоги (более 20 ходов): значительное раздувание контекста, экономия токенов намного превышает потери кэша
  • Сервисы с оплатой по запросу: GitHub Copilot, Google Antigravity и другие, где потери кэша не имеют негативного влияния
  • Интенсивный вызов инструментов: частое чтение файлов, выполнение поиска и другие сценарии
  • Задачи рефакторинга кода: частое повторное чтение одних и тех же файлов

Сценарии, когда может потребоваться отключение DCP:

  • ⚠️ Короткие диалоги (< 10 ходов): ограниченная выгода от обрезки, потери кэша могут быть более заметны
  • ⚠️ Задачи, чувствительные к кэшу: сценарии, требующие максимального попадания в кэш (например, пакетная обработка)

Гибкая конфигурация

Вы можете динамически настраивать конфигурацию DCP в соответствии с требованиями проекта или даже отключать определённые стратегии на уровне конфигурации проекта.


Лучшие практики приоритета конфигурации

Правильное использование многоуровневой конфигурации

Конфигурация DCP объединяется в следующем порядке приоритета:

Значения по умолчанию < Глобальная конфигурация < Пользовательский каталог конфигурации < Конфигурация проекта

Описание каталога конфигурации

"Пользовательский каталог конфигурации" — это каталог, указанный через переменную окружения $OPENCODE_CONFIG_DIR. В этом каталоге необходимо разместить файл dcp.jsonc или dcp.json.

Рекомендуемые стратегии конфигурации

СценарийРекомендуемое место конфигурацииКлючевые аспекты примера конфигурации
Личная среда разработкиГлобальная конфигурацияВключить автоматические стратегии, отключить отладочные логи
Командный проектКонфигурация проектаЗащищённые файлы, специфичные для проекта, переключатели стратегий
CI/CD средаПользовательский каталог конфигурацииОтключить уведомления, включить отладочные логи
Временная отладкаКонфигурация проектаВключить debug, подробный режим уведомлений

Пример: переопределение на уровне проекта

jsonc
// ~/.config/opencode/dcp.jsonc (глобальная конфигурация)
{
    "enabled": true,
    "strategies": {
        "deduplication": {
            "enabled": true
        }
    }
}
jsonc
// .opencode/dcp.jsonc (конфигурация проекта)
{
    "strategies": {
        // Переопределение на уровне проекта: отключить дедупликацию (например, проект требует сохранения исторического контекста)
        "deduplication": {
            "enabled": false
        }
    }
}

Перезапуск после изменения конфигурации

После изменения конфигурации необходимо перезапустить OpenCode для применения изменений.


Выбор стратегий защиты

Сценарии использования защиты ходов

Защита ходов (Turn Protection) предотвращает обрезку инструментов в течение указанного количества ходов, предоставляя AI достаточно времени для ссылки на недавний контент.

Рекомендуемые настройки:

СценарийРекомендуемое значениеПричина
Решение сложных проблем4-6 ходовAI требуется несколько итераций для анализа вывода инструментов
Рефакторинг кода2-3 ходаБыстрое переключение контекста, слишком длительный период защиты снижает эффективность
Быстрая разработка прототипов2-4 ходаБаланс между защитой и экономией токенов
Конфигурация по умолчанию4 ходаПротестированная точка баланса

Когда включать защиту ходов:

jsonc
{
    "turnProtection": {
        "enabled": true,   // Включить защиту ходов
        "turns": 6        // Защита на 6 ходов (подходит для сложных задач)
    }
}

Когда не рекомендуется включать:

  • Простые сценарии вопросов и ответов (AI отвечает напрямую, не требуется инструмент)
  • Высокочастотные короткие диалоги (слишком длительный период защиты приводит к несвоевременной обрезке)

Конфигурация защищённых инструментов

Защищённые инструменты по умолчанию (не требуют дополнительной конфигурации):

  • task, write, edit, batch, discard, extract, todowrite, todoread, plan_enter, plan_exit

Примечание о значениях по умолчанию в Schema

Если вы используете функцию автодополнения IDE, список защищённых инструментов по умолчанию в файле Schema (dcp.schema.json) может отображаться не полностью. Фактически используйте DEFAULT_PROTECTED_TOOLS, определённые в исходном коде, которые включают все 10 инструментов.

Когда добавлять дополнительные защищённые инструменты:

СценарийПример конфигурацииПричина
Критически важные бизнес-инструментыprotectedTools: ["critical_tool"]Обеспечить постоянную видимость критических операций
Инструменты, требующие исторического контекстаprotectedTools: ["analyze_history"]Сохранить полную историю для анализа
Пользовательские инструменты задачprotectedTools: ["custom_task"]Защитить рабочий процесс пользовательских задач
jsonc
{
    "strategies": {
        "deduplication": {
            "enabled": true,
            "protectedTools": ["custom_analyze"]  // Дополнительная защита определённых инструментов
        }
    },
    "tools": {
        "settings": {
            "protectedTools": ["important_check"]  // Дополнительная защита инструментов LLM
        }
    }
}

Использование режимов защищённых файлов

Рекомендуемые режимы защиты:

Тип файлаРекомендуемый режимПричина защиты
Файлы конфигурации"*.env", ".env*"Предотвратить потерю конфиденциальной информации при обрезке
Конфигурация базы данных"**/config/database/*"Обеспечить постоянную доступность конфигурации подключения к базе данных
Файлы ключей"**/secrets/**"Защитить все ключи и сертификаты
Ключевая бизнес-логика"src/core/*"Предотвратить потерю контекста критического кода
jsonc
{
    "protectedFilePatterns": [
        "*.env",                // Защитить все файлы переменных окружения
        ".env.*",              // Включая .env.local и т.д.
        "**/secrets/**",       // Защитить каталог secrets
        "**/config/*.json",    // Защитить файлы конфигурации
        "src/auth/**"          // Защитить код, связанный с аутентификацией
    ]
}

Правила сопоставления шаблонов

protectedFilePatterns соответствует полю filePath в параметрах инструментов (например, инструменты read, write, edit).


Выбор автоматических стратегий

Стратегия дедупликации (Deduplication)

Включена по умолчанию, подходит для большинства сценариев.

Применимые сценарии:

  • Повторное чтение одного и того же файла (например, рецензирование кода, многораундовая отладка)
  • Выполнение одних и тех же команд поиска или анализа

Когда не рекомендуется включать:

  • Необходимость сохранения точного вывода каждого вызова (например, мониторинг производительности)
  • Вывод инструмента содержит временные метки или случайные значения (каждый вызов отличается)

Стратегия перезаписи (Supersede Writes)

Отключена по умолчанию, требует решения на основе требований проекта.

Рекомендуемые сценарии включения:

  • Немедленное чтение для проверки после модификации файла (рефакторинг, пакетная обработка)
  • Вывод операции записи очень велик, чтение перекрывает его ценность
jsonc
{
    "strategies": {
        "supersedeWrites": {
            "enabled": true  // Включить стратегию перезаписи
        }
    }
}

Когда не рекомендуется включать:

  • Необходимость отслеживания истории изменений файлов (аудит кода)
  • Операция записи содержит важные метаданные (например, причины изменений)

Стратегия очистки ошибок (Purge Errors)

Включена по умолчанию, рекомендуется поддерживать включённой.

Рекомендации по конфигурации:

СценарийРекомендуемое значениеПричина
Конфигурация по умолчанию4 ходаПротестированная точка баланса
Сценарии быстрого отказа2 ходаОчистить ошибочный ввод как можно раньше, уменьшить загрязнение контекста
Необходимость истории ошибок6-8 ходовСохранить больше информации об ошибках для отладки
jsonc
{
    "strategies": {
        "purgeErrors": {
            "enabled": true,
            "turns": 2  // Сценарий быстрого отказа: очистка ошибочного ввода через 2 хода
        }
    }
}

Лучшее использование инструментов на основе LLM

Оптимизация функции напоминаний

DCP по умолчанию напоминает AI об использовании инструментов обрезки после каждых 10 вызовов инструментов.

Рекомендуемая конфигурация:

СценарийnudgeFrequencyОписание эффекта
Интенсивный вызов инструментов8-12Своевременное напоминание AI об очистке
Низкочастотный вызов инструментов15-20Уменьшить помехи от напоминаний
Отключение напоминанийInfinityПолностью полагаться на автономное суждение AI
jsonc
{
    "tools": {
        "settings": {
            "nudgeEnabled": true,
            "nudgeFrequency": 15  // Низкочастотный сценарий: напоминание после 15 вызовов инструментов
        }
    }
}

Использование инструмента Extract

Когда использовать Extract:

  • Вывод инструмента содержит ключевые находки или данные, требующие сохранения резюме
  • Исходный вывод очень велик, но извлечённой информации достаточно для последующих рассуждений

Рекомендации по конфигурации:

jsonc
{
    "tools": {
        "extract": {
            "enabled": true,
            "showDistillation": false  // По умолчанию не отображать извлечённое содержимое (уменьшить помехи)
        }
    }
}

Когда включать showDistillation:

  • Необходимость просмотра, какую ключевую информацию извлёк AI
  • Отладка или проверка поведения инструмента Extract

Использование инструмента Discard

Когда использовать Discard:

  • Вывод инструмента является только временным состоянием или шумом
  • После завершения задачи вывод инструмента не требуется сохранять

Рекомендации по конфигурации:

jsonc
{
    "tools": {
        "discard": {
            "enabled": true
        }
    }
}

Советы по использованию команд

Когда использовать /dcp context

Рекомендуемые сценарии:

  • Подозрение на аномальное использование токенов
  • Необходимость понимания распределения контекста текущего сеанса
  • Оценка эффекта обрезки DCP

Лучшие практики:

  • Проверить один раз в середине длинного диалога, чтобы понять состав контекста
  • Проверить в конце диалога, чтобы просмотреть общее потребление токенов

Когда использовать /dcp stats

Рекомендуемые сценарии:

  • Необходимость понимания долгосрочного эффекта экономии токенов
  • Оценка общей ценности DCP
  • Сравнение эффекта экономии при разных конфигурациях

Лучшие практики:

  • Просматривать накопленную статистику раз в неделю
  • Сравнивать эффект до и после оптимизации конфигурации

Когда использовать /dcp sweep

Рекомендуемые сценарии:

  • Контекст слишком велик, что приводит к замедлению ответа
  • Необходимость немедленного уменьшения потребления токенов
  • Автоматические стратегии не вызвали обрезку

Советы по использованию:

КомандаНазначение
/dcp sweepОбрезать все инструменты после последнего сообщения пользователя
/dcp sweep 10Обрезать только последние 10 инструментов
/dcp sweep 5Обрезать только последние 5 инструментов

Рекомендуемый рабочий процесс:

  1. Сначала использовать /dcp context для просмотра текущего состояния
  2. На основе ситуации решить количество обрезки
  3. Использовать /dcp sweep N для выполнения обрезки
  4. Снова использовать /dcp context для подтверждения эффекта

Выбор режима уведомлений

Сравнение трёх режимов уведомлений

РежимОтображаемое содержимоеПрименимые сценарии
offНе отображать никаких уведомленийРабочая среда без необходимости помех
minimalОтображать только количество обрезки и экономию токеновНеобходимость понимания эффекта без внимания к деталям
detailedОтображать каждый обрезанный инструмент и причину (по умолчанию)Сценарии отладки или необходимости детального мониторинга

Рекомендуемая конфигурация

СценарийРекомендуемый режимПричина
Ежедневная разработкаminimalВнимание к эффекту, уменьшение помех
Отладка проблемdetailedПросмотр причин каждой операции обрезки
Демонстрация или запись демонстрацииoffИзбежать помех уведомлений в процессе демонстрации
jsonc
{
    "pruneNotification": "minimal"  // Рекомендуется для ежедневной разработки
}

Обработка сценариев субагентов

Понимание ограничений субагентов

DCP полностью отключён в сеансах субагентов.

Причины:

  • Цель субагента — вернуть краткое резюме находок
  • Обрезка DCP может помешать поведению суммирования субагента
  • Субагенты обычно выполняются быстро, раздувание контекста ограничено

Как определить, является ли сеанс сеансом субагента

  1. Включить отладочные логи:

    jsonc
    {
        "debug": true
    }
  2. Просмотреть логи: В логах будет отображаться метка isSubAgent: true

Рекомендации по оптимизации токенов для субагентов

Хотя DCP отключён в субагентах, вы всё равно можете:

  • Оптимизировать подсказки субагентов, уменьшить длину вывода
  • Ограничить диапазон вызова инструментов субагента
  • Использовать параметр max_length инструмента task для контроля вывода

Резюме урока

Область лучших практикКлючевые рекомендации
Prompt CachingВ длинных диалогах экономия токенов обычно превышает потери кэша
Приоритет конфигурацииГлобальная конфигурация для общих настроек, конфигурация проекта для специфических требований
Защита ходовСложные задачи 4-6 ходов, быстрые задачи 2-3 хода
Защищённые инструментыЗащита по умолчанию достаточна, добавлять критически важные бизнес-инструменты по требованию
Защищённые файлыЗащитить файлы конфигурации, ключей, ключевой бизнес-логики
Автоматические стратегииДедупликация и очистка ошибок включены по умолчанию, перезапись по требованию
Инструменты LLMЧастота напоминаний 10-15 раз, отображение извлечённого содержимого при отладке
Использование командРегулярная проверка контекста, обрезка по требованию
Режим уведомленийЕжедневная разработка — minimal, отладка — detailed

Приложение: Справка по исходному коду

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

Время обновления: 2026-01-23

ФункцияПуть к файлуНомера строк
Слияние конфигурацииlib/config.ts691-794
Валидация конфигурацииlib/config.ts147-375
Конфигурация по умолчаниюlib/config.ts68-134
Защита ходовlib/config.ts432-437
Защищённые инструментыlib/config.ts68-79
Режимы защищённых файловprotected-file-patterns.ts1-60
Обнаружение субагентовlib/state/utils.ts1-8
Функция напоминанийlib/config.ts438-441

Ключевые константы:

  • MAX_TOOL_CACHE_SIZE = 1000: Максимальное количество записей в кэше инструментов
  • turnProtection.turns: Защита по умолчанию на 4 хода

Ключевые функции:

  • getConfig(): Загрузка и слияние многоуровневой конфигурации
  • validateConfigTypes(): Валидация типов элементов конфигурации
  • mergeConfig(): Слияние конфигурации по приоритету
  • isSubAgentSession(): Обнаружение сеанса субагента