OpenCode插件系列: opencode-dcp
类型: Token优化插件
代码库: https://github.com/Opencode-DCP/opencode-dynamic-context-pruning NPM包:
@tarquinen/opencode-dcp星标: 2.6k+ ⭐


1. 这是什么插件?
DCP (Dynamic Context Pruning/动态上下文剪枝) 是一个通过智能管理对话上下文来自动减少token消耗的插件。核心思想是在向LLM发送请求之前,从上下文中移除不再需要的旧工具输出。 ⚠️ 重要: 原始会话历史不会改变——DCP只是在发送请求前将剪枝的内容替换为占位符。
主要组件:
-
Compress Tool — 模型用来高质量地总结旧对话的技术工具(比OpenCode的标准压缩更智能)。 -
Deduplication — 删除重复的工具调用(相同工具、相同参数),只保留最新的。 -
Purge Errors — 在一定轮次后(默认: 4轮)删除出错工具的大规模输入。
2. 有什么用?
在以下场景中使用它:
-
✅ 节省30-50%的tokens在长会话中 -
✅ 防止幻觉由过时上下文引起 -
✅ 智能控制上下文窗口大小 -
✅ 通过glob模式保护重要工具输出不被剪枝 -
✅ 手动压缩通过 /dcp compress -
✅ 监控token消耗通过 /dcp context和/dcp stats
技术特性:
-
范围模式 (默认) — 将对话的连续区域压缩为摘要 -
消息模式 (实验性) — 单独压缩单个消息 -
分层压缩 — 当新压缩与旧压缩重叠时,旧摘要会被合并到新摘要中(信息通过多层保存) -
受保护工具 — 保护特定工具输出不被压缩(默认: task,skill,todowrite,todoread,compress,batch,plan_enter,plan_exit,write,edit)
3. 怎么用?
简单安装
opencode plugin @tarquinen/opencode-dcp@latest --global
这会将插件自动安装到全局配置中。
或手动添加到 ~/.config/opencode/opencode.json:
{"plugin": ["@tarquinen/opencode-dcp@latest"]}
配置
创建 ~/.config/opencode/dcp.jsonc文件:
{"$schema": "https://raw.githubusercontent.com/Opencode-DCP/opencode-dynamic-context-pruning/master/dcp.schema.json","enabled": true,"debug": false,// 压缩设置"compress": {"mode": "range", // 或 "message" (实验性)"permission": "allow", // "allow" / "ask" / "deny""maxContextLimit": 100000, // 触发压缩的上下文上限"minContextLimit": 50000, // 提示用户的最小限制"nudgeFrequency": 5,"protectUserMessages": false,"protectedTools": [] },// 自动策略"strategies": {"deduplication": {"enabled": true,"protectedTools": [] },"purgeErrors": {"enabled": true,"turns": 4 } }}
可用的斜杠命令
|
|
|
|---|---|
/dcp |
|
/dcp context |
|
/dcp stats |
|
/dcp sweep |
|
/dcp sweep 10 |
|
/dcp compress [focus] |
|
/dcp decompress <n> |
|
/dcp recompress <n> |
|
/dcp manual [on/off] |
|
对于小型模型:
如果使用GitHub Copilot模型或本地模型,请降低限制:
{"compress": {"maxContextLimit": "80%", // 模型上下文窗口的百分比"minContextLimit": "25%","modelMaxLimits": {"openai/gpt-5.3-codex": 120000,"anthropic/claude-sonnet-4.6": "80%" } }}
4. 什么时候用?
在以下场景使用:
-
✅ 进行长会话(超过一小时的工作) -
✅ 在同一会话中读取大量文件 -
✅ 处理大型代码库如base-layer -
✅ 使用按token付费的API(Anthropic、OpenAI) -
✅ 注意到模型在长对话中”失去焦点” -
✅ 工具报错并希望删除大输入
不要使用的场景:
-
❌ 处理简单短任务 -
❌ 使用按请求统一收费的提供商(如GitHub Copilot per-request) -
❌ 使用统一定价的提供商(如Cerebras) -
❌ 短会话中开销差异不大
⚠️ 重要注意事项
缓存的权衡:
-
没有DCP: 缓存命中率约 90% -
有DCP: 缓存命中率约 85% 这意味着会损失一些缓存读取,但在长会话中会获得更大的token节省。 
手动模式:
如果想100%控制剪枝,启用 manualMode:
{"manualMode": {"enabled": true,"automaticStrategies": true// 只让dedup和purgeErrors运行 }}
许可证: AGPL-3.0
🔗 有用链接
-
README: https://github.com/Opencode-DCP/opencode-dynamic-context-pruning -
NPM: https://www.npmjs.com/package/@tarquinen/opencode-dcp -
Schema: https://raw.githubusercontent.com/Opencode-DCP/opencode-dynamic-context-pruning/master/dcp.schema.json
夜雨聆风