Skip to content

第51课 · 让 AI 自动管理上下文:ACP 插件

你用 OpenCode 写过 Skill、做过系统、搞过工具,有没有发现一个问题——聊着聊着,AI 就开始「犯糊涂」了

这不是 AI 变笨了,而是它的「记忆盒子」塞满了。这节课介绍的 ACP 插件,就是来解决这个问题的。

本节要点

  • 上下文为什么会出问题:对话越长,上下文越大,带来费钱和犯糊涂两个毛病
  • DCP 插件的局限:之前用的 DCP 是固定阈值压缩,太生硬
  • ACP 插件是什么:在 DCP 基础上修复了 39 个 bug,让 AI 自己智能判断什么时候压缩
  • 怎么安装:一行命令装好,或直接把网址发给 AI 让它帮你装
  • 什么时候该装、什么时候别装:长时间复杂任务才需要,随便问两句话别装

1. 上下文是个什么东西?

1.1 一句话理解上下文

你跟 AI 每说一句话,AI 都得把之前的对话全部重新读一遍才能回复你。这些「全部对话」就是上下文

打个比方:AI 就像一个只有短期记忆的助手,你每问一个问题,他都要把你之前说的所有话从头到尾再看一遍,才能回答。

1.2 上下文满了会怎样?

OpenCode 默认的行为是:等上下文用到 80%~90%,甚至满了(100%)的时候,才自动做一次压缩。

这会带来两个问题:

第一个:费钱。 你每发一条指令,AI 都要带着前面那么长的上下文一起处理。上下文越长,消耗的 token 越多,花的钱也越多。每一次 API 调用都在为那些已经没用的旧对话买单。

第二个:AI 犯糊涂。 上下文太长之后,尤其是你用的模型不是特别强的时候,AI 的指令遵循性会变差——你说东它往西,开始胡言乱语,丢三落四。


2. 之前的方案:DCP 插件

2.1 DCP 是什么

DCP(Dynamic Context Pruning,动态上下文修剪)是一个 OpenCode 插件,它的原理很简单:

设定一个固定的阈值,比如 50% 或 60%,上下文一达到这个值,立刻压缩。

它确实能解决问题,但太生硬了——不管三七二十一,到了线就压。

2.2 DCP 的两个问题

  1. 太死板:固定阈值,不管当前对话的实际需要,一刀切压缩
  2. 作者跑路了:DCP 的原作者已经去做其他项目了,更新不再频繁,积累的 bug 没人修

DCP 项目地址(供参考):https://github.com/Opencode-DCP/opencode-dynamic-context-pruning


3. ACP 插件:让 AI 自己决定

3.1 ACP 是什么

ACP(Active Context Pruning,主动上下文修剪)是在 DCP 的基础上,由另一位开发者复刻(fork)并持续维护的插件。

它跟 DCP 最大的区别是:

不是死板地到了某个值就压缩,而是让大模型自己判断——什么时候该压缩、压缩哪些内容。

ACP 项目地址:https://github.com/ranxianglei/opencode-acp

3.2 为什么换 ACP

对比项DCPACP
压缩策略固定阈值,一刀切AI 智能判断,灵活压缩
维护状态作者已转做其他项目,更新停滞更新频繁,持续修复
Bug 修复累积 bug 无人修在 DCP 基础上修复了 39 个 bug
缓存命中率较低约 91%,更省钱

3.3 ACP 修复了 DCP 的哪些问题

ACP 在 DCP v3.1.11 的基础上,修复了 39 个 bug,其中包括多个严重(CRITICAL)级别的问题:

  • 重启后状态丢失——压缩记录、消息映射全部清零
  • 压缩时悄悄丢失摘要内容(数据丢失)
  • 上下文使用量计算错误,导致压缩提示永远不触发
  • 压缩后的消息在 /compact 后又冒出来(上下文泄漏)
  • 日志和分词器每轮延迟 20~50 秒(268 倍减速)
  • ……

完整 bug 列表可以看 ACP 的 GitHub Issues

3.4 ACP 的实际效果

根据 ACP 项目的真实数据(6 个活跃工程会话,11000+ 次 API 调用):

  • 上下文使用量:p90 稳定在 150K~190K(1M 窗口的 15%~19%),大部分时间保持在 10%~15%
  • 缓存命中率:约 91%
  • 超长会话支持:单个会话可达 3300+ 条消息、累计 3 亿+ token

简单说:省钱、不丢关键信息、支持超长对话


4. 安装 ACP

4.1 方法一:一行命令安装(推荐)

打开终端,运行这一行命令:

bash
opencode plugin opencode-acp@latest --global

装完重启 OpenCode 就行。

4.2 方法二:写进配置文件

打开你的 OpenCode 配置文件(opencode.json),加上这段:

json
{
    "plugin": {
        "opencode-acp": "latest"
    }
}

