前言¶
在 DeepSeek Harness(DSH)里做长会话时,宿主会把较早的对话历史压成一条摘要。压一次往往还能接受,多次压缩之后,原先定过的参数、否决过的方案、测试是否跑过这类细节会从上下文里消失,模型有时还会否认刚才确认过的结论。
常见补救是在项目里手写 AGENTS.md 或让模型「自己记得写笔记」,但笔记若只留在对话里,照样会被压缩卷走;若写进工作区,又会污染仓库、牵涉权限与协作习惯。下面介绍社区插件 dsh-ctx(维护者 Saretheya,GitHub:Saretheya/dsh-ctx),它把检查点放在插件自有目录,并在每次压缩后重新注入系统提示词,让里程碑状态留在压缩碰不到的位置。
这是什么¶
dsh-ctx 的定位是:让模型在任务里程碑处写入检查点(目标、已定结论、否决方案、待办与证据等),由插件持久化并在上下文压缩后自动回填到 DSH 系统提示词的首段(该段不参与压缩)。数据全部落在 <DSH_HOME>/plugins/dsh-ctx/data/,不会在你的工作区新增文件。
插件在社区目录中的分类为「记忆」;许可为 MIT,目标 DSH 版本为 0.2.x(README 记载在 0.2.1-rc.5 上实测)。它不修改你的 cordis.patch.yml,也不写入 settings.yaml,卸载后随插件目录一并移除。
它解决什么问题¶
| 情况 | 没有检查点机制时 | 有 dsh-ctx 时 |
|---|---|---|
| 压缩后模型否认刚确认的结论 | 需要人重新说明 | 从检查点续写 |
| 反复讨论已否决的方案 | 方案被再次提出 | 检查点中保留「已否决及原因」 |
| 记不清测试是否执行 | 重跑或空口声称 | 在 Evidence 等字段保留要点 |
| 新会话接手同一任务 | 从零对齐目标 | 跨会话时可注入摘要卡片或指针 |
核心功能¶
四档注入策略¶
插件不会每轮都把整份检查点塞进上下文,而是按检查点与会话的关系选择体量:
| 情形 | 注入内容 | README 记载的实测体积 |
|---|---|---|
| 同一会话 | 全文(单份注入上限 12000 字符) | 起约 240 字符 |
| 跨会话、7 天内且主题相关 | 摘要卡片(≤900 字符) | 约 175 字符 |
| 跨会话、过期或主题不相关 | 一行指针 | 约 95 字符 |
| 尚无检查点 | 不注入 | 0 字符 |
跨会话的「主题相关」依赖写入检查点时的 topic 与 keywords;README 强调这两个字段务必填写,否则跨会话时往往只会得到一行提示。
模型工具¶
| 工具 | 作用 |
|---|---|
checkpoint_write |
写入或更新检查点;旧代自动归档,保留最近 20 代 |
checkpoint_read |
读回全文,或按关键词过滤行 |
context_status |
查看 token 占用、窗口,以及当前检查点为何被注入或未注入 |
context_compact |
在宿主提供压缩服务时预约主动压缩;若服务不可用则只落盘并告知 |
何时写检查点:提醒而不只靠自觉¶
README 说明插件在四个层面推动纪律:
- 上下文越线提醒:按真实占用跨档位时向会话注入提醒(同档只提醒一次)。例如占用 ≥ 窗口 50%(
warm)时建议先checkpoint_write再context_compact;≥80%(near)、≥90%(over)时要求立刻更新检查点。 - 常驻系统提示词段:本会话已有检查点时,每轮可读到的规则包括:以本段为会话权威副本(与 repo 冲突以 repo 为准);上下文紧张时先落盘再压缩。
- 随包 skill
context-checkpoint:声明里程碑、压缩后对账、明确压力信号、溢出类报错等触发条件。 - 压缩后的唤醒消息:压缩完成后注入后续消息,提示检查点已落盘、历史已压缩,直接接着做、勿重述已完成工作。
若任务长期不到 50% 占用且从不压缩,上述自动提醒可能不会出现;README 建议在 AGENTS.md 中约定里程碑纪律(例如每个模块改完调用一次 checkpoint_write)。
与 DSH 压缩的关系¶
DSH 压缩是有损摘要,细节会被丢弃。dsh-ctx 不改压缩逻辑,而是把检查点放在 systemPrompt.section——系统提示词首节点不参与压缩,因此可跨越多次压缩仍被重注入。
安装与启用¶
需要 DSH 0.2.x。在 desktop 配置下安装:
dsh plugin --profile desktop add dsh-ctx
安装完成后重启 DSH。插件以当前 DSH 进程的权限运行;安装前请自行查阅 仓库源码 与 MIT 许可证,确认符合你的安全与合规要求。
典型用法¶
经过上面的步骤启用插件后,长任务中可以按 README 推荐的节奏操作:
- 在根因确定、方案拍板、模块改完、测试通过或用户确认决策等里程碑,调用
checkpoint_write,填写topic、keywords,以及目标、结论、否决项、待办与Evidence等正文。 - 上下文占用升高时,按插件注入的提醒先更新检查点,再在支持的环境中调用
context_compact。 - 压缩出现新的
<compacted-summary>后,利用压缩后唤醒消息与已注入的检查点继续执行,必要时用checkpoint_read取全文或按关键词过滤。 - 用
context_status核对当前窗口占用以及检查点被全文、卡片还是指针注入的原因。
单份写入上限默认 60000 字符(超出拒绝);注入上限 12000 字符(超出截断并提示,全文仍可通过 checkpoint_read 读取)。context_compact 在检查点落盘超过 10 分钟新鲜度窗口时会拒绝预约。
数据存放与已知限制¶
检查点目录结构(均在插件目录内):
<DSH_HOME>/plugins/dsh-ctx/data/
├── checkpoints/<工作区标识>/
│ ├── current.md
│ ├── current.meta.json
│ └── gen-NNN.md
├── active-variant.lock
├── tmp/
└── logs/
README 列出的限制包括:不会自动总结对话,写什么由模型决定;跨会话相关性为关键词级而非语义 embedding,误判时保守地只给一行指针;主动压缩依赖 DSH 装配,不可用时核心落盘与重注入仍可用;同一 data/ 目录仅允许一个插件实例生效(锁文件仲裁)。
结尾¶
dsh-ctx 的价值在于:把「压缩冲走的细节」变成系统提示词里可重复注入的检查点,且不占工作区文件。社区目录页:skillhub.cn/plugins/Saretheya/dsh-ctx;源码与完整说明:github.com/Saretheya/dsh-ctx。DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。