前言¶
DeepSeek Harness(DSH)在长会话场景下会进行压缩,将早期消息合并为摘要,并在压缩时把约束(如“不要强制推送到 main”、“必须先跑测试”)一并带走。这导致代理在后续对话中可能忘记这些规则,而旧的记忆插件只负责召回,不负责审计丢失。dsh-compaction-guard 针对这一痛点,在压缩摘要事件中提取被覆盖的指令行,与摘要比对,报告所有约束丢失情况,并持久化到 JSONL 文件。
插件定位¶
dsh-compaction-guard 是一个 DSH 记忆类插件,由 zhengqiuyang 维护。它不参与记忆存储或检索,而是审计会话压缩后的约束完整性:将用户在压缩范围内设置的约束与摘要文本比对,报告哪些约束被带走了、哪些被“静默遗忘”,并在控制台与持久化日志中体现。整个验证路径不调用 LLM,保证确定性。
核心功能¶
1. 监听压缩摘要事件¶
插件监听 compaction/summary 事件,从事件中获取 shadowedSeqs(被压缩的消息序列),并逐条调用 session.eventAt(seq) 提取用户指令行。
2. 约束比对模式¶
在配置的覆盖率阈值(默认 0.6)下,将每条指令行与摘要文本进行比对:
- 逐字匹配(whitespace-normalized):如果摘要中存在完全一致(忽略空白)的子串,视为保留。
- 内容词覆盖比对:计算指令行与摘要中共同出现的内容词数量,覆盖度 ≥ 阈值则视为保留。
- 未匹配则报告:以上两种方式均不匹配,则判定为丢失,插件会记录并报警。
3. 配置固定约束¶
通过配置 pinned 字段,可指定总是需要验证的约束(逐字匹配)。这些约束在每次压缩时都会被检查,确保关键规则不因压缩而丢失。
4. 持久化日志¶
所有丢失的约束会被写入 .dsh-compaction-guard/ledger.jsonl,每一行是一个 JSON 对象,包含约束原文、摘要片段、比对结果等,便于 CI 工具读取。
安装与启用¶
使用官方安装命令:
dsh plugin --profile default add github:zhengqiuyang/dsh-compaction-guard
插件自带预构建的 lib/ 目录,无需构建步骤,也不需要 allowBuilds。安装完成后,DSH 启动时会显示 [dsh-compaction-guard] active: …。
典型用法¶
配置示例¶
在 DSH 配置文件中添加插件配置:
- id: dsh-compaction-guard
name: dsh-compaction-guard
config:
pinned: ["Never force-push to main"] # 总是验证,逐字匹配
coverage: 0.6
ledgerPath: .dsh-compaction-guard/ledger.jsonl
工作流程¶
- DSH 在会话压缩时触发
compaction/summary事件。 - 插件从事件中获取
shadowedSeqs,提取其中的用户指令行。 - 将每条指令行与摘要文本进行比对:
- 逐字匹配(忽略空白)通过则视为保留。
- 内容词覆盖 ≥ 0.6 则视为保留。
- 未通过则判定为丢失。 - 对所有
pinned约束进行逐字比对验证。 - 将所有丢失的约束输出到控制台,并写入
.dsh-compaction-guard/ledger.jsonl。
日志格式¶
.dsh-compaction-guard/ledger.jsonl 每行示例:
{"constraint":"Never force-push to main","summary":"...","status":"lost"}
适用场景与注意¶
- 适用对象:在 DSH 中使用长会话、压缩功能的用户,需要确保约束不被压缩带走的场景。
- 权限要求:插件在当前 DSH 进程权限下运行,安装前应检查源码与许可证(MIT)。
- 局限性:当前版本以“保守方向”为主,即宁可误报也不漏报;词覆盖比对不涉及语义理解,同义词或改写会导致误判。
生态背景¶
DeepSeek Harness 采用“一切皆插件”的架构,社区有独立目录与维护者。此插件属于记忆类插件家族,与官方 DeepSeek 或幻方无从属关系。
结语¶
dsh-compaction-guard 通过在压缩摘要事件中提取指令行并比对,将约束丢失问题显性化,为零 LLM 调用的确定性审计提供了一种实现方式。适合需要在 DSH 中严格约束压缩行为的用户。项目目录与源码见:
- 技能中心目录页
- GitHub 仓库