保存后重启 OpenCode。

4.3 方法三:让 AI 帮你装

你甚至可以直接把 ACP 的项目地址发给 OpenCode 里的 AI,跟它说:

帮我安装这个插件:https://github.com/ranxianglei/opencode-acp

AI 会自动帮你完成安装。

4.4 ⚠️ 重要:关闭 OpenCode 自带的自动压缩

ACP 会自己管理上下文压缩,如果 OpenCode 自带的自动压缩还开着,两个会打架,导致压缩后的消息又被展开、压缩状态丢失。

在你的 opencode.json 里加上:

json
{
    "compaction": {
        "auto": false
    }
}

或者设置环境变量:

bash
export OPENCODE_DISABLE_AUTOCOMPACT=1

4.5 从 DCP 迁移到 ACP

如果你之前装了 DCP,迁移很简单,三步搞定:

  1. 删掉旧的 DCP 插件——从 opencode.json 里移除 DCP 的配置
  2. 安装 ACP——按上面的方法安装
  3. 重启 OpenCode

ACP 会自动迁移 DCP 的数据:

  • 会话状态(压缩记录、消息映射)自动从 plugin/dcp/ 迁移到 plugin/acp/
  • 配置文件 dcp.jsonc 自动迁移为 acp.jsonc
  • 斜杠命令从 /dcp 变成 /acp/dcp 仍然兼容,两个都能用)

5. 用起来:什么都不用做

装好 ACP 之后,你什么都不用干,正常对话就行。

ACP 会在后台默默工作。当上下文增长到一定比例(默认上限 55%),它就会让 AI 智能判断,把那些已经没用的内容压缩掉——比如:

  • 已经用完的搜索结果、联网调研的冗长输出
  • 走错方向后的无效探索
  • 重复读取同一个文件的结果
  • 已完成任务的中间步骤
  • 已经做出决定的讨论过程

你只会看到上下文百分比自动下降,比如从 57% 掉回 46%,完全无感。


6. ACP 的常用命令

ACP 提供了一个 /acp 斜杠命令(也兼容 /dcp):

命令作用
/acp显示所有可用的 ACP 命令
/acp context查看上下文 token 分类统计(系统/用户/工具等各占多少)
/acp stats查看跨会话的累计压缩统计
/acp compress手动触发一次压缩
/acp decompress <编号>恢复某个被压缩的内容块
/acp manual on开启手动模式(AI 不再自动压缩,只在你手动触发时才压缩)

日常使用基本用不到这些命令,ACP 全自动运行。需要手动控制时才用。


7. 配置说明(可选)

ACP 的配置文件在 ~/.config/opencode/acp.jsonc,第一次运行时自动创建。

大部分情况下默认配置就够用,不用改。如果你用的模型上下文窗口比较小(比如 GitHub Copilot 模型或本地模型),可以调低压缩阈值:

jsonc
{
    "compress": {
        "maxContextLimit": "40%",   // 上下文超过 40% 时开始强烈建议压缩
        "minContextLimit": "30%"    // 上下文低于 30% 时不提醒压缩
    }
}

完整配置项可以查看 ACP 项目的 README 文档


8. 什么时候该装、什么时候别装

✅ 适合装的场景

  • 长时间复杂任务:开发一个系统、做一个完整的项目,在同一个会话里持续工作很久
  • 写 Skill / 做工具:涉及大量探索、试错、调试,上下文增长很快
  • 深度调研:让 AI 联网搜索、阅读大量文档,产生大量中间内容

❌ 不该装的场景

  • 只是随便问两三个问题:对话很快就结束了,上下文根本不会涨到需要压缩的程度
  • 简单的一问一答:装了反而多此一举

核心原则:只要有压缩,就会有细节损失。ACP 压缩的都是基本无用的内容(走错方向的探索、重复的搜索结果等),但如果你的对话本来就不长,完全不需要压缩,装了反而是浪费。


9. 其他 AI 工具也能用

ACP / DCP 这类上下文管理插件,不局限于 OpenCode。

如果你用的是 Claude CodeCodex 等其他 AI 编程工具,同样可以找类似插件。比如:

  • Context Mode
  • Better Compact

你可以让 AI 帮你搜索适合你工具的上下文管理插件。


小结

要点说明
问题上下文太长 = 费钱 + AI 犯糊涂
ACP 方案让 AI 自己判断什么时候压缩、压缩什么
安装opencode plugin opencode-acp@latest --global,一行搞定
关键操作装完记得关闭 OpenCode 自带的自动压缩
使用装好就行,全自动,无需任何操作
适合谁长时间复杂任务的人;随便聊两句的不用装

ACP 项目地址:https://github.com/ranxianglei/opencode-acp

DCP 项目地址(旧):https://github.com/Opencode-DCP/opencode-dynamic-context-pruning

© 2025 逆行的狗