前言¶
DeepSeek Harness(DSH)里,长会话会不断往上下文里堆历史。官方会在 token 压力足够大时走 compactIfNeeded,按预算保留尾部、把更早内容压成摘要。若你更关心「对话轮次」而不是 token 曲线——例如希望每攒够一定次数的真实用户提问就主动压一轮旧历史,同时固定保留最近几轮原文——就需要在 harness 上挂一层按楼层计数的触发逻辑。下面介绍社区插件 floor-limiter(维护者 MengXinSu,GitHub 仓库 MengXinSu/floor-limiter),它在 DSH 会话上实现「楼层滚动 + 摘要压缩」,与官方压力压缩共用同一套 ctx.compaction 引擎。
这是什么¶
floor-limiter(楼层限制器)面向 DeepSeek Harness,在每次用户提问进入、助手回复开始前的 agent/pre-step 边界检查表面历史:当真实用户楼层数达到 M 时,保留最近 N 层原文,把更早区间压成一条摘要。插件分类为「记忆」;当前仓库版本 0.1.4,许可证 MIT。目录页:SkillHub - floor-limiter。
核心参数与机制¶
M 与 N¶
- M(
triggerFloors,默认 20):表面上攒够 M 个真实用户楼层时触发一次压缩。一层 = 一次用户提问 + 它引发的全部回复与工具调用(多个 transcript 节点仍算一层)。 - N(
keepFloors,默认 5):触发时保留最近 N 层原文,只压缩更早区间。
楼层计数依据 user/message 且 source.kind === 'user'。由摘要替换产生的 plugin source 节点不计层,避免压缩结果再次触发压缩。
执行流程(pre-step)¶
- 统计表面真实用户楼层数。
- 若楼层数 ≥ M,选定区间:保留最近 N 层,压缩从表面头到「第 N 层之前」的边界。
- 调用
ctx.compaction.compactRegion(start, end, agent, signal)生成摘要。 - 任一步失败(边界不平衡、已有压缩进行中、摘要不小于原文、取消等)则跳过本轮,不打断对话,下轮 pre-step 再试。
与官方压缩的关系¶
不是两套独立系统:官方在 token 压力下经 compactIfNeeded 调 compactRegion;floor-limiter 在楼层数达标时直接调同一个 compactRegion。共享压缩锁(compaction/start);同时触发时先到先得,后到者本轮跳过。设置里的 enabled 只关闭楼层触发,不影响官方压力压缩。
保留语义(易混点)¶
- 区间由插件选定:
compactRegion只校验边界与 tool-pairing,不会二次改区间;「留 N 层」即插件selectCompactionRange的输出(README 中 M=20、N=5 时压前 15 层,有tests/selftest.ts断言)。 - 「层」是用户轮次,不是消息条数。
- 极端边界:若第 N 层起点落在未配对的工具调用旁,插件会向左回退到平衡边界再压,可能出现实际保留 N-1 层,优先保证安全。
设置¶
路径:设置 → 楼层限制器(左侧独立入口)。
| 配置项 | 含义 |
|---|---|
enabled |
是否启用楼层触发 |
triggerFloors |
M |
keepFloors |
N |
以上项在线生效:改完后下一轮 pre-step 即用新值,无需重启 DSH 进程。
安装与启用¶
本插件以 本地 vendor 方式挂到 profile(README 以 web profile 为例)。package.json 中声明兼容 DSH >=0.1.7-rc.1 等区间,且 profiles 目前为 web;Node >=20.18。安装前请自行审阅源码与 LICENSE;插件在 DSH 进程权限下运行。
- 将插件目录复制到:
<DSH_HOME>\profiles\web\vendor\floor-limiter\
- 编辑
<DSH_HOME>\profiles\web\package.json(两处都要改,仅加dependencies不会加载插件):
"dependencies": {
"floor-limiter": "file:./vendor/floor-limiter"
}
以及在 dsh.profile.bundles 中增加:
"floor-limiter"
- 在 profile 根目录(不是 vendor 子目录)执行:
pnpm install
然后重启 DSH。
运行时依赖 harness 提供的 @deepseek-ai/dsh-* 服务(settings、agents、agentPresets、compaction),无需在 vendor 目录内再 npm install 业务依赖。
典型用法¶
- 按上一节完成 vendor 安装并重启。
- 打开 设置 → 楼层限制器,按需打开
enabled,调整triggerFloors/keepFloors(例如默认 M=20、N=5)。 - 正常多轮对话;每轮用户提问会经过 pre-step。当真实用户楼层达到 M 时,旧历史被压成摘要,最近 N 层保持原文进入后续推理。
若同时发生官方 token 压力压缩,二者共用引擎与锁,不会在同一轮双重压缩。
适用场景与注意¶
适合:长时间、多轮 web profile 会话,希望用「轮次上限」控制上下文体积,并与官方 token 压缩并存;需要固定保留最近若干轮完整原文(含工具链)的场景。
注意:
- 仅 web profile;其他 profile 需自行对照
dsh.plugin.json/ README 兼容性。 - 与官方压缩维度不同(楼层 vs token),可互补,但同一时刻仍受共享锁约束。
- 社区目录 SkillHub 为独立生态站点,与 DeepSeek / 幻方无官方从属关系;星标与版本以仓库为准。
- 开发构建:
npm install、node build.mjs、npm test;更新 client bundle 后浏览器需硬刷新缓存。
结尾¶
floor-limiter 把「攒够 M 层真实用户对话再压旧历史、保留最近 N 层原文」做成可配置的 pre-step 钩子,并与 DSH 内置压缩共用 compactRegion。若你要在 harness 上按对话轮次管理记忆,可从 vendor 安装并在设置页调 M/N。
- 目录页:https://www.skillhub.cn/plugins/MengXinSu/floor-limiter
- 源码与说明:https://github.com/MengXinSu/floor-limiter