前言¶
在 DeepSeek Harness(DSH)里跑长会话时,上下文会不断变长。模型服务商通常会对对话前缀做 KV cache:缓存未过期时,再次读取长历史的开销较低;一旦过期,下一条消息往往要按未缓存的输入价重新计费整段历史。
手动执行 DSH 的 /compact 可以压缩历史,但若你离开键盘较久,cache 可能已经失效,压缩那一次 summarization 就会按全价计费。下面介绍的插件在用户空闲、且 cache 仍可能有效的时间窗口内,提前跑与 /compact 相同的 summarization 请求,把结果暂存;你回到会话后点一次即可应用,且 apply 阶段不再发起新的模型调用。
这是什么¶
dsh-idle-compact 是面向 DeepSeek Harness 的插件,由维护者 Arrosam 发布,在 SkillHub 插件目录 中归类为「工作流」。源码与说明见 GitHub:Arrosam/dsh-idle-compact。
一句话:在用户离开、会话处于等待输入的空闲时段,若上下文已达阈值,则在 KV cache 仍可能有效时预先准备压缩摘要;会话内容在你点击应用前不会被改动。
核心功能¶
空闲计时与取消¶
- 某轮对话结束、会话进入等待你输入的状态后,插件启动计时器。
- 该会话内任意新活动都会取消计时器,包括你回复,或 agent 再次开始工作。
预准备压缩的条件¶
计时器到期时,仅在同时满足下列条件时才会准备压缩:
- agent 仍处于空闲,且上一轮正常结束(非错误或 stop);
- 该会话没有正在运行的后台任务或 subagent;
- 会话上下文长度(按 DSH token meter 计量)已达到配置的阈值。
预准备过程执行与 DSH /compact 相同的 summarization 请求,结果保存在内存中,不会修改当前会话。
一键应用¶
消息输入框上方会出现 Apply compaction 条,展示本次摘要将覆盖的历史条数。点击后调用 DSH 自带的 /compact 命令,并用已准备好的摘要应答其 summarization 请求,因此不再产生新的模型调用;界面会显示与手动 /compact 相同的卡片(例如 “Compacted N history items”)。
若你在准备之后又发了消息,或历史以其他方式变化,已准备的摘要会被丢弃,按钮消失;下次符合条件的空闲期会重新准备。若点击时对话状态与准备时不一致,/compact 会自行发起模型调用,而不会使用可能过期的摘要。
启动与重载时的行为¶
插件启动或重载(例如 DSH 重启、插件更新)时,已在等待输入的会话会从上一轮结束时刻起重新计时:空闲未满配置时长则只计剩余秒数;若已空闲超过配置时长则本次跳过(此时 provider cache 多半已过期,预准备会按全价计费),需等下一轮对话结束后再重新参与判断。
subagent 会话会被跳过(它们不等待用户回复)。若计时器触发时 agent 仍在忙,不会准备压缩,并会记录日志。
安装与启用¶
依赖 DSH Web UI。README 写明在 DSH 0.2.1-alpha.3 与 0.2.1-rc.2 上做过测试,更早版本未测试。插件使用 DSH 已鉴权的 /api 路由、设置表单组件,以及消息输入区域上方的 conversation.input.dock。
命令行安装:
dsh plugin add github:Arrosam/dsh-idle-compact
或在 Web UI 中打开 Plugins → Add plugin,填入 github:Arrosam/dsh-idle-compact,或本地 checkout 路径。
插件以当前 DSH 进程权限运行;安装前请自行查看源码与许可证(MIT)。
配置¶
在 DSH Web UI 中打开 Plugins → Idle Compact:
| 设置项 | 默认值 | 含义 |
|---|---|---|
| Context length threshold (tokens) | 256000 |
仅当会话上下文达到该 token 数时才准备压缩 |
| Idle time (seconds) | 300(5 分钟) |
无回复持续多久后开始准备 |
两项均为不小于 1 的整数,修改后无需重启 DSH;空闲时长变更在会话下一次进入等待状态时生效。
也可在 profile 的 cordis.patch.yml 中写入:
- id: idle-compact
config:
contextThresholdTokens: 200000
idleSeconds: 240
典型用法¶
- 安装并启用插件,按需调整上下文阈值与空闲秒数。
- 在长会话中正常与 agent 交互;当一轮结束且你暂时离开键盘时,满足阈值且空闲满设定时间后,插件在后台完成 summarization(cache 仍热时成本较低)。
- 回到会话后,若输入框上方出现 Apply compaction 条,确认覆盖条数后点击应用;会话按 DSH 标准
/compact流程更新,且 apply 不额外调用模型。
无需记忆额外命令;未点击应用前,对话历史保持原样。
Token 成本与适用场景¶
每次成功预准备会发起一次 summarization 模型调用。因多在 cache 仍有效时执行,通常比 cache 过期后再压缩便宜,但该次调用即已发生——即使你从未点击 Apply 或不再打开该会话。若大量会话属于「开著就忘」,可提高 contextThresholdTokens,减少不必要的预准备。
已准备的摘要仅保存在内存中,重启 DSH 会清空。
较适合:经常挂着长上下文会话、会间歇离开又回来、希望压缩时机落在 cache 窗口内的 DSH Web UI 用户。
需注意:需要 Web UI;subagent 会话不参与;预准备与 /compact 能力绑定;浏览器侧通过插件注册的 /api/idle-compact/* 与 Host 通信,由 DSH 校验登录与来源。
结尾¶
dsh-idle-compact 把「何时压缩」从完全手动,变成在空闲且上下文足够长时自动预计算摘要,回到会话后一键套用 DSH 原生 /compact,在合适场景下降低长历史再计费的开销。
- 目录页:https://www.skillhub.cn/plugins/Arrosam/dsh-idle-compact
- GitHub:https://github.com/Arrosam/dsh-idle-compact