dsh-context-reclaim:在工具结果进历史前做 DSH 1.5 上下文治理

前言

在 DSH 里跑智能体,对话轮次本身往往不是上下文膨胀的主因。更常见的是工具回传:read 一次几百行、pwsh 打出整屏日志、系统提示里每轮重复塞满的工具定义。这些内容一旦写进会话历史,后续只能靠压缩器事后裁剪;压缩会改写已提交的历史,服务端前缀缓存随之失效,后面每一轮都更贵。

社区插件 dsh-context-reclaim(维护者 xiamubumu)把治理点前移:在工具结果被 append 进历史之前处理,并且不改写已经提交的内容,目标是让前缀缓存不因本插件而被打断。下面介绍它是什么、挂在哪些接缝、如何安装与配置。

这是什么

dsh-context-reclaim 是 DeepSeek Harness(DSH)的客户端类插件,当前版本在仓库 package.json 中为 1.1.0,许可证 MIT。它只面向 DSH 1.5(>=0.1.5-rc.2 <0.2.0);README 写明后续 DSH 版本会跟进。

定位可以概括成 README 里的一句话:工具结果进历史之前就回收,前缀缓存不因本插件失效。 此外,从 1.0.0 起它在插件层接管宿主对 llm.streamWithRegistration 的可写请求路径,因此不再依赖给官方 @deepseek-ai/dsh-llm 打文件补丁(关掉接管后仍可能需要那条补丁,见下文环境变量)。

占用 5 个服务端 Cordis 接缝、0 个客户端槽位,README 称与同赛道插件共存时冲突概率极低,且不占 chain 型槽位。插件目录可在社区站点 SkillHub 查看;该目录与 DeepSeek / 幻方无官方从属关系,属于社区生态。

核心功能

插件在五个接缝上工作,默认均为开启:

接缝 作用
tools/post-execute 工具结果产生后做净化与按类型有界化,截断处插入取回指针
system-prompt/assemble 折叠工具定义面、稳定前缀段顺序、截断超长描述行
tools/pre-execute 同一文件同一段内容的重复编辑第二次直接拦截
session/event 压缩摘要完整性审计,缺段时打警告(不修改摘要)
llm/stream 每请求一行成本归因(route / prompt / 缓存命中 / 输出)

工具结果净化与有界化

每次工具返回时,先做无损净化(折叠 ANSI、去行尾空白、统一 CR),再做有界化。净化仅在长度 ≥ 32 字符且净化后缩减比例 ≥ 0.2% 时生效。有界化按工具分成只读、有副作用、保真三类;未识别的工具按保真处理。截断处会插入取回指针,说明剩余内容与取回方式。有界化仅在能省下超过 5% 时才触发。

超过 config.maxInlineBytes(默认 50000)的结果会交给 spill 机制落盘;需要 profile 里已安装 spill 插件,否则该阈值不生效。

关闭净化:config.noise = false 或 DSH_RECLAIM_NOISE=0。关闭有界化:config.bounded = false 或 DSH_RECLAIM_BOUNDED=0。

工具定义面折叠与前缀稳定

会话开始时,DSH 会把全部工具定义写进系统提示。默认情况下插件折叠不常用工具的完整 schema,保留高频工具的完整定义;被折叠的工具仍可调用(README 说明可通过 search_tools + invoke_tool 等路径使用)。关闭折叠:config.foldTools = false 或 DSH_RECLAIM_TOOL_FOLD=0。

前缀稳定化会把易变的数字压平、把稳定段排在前面,便于服务端按字节一致命中前缀缓存。日志中可能出现 [reclaim/section-order]。关闭:DSH_RECLAIM_STABILIZE=0。

系统提示里超长单行描述默认按 120 字符截断,阈值由环境变量 DSH_RECLAIM_PROMPT_LINE_MAX 控制(未暴露在 config 中)。

重复编辑拦截与摘要审计

连续两次对同一文件同一内容做相同修改时,第二次在 tools/pre-execute 被拦下,日志为 [reclaim/dedup-deny]。关闭:DSH_RECLAIM_DEDUP_DENY=0。

压缩完成后若摘要缺少应有结构段,会打出类似 [reclaim/summary-audit] ⚠️ 摘要缺 3/8 段 的警告。README 强调:只报警不改摘要;若要减少摘要被输出预算截断,文档建议与 dsh-aux-degrade 成对安装。

可写请求接管与补丁体检

默认在 llm/stream 之前对冻结的主请求做浅拷贝,使插件链能修改 options / messages。启动日志可出现 [reclaim/writable];发消息后还有 [reclaim/wire]、[reclaim/usage]。若关闭接管(DSH_RECLAIM_WRITABLE_REQUEST=0),options 会回到冻结状态,此时可能需要官方 dsh-llm 补丁。

