乐于分享
好东西不私藏

OpenCode插件系列: opencode-dcp

OpenCode插件系列: opencode-dcp

类型: Token优化插件 

代码库: https://github.com/Opencode-DCP/opencode-dynamic-context-pruning NPM包: @tarquinen/opencode-dcp星标: 2.6k+ ⭐


D在使用小模型时推荐使用,大模型建议使用 @cortexkit/opencode-magic-context, 将在下篇文章中介绍。

1. 这是什么插件?

DCP (Dynamic Context Pruning/动态上下文剪枝) 是一个通过智能管理对话上下文来自动减少token消耗的插件。核心思想是在向LLM发送请求之前,从上下文中移除不再需要的旧工具输出。 ⚠️ 重要: 原始会话历史不会改变——DCP只是在发送请求前将剪枝的内容替换为占位符。

主要组件:

  1. Compress Tool — 模型用来高质量地总结旧对话的技术工具(比OpenCode的标准压缩更智能)。
  2. Deduplication — 删除重复的工具调用(相同工具、相同参数),只保留最新的。
  3. Purge Errors — 在一定轮次后(默认: 4轮)删除出错工具的大规模输入。

2. 有什么用?

在以下场景中使用它:

  • ✅ 节省30-50%的tokens在长会话中
  • ✅ 防止幻觉由过时上下文引起
  • ✅ 智能控制上下文窗口大小
  • ✅ 通过glob模式保护重要工具输出不被剪枝
  • ✅ 手动压缩通过 /dcp compress
  • ✅ 监控token消耗通过 /dcp context和 /dcp stats

技术特性:

  • 范围模式 (默认) — 将对话的连续区域压缩为摘要
  • 消息模式 (实验性) — 单独压缩单个消息
  • 分层压缩 — 当新压缩与旧压缩重叠时,旧摘要会被合并到新摘要中(信息通过多层保存)
  • 受保护工具 — 保护特定工具输出不被压缩(默认:taskskilltodowritetodoreadcompressbatchplan_enterplan_exitwriteedit

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
显示当前会话的token分解
/dcp stats
所有会话的累积统计
/dcp sweep
从最后一条用户消息开始删除所有工具
/dcp sweep 10
仅删除最后10个工具
/dcp compress [focus]
运行一次压缩(可选指定内容)
/dcp decompress <n>
恢复指定ID的压缩
/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