dsh-compaction-threshold
在 插件 → dsh-compaction-threshold 的配置卡里调 DSH 的会话压缩阈值,保存后即时生效,不需要重启。
| 设置项 | 默认 | 范围 | 说明 |
|---|---|---|---|
| 触发阈值 | 80% | 17–90 | 自动压缩在已路由模型上下文窗口的百分之多少处触发 |
| 保留近期对话 | 16% | 1–89 | 压缩时逐字保留的最近对话比例,必须小于触发阈值 |
| 自动压缩 | 开 | — | 关闭后不再自动压缩,手动 /compact 仍可用 |
例:窗口 1,000,000 的模型,触发阈值 80% → 800,000 tokens 处压缩,逐字保留 160,000 tokens。
为什么不能只改 profile 配置
DSH 内核本来就带压缩(@deepseek-ai/dsh-compaction-basic,默认 thresholdRatio = 0.8 /
retainRatio = 0.16),但在 web / desktop 装配下改不到:
- 组合里进程级那一行
compaction-basic是被禁用的; - 每个 agent preset 在自己的隔离 realm 里各挂一个
BasicCompactionEngine(presets/cordis/agent.cordis.yml的compaction组,isolate: { compaction: true }); - 往
~/.dsh/profiles/<name>/cordis.patch.yml写同 id 行不落到会话实际用的那个引擎。
实现要点(内核 0.1.5-rc.2 实测)
- 取得引擎:
ctx.get('agentPresets').serviceFor(agent, 'compaction')→ 返回该会话所在 preset 隔离 realm 内的BasicCompactionEngine。 - 改值的正确姿势是「替换整个 config 对象」,不能原位赋值:
Object.isFrozen(engine.config) === true,而config属性本身writable: true;- 原位赋值在 ESM 严格模式下抛
TypeError: Cannot assign to read only property 'thresholdRatio', 被try/catch吞掉就等于静默什么都没做(这点极易踩坑); - 引擎每次决策都重新读
this.config,所以整体替换即热更新。实测替换后 45 秒回读仍是新值。
- 枚举存活会话用
ctx.get('agents').list():sessionPersistence.list()的条目形状是{ header, revision, sizeBytes }, 会话 id 在entry.header.id里、顶层没有 id;照顶层取会永远扫到 0 个会话。 - 两条落地路径:
- 保存设置时立即扫描存活会话写入(实测 1.5 秒内引擎即为新值);
- 每个 step 边界
ctx.on('agent/pre-step', …, { prepend: true })再兜底同步一次。
不改压缩算法、不碰会话日志:摘要生成、消息替换、checkpoint、持久化、溢出恢复
全部仍是官方 compaction-basic 负责。设置值持久化在设置存储(命名空间
dsh-compaction-threshold),进程重启后由 step 边界重新应用。
安装(本机 DSH Desktop)
Desktop 独占 profile 装配,dsh plugin add 在本机不可用。走本地热装配:
npm pack # → dsh-compaction-threshold-0.1.0.tgz
# 解包到 D:\dsh-plugins\dsh-compaction-threshold
# dev_install_package(dir, profile='desktop')
本插件宿主半边只 import @deepseek-ai/schemastery(0.2.0 起 @deepseek-ai/dsh-settings
的 installSettingsSection / settingsNamespace 已删除,导入它们会让宿主起不来)。
link 安装的插件目录没有自己的 node_modules,因此目录内建立一个指回内核同一份的
junction(不是拷贝,避免版本偏移):
node_modules/@deepseek-ai/schemastery → <app>/dsh/node_modules/@deepseek-ai/schemastery
(<app> = 官方 Harness 安装目录,例如 D:\DeepSeek Harness\resources\app。
注意不要指向社区 Desktop 或其它副本:目标一旦被卸载/移动,悬空链接会让插件
failed to import、宿主启动报错。)
装完硬刷新页面(Ctrl+Shift+R),在 插件 → dsh-compaction-threshold 的配置卡里 即可看到本行(0.2.0 起第三方插件的配置卡在插件页,不在「设置 → 通用」)。
⚠️ 改本插件的代码后需要重启 DSH Desktop 才生效:本机 super-injector 的
dev_reload_package拿不到loader.internal,只会"重新装配"旧模块; 且dev_install_package见到已存在的 loader entry 会跳过 create。重启后由 profile 的 bundles 列表正常装配。
验证
宿主日志(%APPDATA%\DSH Desktop\logs\host\dsh-<日期>.log)里会有:
[dsh-compaction-threshold] audit-><写入路径> {"event":"applied","thresholdRatio":0.62,…}
同时会往下列第一个可写目录追加一行 JSONL 审计(dsh-compaction-threshold.jsonl):
$DSH_HOME → ~/.dsh → 本插件目录。
限制
- 只调阈值类策略;压缩范围选择、摘要质量、按模型覆盖(
modelPolicies)、 摘要模型选择不在本插件范围内。 - 只支持百分比;按绝对 Token 设阈值需要知道每个模型窗口,未做。
- 若别处设过
retainTokens,本插件会清掉它(与retainRatio互斥)。 - 某个 preset 若没有压缩组(不压缩的 preset),
serviceFor拿不到引擎,本插件对它无效。
许可
MIT。
No comments yet. Be the first to write one.