前言¶
DeepSeek Harness(DSH)的对话越久,上下文里堆叠的内容越容易失控。工具输出(尤其是错误日志)和重复的中间结果往往会占据绝大部分 token,而真正关键的决策和正在进行的任务则被淹没其中。一旦触发压缩,这些关键信息可能连同垃圾一起被概括成模糊的摘要。
dsh-context-maid 旨在解决这一问题。它接管 DSH 的上下文压缩与瘦身流程,将“垃圾清理”与“重要内容保护”分离。它会在压缩前先将值得保留的内容归档,再对工具输出进行感知式瘦身,并确保高权威的“钉扎”事实不会被误删。
插件概况¶
- 名称:dsh-context-maid
- 定位:DeepSeek Harness 自动上下文策展插件
- 核心价值:Tool 输出内容感知瘦身 + 无效日志清理 + 工作流/记忆钉扎保护 + 先归档后压缩 + 摘要模型可配
- 维护者:Icstick
- 分类:记忆
- 开源协议:MIT License
核心功能¶
dsh-context-maid 通过继承并注册 DSH 的官方服务来实现功能覆盖:
- 接管官方压缩:继承
BasicCompactionEngine并注册为ctx.compaction。官方的pressure、overflow、manual三路触发逻辑完全保留,但阈值通过映射机制由用户控制。 - 压缩摘要增强:在折叠摘要前,会将高权威的 PIN(钉扎)事实注入摘要指令中。摘要模型可配置(支持便宜模型、本地模型或智能路由),若未配置则跟随对话模型。
- Tool 输出瘦身:继承
ToolResultPruner注册为ctx.toolResultPruner。开启eventSlim(默认开启)后,每次 step 前会对新增的超预算 tool 结果进行增量瘦身(保留头尾、错误留尾、JSON 留骨架)。 - 垃圾清扫:基于确定性模型识别重复读取、失败后重试等无效事件,生成无 LLM 的 stub 节点进行清理。默认关闭,需在配置中开启。
- 先归档后压缩:折叠摘要会先经过 ACP(Agent Composition Protocol)ledger 归档,标记为普通 observation,确保重要内容不随压缩消失。
- 可观测性:插件提供审计日志,记录每一次压缩(fold)、瘦身(slim)和清扫(sweep)的操作。通过
/context-maid status命令可查看引擎状态、阈值配置、PIN 校验分布及折叠深度。
安装与启用¶
通过 CLI 直接添加插件:
dsh plugin --profile <name> add github:Icstick/dsh-context-maid
安装完成后,必须在 cordis.patch.yml 中禁用官方的默认引擎,否则 maid 无法正常接管服务。
在 profile 的 cordis.patch.yml 中添加以下配置:
- id: compaction-basic
disabled: true
- id: tool-result-pruner
disabled: true
- id: context-maid
name: dsh-context-maid
config:
auditDir: C:\path\to\context-maid
trigger.userRatio: 0.4
注意:
* 在 Windows 环境下,pnpm install 前必须先停止 DSH 进程,否则会遇到 native DLL 锁的问题。
* 如果 status 显示 BasicCompactionEngine,说明官方引擎未被禁用,需检查第 3 步的配置。
配置项¶
| 配置键 | 默认值 | 说明 |
|---|---|---|
trigger.userRatio |
0.4 | 上下文阈值(占模型窗口比例),映射官方 thresholdRatio。 |
trigger.eventSlim |
true | 开启后,step 边界对新增超预算 tool 结果进行增量瘦身。 |
slim.thresholdChars |
4000 | 触发内容感知瘦身的字符数阈值。 |
slim.headChars / slim.tailChars |
800 / 800 | 瘦身时保留的头尾字符数。 |
sweep.enabled / sweep.aggressive |
false / false | 是否开启垃圾清扫(默认关闭)。 |
fold.retainRatio |
0.16 | 压缩后保留的尾段比例。 |
fold.verify.enabled |
true | 是否开启折叠后约束校验(默认只告警,不阻塞)。 |
pin.enabled |
true | 是否开启 PIN 事实的软保护。 |
archive.enabled |
true | 是否开启先归档后压缩。 |
summarization.provider / summarization.model |
’’ / ‘’ | 自定义摘要模型(留空则使用对话模型)。 |
auditDir |
$DSH_HOME/context-maid |
审计日志目录。 |
使用示例¶
在对话中输入 /context-maid status,应能看到以下输出内容:
engine: ctx.compaction = MaidCompactionEngine(maid 提供,阈值映射生效)
注意事项¶
- 依赖冲突:必须禁用官方的
compaction-basic和tool-result-pruner。DSH 的 cordis 服务同一 key 只能有一个提供者,禁用官方服务是 maid 接管的前提。 - 校验逻辑:折叠后的约束校验目前只比对摘要正文中的字面锚点,不读取折叠后的
session surface。这意味着它无法检测“约束虽然还在上下文中但不在摘要里”的情况。 - 默认行为:校验结论默认只告警,不阻塞折叠。将
fold.verify.enabled设为false会关闭校验与留痕,但不改变折叠行为。 - 版本兼容:请确保使用兼容的 DSH 版本(peerDependencies 中要求的范围)。