前言¶
DeepSeek Harness (DSH) 默认使用 compaction-basic 进行上下文压缩。如果你希望使用指定的模型(尤其是低价或免费小模型)来压缩对话,以节省 Token 成本,或者处理上下文窗口较短无法容纳完整对话的场景,dsh-quilt-compact 是一个可行的替代方案。它接管了默认的 ctx.compaction 后端。
是什么¶
由 bvbhu 维护的插件,基于 MIT 协议。它的核心逻辑是用指定的模型池对对话进行“分块摘要再归并”的压缩,最终产出一个小而全的检查点。
工作流程¶
压缩过程按以下顺序进行:
- Stage 0 预处理:对要压缩的区域进行预处理,包括合并相邻重复行、压缩连续空行、清除终端噪音(ANSI 转义、光标标记等)、保留文件/图片附件名称;可选代码骨架化与日志精简。
- 选模型与切块:每轮选定一个可用模型,按该模型的上下文容量切分上下文。每块同时带上摘要长度上限,保证最终归并不超出限制。
- 摘要:每个分块经模型池调用摘要成一个小 digest。
- 归并:所有 digest 一次调用整合成最终检查点。
- Checkpoint:最终 digest 替换原区域,写入会话。
安装与启用¶
直接从 GitHub 仓库安装:
dsh plugin --profile <name> add github:bvbhu/dsh-quilt-compact
安装命令会自动激活随包层并禁用 compaction-basic(本插件成为 ctx.compaction)。建议用 #<sha> 后缀钉住提交,避免裸仓库跟随默认分支:
dsh plugin --profile <name> add github:bvbhu/dsh-quilt-compact#<sha>
配置¶
配置通过 Web UI 的设置页或直接编辑 profile 的 cordis.patch.yml 进行。
模型池¶
配置多档模型(tiers),按容量自动选用与降级。
- id: dsh-quilt-compact
config:
tiers:
- name: primary
models:
- provider: openrouter
model: openrouter/free
maxConcurrent: 1
cooldownHours: 1
cooldownHours:失败后冷却的小时数(正数,默认 1 小时)。maxConcurrent:默认为 1。
归并窗口¶
控制归并前最多保留多少上下文(token 数),默认 128k。
mergeMaxContextTokens: 64000 # 归并前最多保留多少上下文(归并窗口),默认 128000
分块¶
控制分块比例与重叠比例。
chunkRatio: 0.8 # 分块占用模型可用输入的比例
chunkOverlapRatio: 0.1 # 相邻分块重叠占分块预算的比例
预处理¶
启用 Stage 0 的预处理选项。
preprocessing:
dedup: true # 合并相邻重复行
purgeErrors: true # 清除终端噪音
astSkeleton: { enabled: false, maxDepth: 2 } # 代码骨架化(需显式开启)
logCondense: { mode: balanced, maxLines: 200 } # 超长日志冷凝
运行记录¶
可选的质量评估/诊断记录,默认关闭。
runRecord:
enabled: false # 关闭时不产生任何运行记录
maxEntries: 200 # 文件最多保留多少条
snapshotChars: 0 # >0 时每条嵌入一段截断的对话原文(默认 0 = 不存原文)
path: '' # 固定文件位置;留空用 DSH storage 根目录
启用后,每次压缩会追加一行 JSON 到 <DSH home>/storages/dsh_quilt_compact_runs.jsonl。
* ref:指向会话事件日志里的被压缩区间。
* chunks:每块模型归属信息。
* cooldowns:每次进入冷却的报错详情。
* snapshotChars:需显式设为正数才会嵌入截断的对话原文副本。
适用场景与注意¶
- 版本依赖:需 DSH 版本
>=0.1.7-alpha.2 <0.2.0-0 || >=0.2.0-rc.1 <0.3.0-0。 - 隐私:默认不保存对话原文,只记录引用。开启
runRecord后默认仍不保存原文,需设置snapshotChars > 0。 - 兜底机制:模型池失败或归并时无足够模型,会由会话模型兜底压缩。