安装与快速开始
学完你能做什么
- ✅ 在 5 分钟内完成 DCP 插件安装
- ✅ 配置插件并验证安装成功
- ✅ 看到首次自动修剪的效果
你现在的困境
用 OpenCode 久了,对话越来越长:
- AI 重复读取同一个文件多次
- 工具调用的错误信息占满上下文
- 每次对话都要消耗大量 Token
- 对话越长,AI 响应越慢
你希望能自动清理对话中的冗余内容,但不想手动操作。
核心思路
DCP(Dynamic Context Pruning) 是 OpenCode 插件,自动移除对话历史中的冗余工具调用,降低 Token 消耗。
它的工作方式:
- 自动检测:每次发送消息前,自动分析对话历史
- 智能清理:移除重复的工具调用、过期错误、被覆盖的写入
- AI 驱动:AI 可以主动调用
discard和extract工具优化上下文 - 透明可控:通过
/dcp命令查看修剪统计,手动触发清理
核心优势
- 零成本:自动策略无需 LLM 调用
- 零配置:安装即用,默认配置已优化
- 零风险:只修改发送给 LLM 的上下文,对话历史不受影响
🎒 开始前的准备
开始安装前,请确认:
- [ ] 已安装 OpenCode(支持插件功能)
- [ ] 知道如何编辑 OpenCode 配置文件
- [ ] 了解基本的 JSONC 语法(支持注释的 JSON)
重要提示
DCP 会修改发送给 LLM 的上下文内容,但不会影响你的对话历史。你可以随时在配置中禁用插件。
跟我做
第 1 步:编辑 OpenCode 配置文件
为什么 需要在 OpenCode 配置中声明 DCP 插件,这样 OpenCode 启动时会自动加载。
打开你的 OpenCode 配置文件 opencode.jsonc,在 plugin 字段中添加 DCP:
// opencode.jsonc
{
"plugin": ["@tarquinen/opencode-dcp@latest"],
}你应该看到:配置文件中已经有其他插件(如果有),在数组末尾添加 DCP 即可。
提示
使用 @latest 标签,OpenCode 每次启动时会自动检查并获取最新版本。
第 2 步:重启 OpenCode
为什么 插件配置修改后需要重启才能生效。
完全关闭 OpenCode,然后重新启动。
你应该看到:OpenCode 正常启动,没有报错信息。
第 3 步:验证插件安装
为什么 确认 DCP 插件已正确加载,并查看默认配置。
在 OpenCode 对话中输入:
/dcp你应该看到:DCP 命令帮助信息,说明插件已成功安装。
╭───────────────────────────────────────────────────────────╮
│ DCP Commands │
╰───────────────────────────────────────────────────────────╯
/dcp context Show token usage breakdown for current session
/dcp stats Show DCP pruning statistics
/dcp sweep [n] Prune tools since last user message, or last n tools第 4 步:查看默认配置
为什么 了解 DCP 的默认配置,确认插件是否按预期工作。
DCP 会在首次运行时自动创建配置文件:
# 查看全局配置文件
cat ~/.config/opencode/dcp.jsonc你应该看到:配置文件已创建,初始只包含 $schema 字段:
{
"$schema": "https://raw.githubusercontent.com/Opencode-DCP/opencode-dynamic-context-pruning/master/dcp.schema.json"
}配置文件初始只包含 $schema 字段,其他所有配置项使用代码中的默认值,无需手动配置即可使用。
默认配置说明
DCP 的代码默认值如下(无需写入配置文件):
- deduplication:自动去重,移除重复的工具调用
- purgeErrors:自动清理 4 回合前的错误工具输入
- discard/extract:AI 可调用的修剪工具
- pruneNotification:显示详细修剪通知
如果你需要自定义配置,可以手动添加这些字段。详细配置说明见配置全解。
第 5 步:体验自动修剪效果
为什么 实际使用 DCP,查看自动修剪的效果。
在 OpenCode 中进行一段对话,让 AI 多次读取同一个文件,或执行一些会失败的工具调用。
你应该看到:
- 每次发送消息时,DCP 会自动分析对话历史
- 如果有重复的工具调用,DCP 会自动清理
- AI 响应后,可能会看到修剪通知(取决于
pruneNotification配置)
示例修剪通知:
▣ DCP | ~12.5K tokens saved total
▣ Pruning (~12.5K tokens)
→ read: src/config.ts
→ write: package.json输入 /dcp context 查看当前会话的 Token 使用情况:
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.jsonc中添加 DCP 插件 - [ ] OpenCode 重启后能正常运行
- [ ]
/dcp命令显示帮助信息 - [ ] 配置文件
~/.config/opencode/dcp.jsonc已创建 - [ ] 对话中能看到修剪通知或通过
/dcp context看到修剪统计
如果某一步失败:
- 检查
opencode.jsonc语法是否正确(JSONC 格式) - 查看 OpenCode 日志是否有插件加载错误
- 确认 OpenCode 版本支持插件功能
踩坑提醒
问题 1:插件未生效
症状:配置已添加但看不到修剪效果
原因:OpenCode 未重启或配置文件路径错误
解决:
- 完全关闭 OpenCode 后重新启动
- 检查
opencode.jsonc位置是否正确 - 查看日志:
~/.config/opencode/logs/dcp/daily/目录下的日志文件
问题 2:配置文件未创建
症状:~/.config/opencode/dcp.jsonc 不存在
原因:OpenCode 未调用 DCP 插件或配置目录权限问题
解决:
- 确认 OpenCode 已重启
- 手动创建配置目录:
mkdir -p ~/.config/opencode - 在
opencode.jsonc中检查插件名称是否正确:@tarquinen/opencode-dcp@latest
问题 3:修剪通知不显示
症状:没有看到修剪通知,但 /dcp stats 显示有修剪
原因:pruneNotification 配置为 "off" 或 "minimal"
解决:修改配置文件:
"pruneNotification": "detailed" // 或 "minimal"本课小结
DCP 插件安装非常简单:
- 在
opencode.jsonc中添加插件 - 重启 OpenCode
- 使用
/dcp命令验证安装 - 默认配置即可使用,无需额外调整
DCP 默认启用的功能:
- ✅ 自动去重策略(移除重复工具调用)
- ✅ 清除错误策略(清理过期错误输入)
- ✅ AI 驱动工具(
discard和extract) - ✅ 详细修剪通知
下一步:了解如何自定义配置,调整修剪策略以满足不同场景需求。
下一课预告
下一课我们学习 配置全解
你会学到:
- 多层级配置系统(全局、环境变量、项目级)
- 所有配置项的作用和推荐设置
- 回合保护、受保护工具、受保护文件模式
- 如何启用/禁用不同的修剪策略
附录:源码参考
点击展开查看源码位置
更新时间:2026-01-23
| 功能 | 文件路径 | 行号 |
|---|---|---|
| 插件入口 | index.ts | 12-102 |
| 配置管理 | lib/config.ts | 669-794 |
| 命令处理 | lib/commands/help.ts | 1-40 |
| Token 计算 | lib/commands/context.ts | 68-174 |
关键常量:
MAX_TOOL_CACHE_SIZE = 1000:工具缓存最大条目数
关键函数:
Plugin():插件注册和钩子设置getConfig():加载和合并多层级配置handleContextCommand():分析当前会话 Token 使用