前言¶
长会话里,上下文窗口迟早会顶到阈值。DeepSeek Harness(DSH)自带压缩能力,常见做法是到线后再调模型做摘要,主对话要等这一轮结束。如果你希望占用长期停在可调区间、越过触发线时尽快把表层换掉,又不想让模型参与「要不要压」的决策,就需要把蒸馏和提交拆开:旧历史在后台提前蒸成块,提交时查表替换、不走 LLM。下面介绍社区插件 dsh-compaction-tower(维护者 AfeyGu,分类:记忆),它替换宿主压缩扩展点中的自动判定与提交逻辑,与 dsh-compaction-basic 分工:后者仍负责 compaction/* 事件与遮蔽计价,本插件只管塔式分块、观察者与提交。
这是什么¶
一句话:早期对话在后台被蒸馏成「块」,只写入会话日志、不进上下文;当内容占用越过触发线时,把已蒸好的块整块换成 checkpoint 消息落回目标线,提交过程零 LLM 调用。
插件已在 npm 发布,包名 dsh-compaction-tower(当前资料中版本 0.1.45,许可证 MIT)。仓库:AfeyGu/dsh-compaction-tower。社区目录页:skillhub 插件页。
它不注册 compress 工具、不做 nudge;不禁用宿主自带压缩、不改 preset、不碰 system prompt;请求对象深冻结,表层变更只经 surfaceOp: replace。
核心功能¶
块、checkpoint 与层¶
| 概念 | 含义 |
|---|---|
| 块(block) | 一次蒸馏产出,带块号(如 b00007)、层号、覆盖范围;只在日志(plugin:tower/block),模型看不见 |
| checkpoint | 提交后换进上下文的那条消息,正文含块头 + 摘要;占 token |
| 层(tier) | T1 由原文蒸馏,更高层由同层 checkpoint 合并;层数代码侧不设上限 |
块和 checkpoint 最易混:块是账本;只有 提交 才把表层原文换成摘要并省下空间。块在日志里堆再多,不提交也不省窗口。
平时:观察者后台蒸馏¶
观察者在后台把早期历史蒸成块。每次请求前、每个回合结束前各判定一次,按「缺口」决定蒸几块:目标与触发线、目标线、单位(默认可用预算的 5%)相关,低层优先。保护区(最近 retainRecentGroups 个 step)只拦提交,不拦蒸馏。
蒸馏是一次旁路 LLM 调用;合并可把多个已进入上下文的同层块合成更高层。
越线:提交¶
占用超过 triggerRatio(默认 45% 可用预算)时,用已备好的块做提交:查表 + 宿主压缩引擎换进表层,零 LLM 调用,尽量落到 targetRatio(默认 15%)。最近 N 步仍在保护区内。
取回与检索¶
压过的内容不消失:
decompress:查看被压缩历史;search_context:在含已压缩内容的全部历史里搜索。
界面与排障¶
装入带 web 客户端的组合后,会话区多 压缩 tab:上下文占用条、块列表、塔结构;可 立即蒸馏、立即提交(空闲时会排队,下一回合再提交)、合并选中(≥2 个同层且已进入上下文的块)、就地改配置。
确认在工作:
- 出现 压缩 tab 且能看块列表 → 插件已装载;
- 越线后块由「待提交」变为「已进入上下文」→ 提交生效;
- 日志出现
compaction/end→ 表层已替换。
面板底部 上次判定 / 上次观察 说明未压原因(未到线、可压区空、没有可提交块等)。调试:TOWER_DEBUG=1 启动前设置,判定详情写 stderr(默认关闭)。
安装与启用¶
要求:DSH ≥ 0.2.1(块账本依赖 appendPluginRecord() 的 ignorable 标记;0.2.0 会话可能因未知事件类型无法打开)。建议桌面端 0.2.2+。
不要用 npm i dsh-compaction-tower 装到当前项目——DSH 启动不看那里。应通过 profile 的插件管理安装,宿主会 pnpm add 并写入 ~/.dsh/profiles/<name>/package.json:
- 设置 → 插件 → 安装,填包名
dsh-compaction-tower或 tarball 路径; - 或接口
plugin_manager install_bundle(与插件页同路)。
装完后 重启应用(宿主侧启动时装载)。package.json 需同时有 dependencies 与 dsh.profile.bundles,例如:
{
"dependencies": { "dsh-compaction-tower": "0.1.39" },
"dsh": { "profile": { "bundles": ["…", "dsh-compaction-tower"] } }
}
离线可用 "file:…/dsh-compaction-tower-<version>.tgz"。dsh.bundle.patch.yml 只插本插件一行,不覆盖已有配置。
典型配置¶
比例类参数随窗口自适应;可在压缩面板 设置 或插件页表单修改(共 17 项)。保存为稀疏覆盖:<DSH_HOME>/storages/compaction-tower/config.json(覆盖层 > profile > 内置默认)。
常用键(默认值来自 README):
| 键 | 默认 | 含义 |
|---|---|---|
triggerRatio |
0.45 | 超过此比例(相对可用预算)才提交 |
targetRatio |
0.15 | 提交后希望降到的水平 |
distillMinRunRatio |
0.05 | 单块材料量占可用预算比例(「单位」) |
retainRecentGroups |
10 | 最近 N 个 step 提交时不压缩 |
observerProvider / observerModel |
'' |
蒸馏用模型,空则跟随会话 |
summaryPromptMode |
host |
host / zh / custom |
observerConcurrency |
10 | 并发蒸馏上限 |
固定开销 F(system + 工具 schema)与可用预算 B(窗口 − F)用于触发线、目标线与占用条展示。
适用场景与注意¶
适合:单会话很长、希望上下文占用稳定在「青壮年区间」(如 15%~45% 可用预算)、且接受后台旁路 LLM 做蒸馏的成本;需要 decompress / search_context 在长历史里查证。
注意:
- 插件在 当前 DSH 进程权限 下运行,旁路蒸馏会调用你配置的 provider/model;安装前请查看 源码 与 MIT 许可证。
- 新会话总量不足一个单位时观察者不会蒸,属设计行为;攒够材料后开始。
- 社区目录 skillhub.cn 与 DeepSeek / 幻方无官方从属关系;DSH 生态是「一切皆插件」,本页介绍的是社区维护的包。
- README 中设计文档(
docs/design/compaction.md、replenishment.md等)可查判定与补货推导。
结尾¶
dsh-compaction-tower 把「提前蒸馏」和「越线提交」拆开:块在日志里备货,提交不卡主对话、不调模型摘要,占用有机会长期待在触发线与目标线之间。安装用 profile 包名 dsh-compaction-tower,记得 DSH 版本与重启。
- 目录页:https://www.skillhub.cn/plugins/AfeyGu/dsh-compaction-tower
- GitHub:https://github.com/AfeyGu/dsh-compaction-tower