Распространённые проблемы и устранение неполадок
Проблемы с конфигурацией
Почему моя конфигурация не применяется?
Конфигурационные файлы DCP объединяются по приоритету: Значения по умолчанию < Глобальная < Переменные окружения < Проект. Конфигурация уровня проекта имеет наивысший приоритет.
Шаги проверки:
Подтвердите расположение конфигурационного файла:
bash# macOS/Linux ls -la ~/.config/opencode/dcp.jsonc ls -la ~/.config/opencode/dcp.json # Или в корне проекта ls -la .opencode/dcp.jsoncПросмотрите действующую конфигурацию: После включения режима отладки DCP выведет информацию о конфигурации в файл журнала при первой загрузке конфигурации.
Перезапустите OpenCode: После изменения конфигурации необходимо перезапустить OpenCode для применения изменений.
Приоритет конфигурации
Если у вас существует несколько конфигурационных файлов, конфигурация уровня проекта (.opencode/dcp.jsonc) переопределит глобальную конфигурацию.
Что делать при ошибке в конфигурационном файле?
DCP отобразит предупреждение Toast при обнаружении ошибки конфигурации (отображается через 7 секунд) и откатится к использованию значений по умолчанию.
Распространённые типы ошибок:
| Тип ошибки | Описание проблемы | Решение |
|---|---|---|
| Ошибка типа | pruneNotification должен быть `"off" | "minimal" |
| Ошибка массива | protectedFilePatterns должен быть массивом строк | Убедитесь, что используется формат ["pattern1", "pattern2"] |
| Неизвестный ключ | Конфигурационный файл содержит неподдерживаемые ключи | Удалите или закомментируйте неизвестные ключи |
Включите журналы отладки для просмотра подробных ошибок:
// ~/.config/opencode/dcp.jsonc
{
"debug": true // Включить журналы отладки
}Расположение файла журнала: ~/.config/opencode/logs/dcp/daily/YYYY-MM-DD.log
Проблемы с функциональностью
Почему использование токенов не уменьшается?
DCP обрезает только содержимое вызовов инструментов. Если в вашем диалоге не используются инструменты или используются только защищённые инструменты, токены не будут сокращаться.
Возможные причины:
Защищённые инструменты Защищённые по умолчанию инструменты включают:
task,write,edit,batch,discard,extract,todowrite,todoread,plan_enter,plan_exitЗащита хода не истекла Если включена
turnProtection, инструменты не будут обрезаться в течение периода защиты.В диалоге нет повторяющегося или обрезаемого содержимого Автоматическая стратегия DCP нацелена только на:
- Повторяющиеся вызовы инструментов (дедупликация)
- Операции записи, перезаписанные последующими чтениями (перезапись записей)
- Устаревший ошибочный ввод инструментов (очистка ошибок)
Метод проверки:
# Введите в OpenCode
/dcp contextПросмотрите поле Pruned в выводе, чтобы узнать количество обрезанных инструментов и сэкономленные токены.
Ручная обрезка
Если автоматическая стратегия не сработала, вы можете использовать /dcp sweep для ручной обрезки инструментов.
Почему сеансы субагентов не обрезаются?
Это ожидаемое поведение. DCP полностью отключён в сеансах субагентов.
Причина: Цель субагента — вернуть краткое резюме находок, а не оптимизировать использование токенов. Обрезка DCP может помешать поведению суммирования субагента.
Как определить, является ли сеанс сеансом субагента:
- Проверьте поле
parentIDв метаданных сеанса - После включения журналов отладки вы увидите метку
isSubAgent: true
Отладка и журналы
Как включить журналы отладки?
// ~/.config/opencode/dcp.jsonc
{
"debug": true
}Расположение файлов журналов:
- Ежедневные журналы:
~/.config/opencode/logs/dcp/daily/YYYY-MM-DD.log - Снимки контекста:
~/.config/opencode/logs/dcp/context/{sessionId}/{timestamp}.json
Влияние на производительность
Журналы отладки записываются в файлы на диске, что может повлиять на производительность. Рекомендуется отключать в производственной среде.
Как просмотреть распределение токенов текущего сеанса?
# Введите в 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Как просмотреть накопленную статистику обрезки?
# Введите в OpenCode
/dcp statsЭто отобразит накопленное количество обрезанных токенов для всех исторических сеансов.
Вопросы о Prompt Caching
Влияет ли DCP на Prompt Caching?
Да, но после взвешивания обычно получается положительный эффект.
Провайдеры LLM (такие как Anthropic, OpenAI) кэшируют промпты на основе точного префиксного совпадения. Когда DCP обрезает вывод инструментов, содержимое сообщений изменяется, и кэш становится недействительным с этой точки.
Результаты реальных тестов:
- Без DCP: попадание в кэш около 85%
- С включённым DCP: попадание в кэш около 65%
Но экономия токенов обычно превышает потери кэша, особенно в длинных диалогах.
Оптимальные сценарии использования:
- При использовании сервисов с оплатой по запросу (таких как GitHub Copilot, Google Antigravity), потери кэша не имеют негативного влияния
Расширенная конфигурация
Как защитить определённые файлы от обрезки?
Используйте protectedFilePatterns для настройки glob-шаблонов:
{
"protectedFilePatterns": [
"src/config/*", // Защитить каталог config
"*.env", // Защитить все файлы .env
"**/secrets/**" // Защитить каталог secrets
]
}Шаблоны сопоставляются с полем filePath в параметрах инструментов (таких как инструменты read, write, edit).
Как настроить защищённые инструменты?
Каждая стратегия и конфигурация инструмента имеет массив protectedTools:
{
"strategies": {
"deduplication": {
"enabled": true,
"protectedTools": ["custom_tool"] // Дополнительно защищённые инструменты
}
},
"tools": {
"settings": {
"protectedTools": ["another_tool"]
}
},
"commands": {
"protectedTools": ["sweep_protected"]
}
}Эти конфигурации добавляются к списку защищённых по умолчанию инструментов.
Распространённые сценарии ошибок
Ошибка: DCP не загружен
Возможные причины:
- Плагин не зарегистрирован в
opencode.jsonc - Установка плагина не удалась
- Версия OpenCode несовместима
Решение:
- Проверьте, содержит ли
opencode.jsonc"plugin": ["@tarquinen/opencode-dcp@latest"] - Перезапустите OpenCode
- Просмотрите файлы журналов для подтверждения статуса загрузки
Ошибка: Недопустимый JSON в конфигурационном файле
Возможные причины:
- Отсутствует запятая
- Лишняя запятая
- Строки не используют двойные кавычки
- Неправильный формат комментариев JSONC
Решение: Используйте редактор с поддержкой JSONC (например, VS Code) для редактирования или используйте онлайн-инструмент проверки JSON для проверки синтаксиса.
Ошибка: Команда /dcp не отвечает
Возможные причины:
commands.enabledустановлен вfalse- Плагин не загружен правильно
Решение:
- Проверьте, установлен ли
"commands.enabled"вtrueв конфигурационном файле - Подтвердите, что плагин загружен (просмотрите журналы)
Получение помощи
Если вышеуказанные методы не решают проблему:
- Включите журналы отладки и воспроизведите проблему
- Просмотрите снимки контекста:
~/.config/opencode/logs/dcp/context/{sessionId}/ - Создайте Issue на GitHub:
- Приложите файлы журналов (удалите конфиденциальную информацию)
- Опишите шаги воспроизведения
- Укажите ожидаемое и фактическое поведение
Анонс следующего урока
В следующем уроке мы изучим Лучшие практики DCP.
Вы узнаете:
- Компромисс между Prompt Caching и экономией токенов
- Правила приоритета конфигурации и стратегии использования
- Выбор и настройка механизмов защиты
- Советы по использованию команд и рекомендации по оптимизации
Приложение: Справка по исходному коду
Нажмите, чтобы развернуть и просмотреть расположение исходного кода
Время обновления: 2026-01-23
| Функция | Путь к файлу | Номера строк |
|---|---|---|
| Валидация конфигурации | lib/config.ts | 147-375 |
| Обработка ошибок конфигурации | lib/config.ts | 391-421 |
| Система журналирования | lib/logger.ts | 6-109 |
| Снимки контекста | lib/logger.ts | 196-210 |
| Обнаружение субагентов | lib/state/utils.ts | 1-8 |
| Защищённые инструменты | lib/config.ts | 68-79 |
Ключевые функции:
validateConfigTypes(): Валидация типов элементов конфигурацииgetInvalidConfigKeys(): Обнаружение неизвестных ключей в конфигурационном файлеLogger.saveContext(): Сохранение снимка контекста для отладкиisSubAgentSession(): Обнаружение сеанса субагента