dsh-context-keeper:推理规范、上下文预算与长会话交接

前言

在 DeepSeek Harness(DSH)里跑智能体,常见两类问题:一是长任务里推理容易发散或反复改计划;二是上下文窗口被占满后,要么硬续聊丢细节,要么开新会话又要从头对齐。社区插件 dsh-context-keeper(维护者 Orliba)把「怎么思考」写进持久 system prompt,再用本地会话文件做预算观测和交接包,并附带离线 trace 分析 CLI。它不会通过截断或压低推理来省 token——README 明确说明测量后放弃了「缩短思考」的原目标。

这是什么

一句话:主机端插件 + 离线分析器。插件在每次请求里注入一段可配置的推理规则,注册 /context-watch、/handoff 等命令,并在 UI 上展示官方 contextPressure 投影;CLI 直接读磁盘上的 DSH 会话文件,汇总思考量与 trace,不调用模型。

分类属于 DSH 社区目录中的「工作流」。仓库:https://github.com/Orliba/dsh-context-keeper;目录页:https://www.skillhub.cn/plugins/Orliba/dsh-context-keeper。SkillHub 为独立社区站点,与 DeepSeek / 幻方无官方从属关系。

兼容性与依赖

资料中的声明如下:

  • DeepSeek Harness:>= 0.2.0-rc.1(见 package.json 的 dsh.engines.dsh)
  • Node.js:>= 22(使用内置 zlib.zstdDecompressSync)
  • 已验证环境:DSH Desktop 44.7.0(Windows)——回合 footer 的 context 徽标可挂载,/context-watch 与 /handoff 可针对本地会话文件运行

插件依赖公开 API:systemPrompt.section、commands.register、conversation.chat.turnTail / conversation.composer.dock 座位,以及 contextPressure 投影。若未来版本 API 变化,主机端会警告一次并停止注册,避免拖垮 profile;客户端在投影不可用时仅不渲染。

核心功能

推理规则(主机端 system prompt)

插件注册名为 context-keeper:how-to-reason 的 section,默认 order 650(在 deployment persona 之后、工具目录之前)。规则共五行,每条对应可观察行为,例如:行动前先定目标与验收方式;无新证据不改结论;推理卡住时去查证据而非空转;风险与推理深度匹配;明确未知项。完整条文见仓库 plugin/rule.mjs 与 docs/rule-text.md。

设计选择是 prompt section 而非流式拦截。README 记录了对「循环 trace、重复推导、早承诺长尾巴」等假设的实测,均未支撑自动降档或停轮;且 llm/stream、agent/turn-stopping 等挂载点在本树中不稳定。section 一次声明、每轮可见,不依赖事后检测。

另有一条静态上下文预算说明写入 system prompt,故意不写数字,避免每轮变化破坏 provider 的 prefix cache。

上下文观测与交接(v0.3 起)

两个用户命令,均只读 DSH 已写入的会话文件,零次模型调用:

  • /context-watch:占用率、绿/黄/橙/红档位、剩余空间、每轮增长、最近一次 compaction 回收量
  • /handoff:在 <workspace>/.context-keeper/handoff/ 写入可携带的交接包与完整归档;复用 DSH 的 compaction/summary 检查点作为早期上下文,近期尾部原文引用

设计说明见仓库 docs/distill-design-v3.md。

UI:context 徽标与提醒(v0.4 起)

  • 回合 footer(conversation.chat.turnTail 座位):读取 contextPressure,按占用率着色——绿 (<50%)、黄 (50–65%)、橙 (65–80%)、红 (≥80%),并显示百分比;橙/红起显示「建议交接」/「该交接了」类提示,悬停可见完整句子
  • 输入框下方 dock(conversation.composer.dock):仅在橙/红时出现,提供 开新会话 按钮;通过 client Remote 调用 session.create + session.prompt,在新会话中 seed 提示去读 .context-keeper/handoff 下最新交接包。按钮不会内联交接内容(避免再耗 token)。创建后无法自动跳转到新会话,需从侧栏打开——面板中会说明

上述 UI 与提醒不会自动进入模型输入;除点击开新会话外不消耗 token。

客户端实现在 plugin/client.js(package.json 的 dsh.client);无需单独配置路径。

离线 CLI:读「它实际想了什么」

在已具备本包的前提下,可用 Node 22+ 运行 bin/cli.mjs(无构建步骤、无额外依赖)。README 示例:

# 扫描 DSH home 下所有会话,按思考量排序
node bin/cli.mjs scan "$DSH_HOME/sessions"

# 单会话汇总
node bin/cli.mjs report path/to/session.v4.jsonl.zstd

# 最长 trace
node bin/cli.mjs traces path/to/session.v4.jsonl.zstd --limit 20

安装与启用

作为 DSH 插件安装(命令来自 README):

dsh plugin --profile <your-profile> add dsh-context-keeper

安装后重启该 profile。关闭而不卸载可设配置 enabled: false,或在 patch 中增加:

- id: context-keeper
  disabled: true

配置项(资料原文表格):

Option Default Meaning
enabled true false 时不注册任何内容
text built-in rule 完全替换规则正文
order 650 section 在组装 prompt 中的位置
maxChars 2000 在段落边界截断

典型用法

  1. 安装并重启 profile,正常在长任务会话中工作;观察每轮 footer 色点与占用率。
  2. 需要量化时输入 /context-watch,查看档位与 headroom,再决定是否交接。
  3. 窗口进入橙/红,或任务需换会话时运行 /handoff,然后在 dock 提醒里点 开新会话,在新会话中让 agent 按 seed 读取 handoff 目录继续。
  4. 事后复盘时,对 session.v4.jsonl.zstd 跑 node bin/cli.mjs report 或 traces,对照插件注入的规则与实际 trace。

DSH 第三方命令名须匹配 ^[a-z][a-z0-9_-]*$,菜单显示为命令名本身;可读性写在中文单行描述里,因此菜单中是 /handoff、/context-watch 而非自定义英文标题。

适用场景与注意

适合:需要稳定推理习惯、长会话上下文管理、以及离线审计思考 trace 的 DSH 用户与插件开发者。

注意:

  • 插件以当前 DSH 进程权限运行;安装前请自行查看源码与许可证(资料中为 MIT,package.json 版本 1.0.0)。
  • 不承诺缩短模型思考;交接与观测均基于本地会话与官方投影,不替代你们自己的安全与合规审查。
  • systemPrompt.section 缺失时插件 warn 一次并空注册,其余 profile 不受影响——开发中曾覆盖「未声明服务抛错」「声明但未提供的服务永久 pending」等失败模式并有测试。

结尾

dsh-context-keeper 把推理规范、上下文预算可视化、handoff 与离线分析放在同一仓库:主机端轻量、可关;客户端纯展示加一个明确的开新会话动作;CLI 补观测闭环。进一步细节以 README 与 docs/ 为准。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