使用 opencode 進行開發時,隨著對話長度增加,上下文會累積大量工具調用和歷史紀錄。這些內容不僅消耗 token,還會影響 AI 代理的判斷效率。dcp (Dynamic Context Pruning) 是一個專門為 opencode 設計的動態上下文管理插件,可以自動修剪過時內容,保持對話上下文的精簡和高效。
這篇文章紀錄 dcp 的核心功能、安裝步驟和實際使用技巧。
dcp 是一個 opencode 插件,提供三種核心工具來動態管理對話上下文:
與 rtk 優化命令輸出不同,dcp 專注於管理對話歷史中的工具調用和上下文內容,兩者可以同時使用以達到最佳 token 節省效果。
在專案的 `opencode.jsonc` 或全域設定中添加插件:
{
"plugin": ["@tarquinen/opencode-dcp@latest"]
}dcp 的配置文件位於:
預設配置通常無需修改,dcp 會自動根據上下文長度觸發修剪。
dcp 內建多種自動修剪策略,無需 LLM 成本:
移除重複的工具調用。例如連續多次執行 `git status` 時,只保留最新結果。
當檔案被寫入後又讀取時,移除原始寫入內容。因為讀取內容已經包含最新狀態。
錯誤的工具調用經過設定回合數後自動移除輸入內容,避免干擾後續判斷。
dcp 提供多個 slash commands 來手動管理上下文:
/dcp context顯示當前 session 的 token 使用分析,包括:
/dcp stats顯示累積修剪統計,幫助了解 dcp 的節省效果。
/dcp sweep [n]修剪最後 n 個工具調用。例如 `/dcp sweep 10` 會移除最近 10 個工具輸出。
/dcp manual on
/dcp manual off切換自動修剪的開關。手動模式下需要明確呼叫修剪命令。
/dcp prune [focus]
/dcp distill [focus]
/dcp compress [focus]手動觸發特定的修剪工具,`focus` 參數可以指定修剪焦點。
| 特性 | DCP | RTK |
|---|---|---|
| 優化目標 | 對話上下文 | 命令輸出 |
| 作用時機 | 工具調用後 | 命令執行時 |
| 節省比例 | 30-50% | 60-90% |
| 配置需求 | 無需配置 | 需安裝 Homebrew |
| 適用場景 | 長對話 session | 頻繁 CLI 操作 |
兩者可以同時使用:rtk 優化單次命令輸出,dcp 管理長期對話歷史。
使用 dcp 會影響 Prompt Cache 的命中率:
| 場景 | 快取命中率 |
|---|---|
| 無 dcp | 85% |
| 有 dcp | 80% |
雖然快取命中率略降,但 token 節省通常超過快取損失。建議在長對話中使用 dcp,短對話可以關閉。
{
"plugins": [
"@tarquinen/opencode-dcp@latest"
],
"dcp": {
"auto_prune": true,
"preserve_errors": 3, // 保留最近 3 個錯誤
"max_context_tokens": 50000
}
}dcp 是 opencode 長對話場景下的實用工具,特別適合:
搭配 rtk 使用,可以達到最佳的 token 優化效果:rtk 處理命令輸出,dcp 管理對話歷史。
建議的使用方式:
透過這種方式,可以在保持開發效率的同時,有效管理上下文長度和 token 消耗。