启动时插件还会做只读的「官方补丁体检」([reclaim/patch-check]),列出检测到的补丁情况,不会自动改你本机 DSH 安装目录。用 DSH_RECLAIM_PATCH_CHECK=0 可关闭。

安装与启用

DSH 1.5 桌面版与网页版均可使用。安装命令以 README 与安装教程为准。

从 GitHub 安装(文档标注为推荐方式,且要求本机有 git 供 pnpm 解析 github: 简写):

dsh plugin --profile web add github:xiamubumu/dsh-context-reclaim

离线环境可从 Releases 下载 dsh-context-reclaim-1.1.0.tgz,再执行:

dsh plugin --profile web add /path/to/dsh-context-reclaim-1.1.0.tgz

装完后需要重启 DSH。宿主侧插件只在启动时装载;DSH 会把插件登记进 profile 的 dsh.profile.bundles,一般不必手改 cordis.patch.yml 才能启用 bundle。

文档注明:不要把 GitHub Release 的 tarball HTTPS URL 直接传给 dsh plugin add,在 DSH 自带 pnpm 10.34.5 上可能触发 ERR_PNPM_MISSING_TARBALL_INTEGRITY。市场与 npm 安装方式在文档中写明暂时不可用,需等社区收录或 npm 发布。

安装后可在启动日志中确认:[reclaim/writable]、[reclaim/patch-check] 出现表示插件已加载;发送一条消息后应能看到 [reclaim/wire]、[reclaim/usage]。

典型用法

Profile 配置片段

在 profile 的 cordis.patch.yml 中,插件 id 为 reclaim。完整配置表见 README;常用字段示例如下:

- id: reclaim
  config:
    enabled: true
    noise: true
    bounded: true
    stripLines: false
    noOpGuardRatio: 0.05
    maxInlineBytes: 50000
    attribution: true
    foldTools: true
    activePlugins: []

三类工具名单(readOnlyTools、sideEffectTools、faithfulTools)若在配置里出现,是整表替换,不是与默认值合并;只写部分字段会丢掉其余默认项。

按需缩小只读类工具列表示例:

- id: reclaim
  config:
    readOnlyTools: ['read', 'grep', 'glob']
    sideEffectTools: ['pwsh', 'bash']
    faithfulTools: ['web_fetch', 'web_search']

环境变量速查

除 config 外,README 列出数十个环境变量;日常调试常见如下:

变量 默认 说明
DSH_RECLAIM_NOISE 1 0 关闭无损净化
DSH_RECLAIM_BOUNDED 1 0 关闭有界化
DSH_RECLAIM_TOOL_FOLD 1 0 关闭工具定义折叠
DSH_RECLAIM_WRITABLE_REQUEST 1 0 停止可写请求接管
DSH_RECLAIM_LOG 1 0 关闭本插件日志
DSH_RECLAIM_DUMP_SYSTEM 0 1 将组装后的系统提示转储到临时目录,便于排查

注意:trimSections 配置项本身不打开门闸;段落收纳需 DSH_RECLAIM_SECTION_TRIM=1 且 activePlugins 非空。

与 dsh-aux-degrade 搭配

README 将 dsh-context-reclaim 与 dsh-aux-degrade 称为「上下文治理两件套」,强烈建议同时安装:前者管内容与前缀稳定,后者管辅助调用(如压缩、标题)的降级与 token 兜底;两者源码互不 import,可单独安装,但一起用覆盖更完整。安装命令在安装教程中与 reclaim 并列给出:

dsh plugin --profile web add github:xiamubumu/dsh-aux-degrade

更细的官方补丁说明、浏览器扩展与其它同系列插件,见仓库内 tutorial-install-and-official-patches.zh-CN.md。

适用场景与注意

适合谁: 在 DSH 1.5 上长时间开工具、装了很多插件导致系统提示和工具回传很大,又希望减少前缀缓存被频繁打掉的开发者。若你主要做短对话、很少调用工具,收益可能不明显,但仍可依赖成本归因行观察缓存命中。

版本与平台: 仅支持 DSH 1.5 指定版本区间;换 DSH 大版本前请对照仓库 README 的兼容性说明。

权限与安全: 插件以当前 DSH 进程权限运行,会处理工具输出与会话事件。安装前请自行阅读 GitHub 源码 与 MIT 许可证,确认符合你的安全策略。文档写明零运行时第三方依赖,peerDependencies 仅声明官方 @deepseek-ai/schemastery 与 @deepseek-ai/dsh-tools。

依赖 spill: 超大结果落盘依赖 profile 中的 spill 插件;未安装时 maxInlineBytes 不生效。

结尾

dsh-context-reclaim 把上下文治理放在工具结果提交之前:净化、有界化、折叠工具面、稳定前缀,并附带重复编辑拦截、摘要审计与每请求成本归因;同时接管可写请求路径,减轻对 dsh-llm 文件补丁的依赖。

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

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

Xiaoye