前言¶
DeepSeek Harness(DSH)的内置压缩机制通常仅基于请求压力和提供者确认的上下文溢出来工作,它不会询问一个会话已经闲置了多久。dsh-idle-compactor 插件为此增加了一个新的维度:当会话既超出了令牌阈值,又长时间保持安静(空闲)时,触发压缩。这样可以避免在每次请求时都为过时的上下文尾部付费。
核心功能¶
该插件实现了以下能力:
- 空闲触发的上下文压缩。
- 压缩那些在超出配置令牌阈值后依然保持安静的会话。
- 支持空闲时间和上下文大小作为触发器。
- 可配置扫描间隔。
- 支持干运行模式。
- 能够处理已存档的会话。
- 能够处理后台工作(background work)。
安装与依赖¶
前置要求:
* DeepSeek Harness 版本 0.1.2-alpha.3(已验证)。
* Harness 内置的 compaction 接口和 tokenMeter。
该插件没有运行时依赖。源代码中所有的 @deepseek-ai/* 导入均为 import type,会被编译器擦除,因此 lib/index.js 是一个单文件自包含的 ESM 模块。
安装步骤:
在项目目录下执行以下命令:
dsh plugin --profile web add ./dsh-idle-compactor
安装完成后,需要重启配置文件(profile),补丁层会重新加载,而捆绑挂载不会。
配置与使用¶
配置文件位于 Profile 的 cordis.patch.yml 中。插件的配置项通过 thresholdTokens(上下文大小)和 idleMs(空闲时间)来控制压缩行为。这两个条件必须同时满足,压缩才会发生。
在 cordis.patch.yml 中添加如下配置:
- id: idle-compactor
config:
thresholdTokens: 131072 # 128K
idleMs: 600000 # 10 分钟
配置项说明(部分):
| Key | Default | Meaning |
|---|---|---|
enabled |
true |
当为 false 时,完全禁用扫描。 |
thresholdTokens |
131072 |
上下文大小的门槛。 |
idleMs |
600000 |
会话被视为空闲的时间窗口。 |
scanMs |
30000 |
扫描间隔,决定 idleMs 后多久触发压缩。 |
skipAwaitingWork |
true |
遇到后台任务时跳过压缩,防止在任务执行期间重写上下文。 |
适用场景与注意事项¶
- 适用场景: 需要管理长对话上下文大小的场景,特别是当对话长时间没有新的用户输入,但上下文体积却不断膨胀时。
- 后台工作处理: 插件会检查会话及其子会话是否在处理后台任务(如作业、收件箱消息或子代理)。如果检测到后台工作仍在进行,该会话将被跳过,不会进行压缩,以避免影响正在进行的后台任务。
- 存档会话: 插件会跳过存档集中的会话 ID。
- 安全检查: 安装前请检查源码与许可证。插件以当前 DSH 进程的权限运行。
总结¶
dsh-idle-compactor 为 DSH 增加了一套基于时间和状态的自动压缩策略。通过配置 thresholdTokens 和 idleMs,可以在保持上下文精简的同时,避免在后台任务或非活跃期打断对话流。
- GitHub 仓库: https://github.com/QuanhuZeYu/dsh-idle-compactor
- 插件目录: https://www.skillhub.cn/plugins/QuanhuZeYu/dsh-idle-compactor