前言¶
在 DeepSeek Harness(DSH)里做长会话时,上下文压缩会在后台静默发生:一段历史被替换成摘要,之后模型只能看到这份摘要。你在更早轮次里说的「不要动 tests/」「必须用某方案」可能已经不在摘要里,界面也不会明确告诉你从哪一刻起丢了什么。社区里已有插件侧重上下文体积(例如 dsh-context)或进一步缩小上下文(例如 billion-context),也有需要手工钉住片段的做法(例如 dsh-highlightpin)。dsh-compact-receipt 关注的是另一类问题:每次压缩之后,你曾表达过的要求是否仍出现在摘要里,并在可能丢失时给出可操作的收据与防护。
下面介绍该插件的定位、能力与使用方式。当前版本为 0.4.0-beta.1(README 标注 Beta);默认安装只做记录、审计与写入拦截,不会改变 DSH 自带的压缩行为。
这是什么¶
dsh-compact-receipt 由维护者 cty-09 发布,许可证 MIT,源码与说明见 GitHub,社区目录页为 skillhub.cn 条目。
一句话:在 DSH 每次上下文压缩后生成压缩收据——统计被「吃掉」的历史规模,并对你在会话中留下的承诺类要求做字符串级审计,标出摘要里可能已找不到的条目;同时在对话里插入可见卡片,并对与已记录约束相冲突的文件写入类工具调用做默认拦截(可关闭或按 id 解除)。
插件以当前 DSH 进程权限运行。安装前建议自行查看仓库源码与许可证;社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
核心功能¶
压缩收据与零模型成本的审计¶
DSH 发出携带摘要文本与被 shadow 历史 seq 的 compaction/summary 事件。插件订阅会话事件流,在用户消息到达时按规则抽取承诺,压缩发生时把每条承诺与摘要文本比对:拉丁标识符做精确匹配,中文用字符 bigram 重叠等启发式;不调用模型、不走网络、不额外消耗 token(README 明确:摘要是字符串、要求也是字符串,比较即字符串比较)。
收据示例形态(README):
This session compacted 1 time, most recent:
Receipt #1 · 18:42:07 · ate 24 history items (~8.2k tokens)
5 commitments · 4 survived · 1 possibly lost
⚠️ Possibly lost (not found in the summary — please confirm):
1. [constraint] don't touch tests/ · turn 7
Lifetime survival: 80% (4/5)
「Possibly lost」表示可能丢失:摘要保留语义但换说法时可能误报;阈值设计上宁可告警也不沉默。仅审计被压缩掉的那段范围里曾出现的承诺;仍在上下文中的要求不会被当作「已丢」审计。
什么算「要求」¶
规则层(中英文)识别三类,抽取是确定性的:
| 类型 | 示例 |
|---|---|
| constraint | don’t touch X, must use Y, 不要改 X, 必须用 Y |
| decision | we’ll use X, 决定采用 Y |
| acceptance | acceptance: tests must pass, 验收标准是 X |
规则层在标注语料上 README 给出自测分数:86%(约束 / 决策 / 验收精确率 100%;约束召回约 70%),后置否定等句式是常见漏网,v0.3 架构说明里语义分类层用于补覆盖。
对话内可见与轻量修复¶
压缩导致要求可能丢失时,会话中会出现收据卡片(Web UI 可见,无需记命令)。卡片会把 dropped 的要求再交给模型,既是提醒,也是低成本补上下文手段(README:仅在确有丢失时出现,通常约 4–6 行)。
写入拦截(guard)¶
一旦记录「不要动 X」类约束,针对路径 X 的文件写入类工具调用会被拒绝,并提示 agent 先向你确认,或你执行 /contract unblock <id>。仅检查写入族工具参数,匹配基于路径字符串;宁可漏拦也不误拦, symlink / 相对路径等不同写法可能绕过。
默认开启 blocking;可用 /contract guard off 关闭。
架构说明(v0.3,README)¶
除规则层外,README 还描述(默认路径仍以规则审计为主,语义层用于提升覆盖):
- Semantic classification:对 shadow 消息批量调用,把规则漏掉的表述补进承诺表。
- Semantic judgement:承诺与摘要一次模型调用,返回 kept/lost/unclear;无法回答时回退规则打分并在收据中说明。
- Delivery is verified:注入消息需以
user/message事件回显,才标记「confirmed delivered」。 - Classification probe:
/contract probe探测若钉住某策略会保留多少、代价多少,不改变会话状态。
实验性压缩接管(默认关闭)¶
README 与 Beta 横幅强调:接管压缩引擎为实验能力,尚未在真实压缩中验证(两次端到端跑未触发压缩,钉住块仅在单测中生成)。需同时开启 engine: true 并禁用 compaction-basic 行;在真实压缩验证前不要在重要会话上使用。默认安装安全:记录、审计、guard,不改压缩。
安装与启用¶
官方安装命令(README):
dsh plugin --profile web add github:cty-09/dsh-compact-receipt
安装后重启 DSH。README 写明:无配置、无开关即可使用上述审计与 guard 路径(实验性 engine 接管另当别论)。
package.json 要求 DSH 引擎 >=0.2.0-rc.2。
典型用法¶
| 命令 | 作用 |
|---|---|
/contract |
查看最新收据、仍有效的承诺、生命周期存活率 |
/contract guard off |
关闭写入拦截(默认开启) |
/contract unblock <id> |
解除单条规则 |
/contract probe |
探测策略保留与上下文代价(README 架构节) |
开发侧自测(仓库 README):
npm test # 20 cases, including an end-to-end simulation
插件零运行时依赖、无 build 步骤对外发布物为 lib/ 打包后的 ESM;第三方插件不 import @deepseek-ai/*,仅通过 ctx 集成。
适用场景与诚实边界¶
适合:长会话、约束多(目录别动、技术选型、验收标准),需要在每次压缩后知道「摘要里还有没有我的硬要求」,并希望在 agent 误写文件前多一道路径级闸门的 DSH 用户。
不适合或需知局限(README「Honest limits」):
- 不能阻止压缩,也不能恢复被摘要掉的原文;只能让丢失可见并把要求再推到模型眼前。
- 规则抽取只认常见祈使/决定/验收句式,不猜测。
- 无专用侧边栏面板;可见性来自会话内卡片与
/contract。 - 本版本不替换
CompactionEngine;在压缩边界做再注入与回显确认,而非重写 summarisation / range / checkpoint。 - 拦截仅限写入工具与路径字符串;非写入行为不在范围内。
结尾¶
DSH 生态强调「一切皆插件」;dsh-compact-receipt 补的是压缩语义保真这一维:别人优化 token 体积,它回答「压缩后你的要求还在不在」,并在默认模式下用零模型成本的字符串审计与可选 guard 降低静默丢约束的风险。目录页:https://www.skillhub.cn/plugins/cty-09/dsh-compact-receipt;源码与完整说明:https://github.com/cty-09/dsh-compact-receipt。