Skip to content

Распространённые проблемы и устранение неполадок ​

Проблемы с конфигурацией ​

Почему моя конфигурация не применяется? ​

Конфигурационные файлы DCP объединяются по приоритету: Значения по умолчанию < Глобальная < Переменные окружения < Проект. Конфигурация уровня проекта имеет наивысший приоритет.

Шаги проверки:

  1. Подтвердите расположение конфигурационного файла:

    bash
    # macOS/Linux
    ls -la ~/.config/opencode/dcp.jsonc
    ls -la ~/.config/opencode/dcp.json
    
    # Или в корне проекта
    ls -la .opencode/dcp.jsonc
  2. Просмотрите действующую конфигурацию: После включения режима отладки DCP выведет информацию о конфигурации в файл журнала при первой загрузке конфигурации.

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

Приоритет конфигурации

Если у вас существует несколько конфигурационных файлов, конфигурация уровня проекта (.opencode/dcp.jsonc) переопределит глобальную конфигурацию.

Что делать при ошибке в конфигурационном файле? ​

DCP отобразит предупреждение Toast при обнаружении ошибки конфигурации (отображается через 7 секунд) и откатится к использованию значений по умолчанию.

Распространённые типы ошибок:

Тип ошибкиОписание проблемыРешение
Ошибка типаpruneNotification должен быть `"off""minimal"
Ошибка массиваprotectedFilePatterns должен быть массивом строкУбедитесь, что используется формат ["pattern1", "pattern2"]
Неизвестный ключКонфигурационный файл содержит неподдерживаемые ключиУдалите или закомментируйте неизвестные ключи

Включите журналы отладки для просмотра подробных ошибок:

jsonc
// ~/.config/opencode/dcp.jsonc
{
    "debug": true  // Включить журналы отладки
}

Расположение файла журнала: ~/.config/opencode/logs/dcp/daily/YYYY-MM-DD.log


Проблемы с функциональностью ​

Почему использование токенов не уменьшается? ​

DCP обрезает только содержимое вызовов инструментов. Если в вашем диалоге не используются инструменты или используются только защищённые инструменты, токены не будут сокращаться.

Возможные причины:

  1. Защищённые инструменты Защищённые по умолчанию инструменты включают: task, write, edit, batch, discard, extract, todowrite, todoread, plan_enter, plan_exit

  2. Защита хода не истекла Если включена turnProtection, инструменты не будут обрезаться в течение периода защиты.

  3. В диалоге нет повторяющегося или обрезаемого содержимого Автоматическая стратегия DCP нацелена только на:

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

Метод проверки:

bash
# Введите в OpenCode
/dcp context

Просмотрите поле Pruned в выводе, чтобы узнать количество обрезанных инструментов и сэкономленные токены.

Ручная обрезка

Если автоматическая стратегия не сработала, вы можете использовать /dcp sweep для ручной обрезки инструментов.

Почему сеансы субагентов не обрезаются? ​

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

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

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

  • Проверьте поле parentID в метаданных сеанса
  • После включения журналов отладки вы увидите метку isSubAgent: true

Отладка и журналы ​

Как включить журналы отладки? ​

jsonc
// ~/.config/opencode/dcp.jsonc
{
    "debug": true
}

Расположение файлов журналов:

  • Ежедневные журналы: ~/.config/opencode/logs/dcp/daily/YYYY-MM-DD.log
  • Снимки контекста: ~/.config/opencode/logs/dcp/context/{sessionId}/{timestamp}.json

Влияние на производительность

Журналы отладки записываются в файлы на диске, что может повлиять на производительность. Рекомендуется отключать в производственной среде.

Как просмотреть распределение токенов текущего сеанса? ​

bash
# Введите в OpenCode
/dcp context

Пример вывода:

╭───────────────────────────────────────────────────────────╮
│                  DCP Context Analysis                     │
╰───────────────────────────────────────────────────────────╯

Session Context Breakdown:
────────────────────────────────────────────────────────────

System         15.2% │████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│  25.1K tokens
User            5.1% │████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│   8.4K tokens
Assistant       35.8% │██████████████████████████████████████▒▒▒▒▒▒▒│  59.2K tokens
Tools (45)      43.9% │████████████████████████████████████████████████│  72.6K tokens

────────────────────────────────────────────────────────────

Summary:
  Pruned:          12 tools (~15.2K tokens)
  Current context: ~165.3K tokens
  Without DCP:     ~180.5K tokens

Как просмотреть накопленную статистику обрезки? ​

bash
# Введите в OpenCode
/dcp stats

Это отобразит накопленное количество обрезанных токенов для всех исторических сеансов.


Вопросы о Prompt Caching ​

Влияет ли DCP на Prompt Caching? ​

Да, но после взвешивания обычно получается положительный эффект.

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

Результаты реальных тестов:

  • Без DCP: попадание в кэш около 85%
  • С включённым DCP: попадание в кэш около 65%

Но экономия токенов обычно превышает потери кэша, особенно в длинных диалогах.

Оптимальные сценарии использования:

  • При использовании сервисов с оплатой по запросу (таких как GitHub Copilot, Google Antigravity), потери кэша не имеют негативного влияния

Расширенная конфигурация ​

Как защитить определённые файлы от обрезки? ​

Используйте protectedFilePatterns для настройки glob-шаблонов:

jsonc
{
    "protectedFilePatterns": [
        "src/config/*",     // Защитить каталог config
        "*.env",           // Защитить все файлы .env
        "**/secrets/**"    // Защитить каталог secrets
    ]
}

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

Как настроить защищённые инструменты? ​

Каждая стратегия и конфигурация инструмента имеет массив protectedTools:

jsonc
{
    "strategies": {
        "deduplication": {
            "enabled": true,
            "protectedTools": ["custom_tool"]  // Дополнительно защищённые инструменты
        }
    },
    "tools": {
        "settings": {
            "protectedTools": ["another_tool"]
        }
    },
    "commands": {
        "protectedTools": ["sweep_protected"]
    }
}

Эти конфигурации добавляются к списку защищённых по умолчанию инструментов.


Распространённые сценарии ошибок ​

Ошибка: DCP не загружен ​

Возможные причины:

  1. Плагин не зарегистрирован в opencode.jsonc
  2. Установка плагина не удалась
  3. Версия OpenCode несовместима

Решение:

  1. Проверьте, содержит ли opencode.jsonc "plugin": ["@tarquinen/opencode-dcp@latest"]
  2. Перезапустите OpenCode
  3. Просмотрите файлы журналов для подтверждения статуса загрузки

Ошибка: Недопустимый JSON в конфигурационном файле ​

Возможные причины:

  • Отсутствует запятая
  • Лишняя запятая
  • Строки не используют двойные кавычки
  • Неправильный формат комментариев JSONC

Решение: Используйте редактор с поддержкой JSONC (например, VS Code) для редактирования или используйте онлайн-инструмент проверки JSON для проверки синтаксиса.

Ошибка: Команда /dcp не отвечает ​

Возможные причины:

  • commands.enabled установлен в false
  • Плагин не загружен правильно

Решение:

  1. Проверьте, установлен ли "commands.enabled" в true в конфигурационном файле
  2. Подтвердите, что плагин загружен (просмотрите журналы)

Получение помощи ​

Если вышеуказанные методы не решают проблему:

  1. Включите журналы отладки и воспроизведите проблему
  2. Просмотрите снимки контекста: ~/.config/opencode/logs/dcp/context/{sessionId}/
  3. Создайте Issue на GitHub:
    • Приложите файлы журналов (удалите конфиденциальную информацию)
    • Опишите шаги воспроизведения
    • Укажите ожидаемое и фактическое поведение

Анонс следующего урока ​

В следующем уроке мы изучим Лучшие практики DCP.

Вы узнаете:

  • Компромисс между Prompt Caching и экономией токенов
  • Правила приоритета конфигурации и стратегии использования
  • Выбор и настройка механизмов защиты
  • Советы по использованию команд и рекомендации по оптимизации

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

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

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

ФункцияПуть к файлуНомера строк
Валидация конфигурацииlib/config.ts147-375
Обработка ошибок конфигурацииlib/config.ts391-421
Система журналированияlib/logger.ts6-109
Снимки контекстаlib/logger.ts196-210
Обнаружение субагентовlib/state/utils.ts1-8
Защищённые инструментыlib/config.ts68-79

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

  • validateConfigTypes(): Валидация типов элементов конфигурации
  • getInvalidConfigKeys(): Обнаружение неизвестных ключей в конфигурационном файле
  • Logger.saveContext(): Сохранение снимка контекста для отладки
  • isSubAgentSession(): Обнаружение сеанса субагента