dsh-plugin-agent-optimizer:为 DSH 智能体循环加上批处理工具与运行时策略

前言

用官方 DeepSeek Harness(DSH,@deepseek-ai/dsh-agent-loop)跑智能体时,常见的问题是上下文被官方系统提示里大量重复的工具说明、Web GUI 命令占据,单轮提示就要 ~2,000 tokens,多轮下来既费钱也容易让模型漂移;读多个文件、改多个文件只能一次一次调用工具;Windows 上超长 shell 命令或链式网络命令会直接把 spawn 打挂;同一失败调用反复重试却不止损。下面介绍的 dsh-plugin-agent-optimizer 就是为了处理这几件事。

它由 Jaylor-Wang 维护,定位是 DSH 的运行时策略与批处理工具插件,分类属于工作流,GitHub 上 2 stars,当前版本 1.1.0,许可证 MIT。它不是重写智能体循环,而是以非侵入方式挂在官方 ToolExecutionPipeline 和 system-prompt assemble 流程上。

这是什么

一句话:一个 DSH 插件,提供独立的精简系统提示引擎、PTC 复合批处理工具、防呆运行时策略、软性收敛提示和客观 A/B 遥测。仓库同时发布为 npm 包 dsh-plugin-agent-optimizer,采用 MIT 协议,package.json 里的 dsh.bundle.patch 指向 ./cordis.patch.yml。

核心功能

精简系统提示引擎(customPrompt)

插件挂到 DSH 的 system-prompt/assemble 流程,在 placement: "replace-all" 模式下剥离官方提示中冗长的 harness:*、deployment:*、tool:*、deliverable:*、web:* 段落,只保留收敛引导部分。官方提示约 ~2,000 tokens,精简后约 ~380 tokens,README 给的对比是约 82% 的 token 缩减。

它用双层 Markdown 约定管理提示:全局读取 ~/.dsh/SYSTEM.md(或 $DSH_HOME/SYSTEM.md),项目层读取 .dsh/SYSTEM.md(或 SYSTEM.md)。文件保存后通过去抖的 fs.watch 热重载,下一次对话即生效,不需要重启 DSH 进程。合并策略有两种:concat(默认,全局与工作区叠加)和 workspace-override(工作区覆盖全局)。

配套还提供 lintPrompt / fixPrompt / lintPromptFile 接口。校验是「感知预设」的:以当前实际加载的插件为准去判断提示里的工具指令,例如给未加载工具加的防御性条款、弱模态词(bias toward 建议改成 Prioritize)、未闭合的反引号、RFC 2119 大小写问题,最终给出 0-100 的健康分。

PTC 复合批处理工具(compositeTools)

  • read_batch:单轮并发查看最多 10 个文件片段,适合大范围排查和依赖追踪。
  • edit_batch:单轮对同一或多个文件顺序应用最多 10 处字面文本替换,替换目标是普通文本而非统一 diff。发生部分失败时,前面已经成功的编辑不会丢失。

每个子操作仍然经过官方 ToolExecutionPipeline(tool/ptc-dispatch-start / tool/ptc-dispatch),因此文件策略锁、变更守卫和审计钩子都保留。

防呆运行时策略(runtimePolicy)

  • NO_PROGRESS 熔断:对工具调用算确定性指纹,同一失败调用重复到 noProgressLimit(默认 2)时,插件在 tools/pre-execute 阻断执行,逼智能体换诊断思路。
  • Windows 超长命令拦截:自动阻断超过 4096 字节的命令,以及超过 512 字节的内联脚本(node -e、python -c、pwsh -Command),引导模型先把产物写到磁盘。对应错误 EMBEDDED_SHELL_PAYLOAD_TOO_LARGE,避免 Windows 侧 spawn ENAMETOOLONG。
  • 链式网络命令守卫:在 tools/pre-execute 拦截把 git push、npm publish 这类网络/凭证操作与本地操作链在一起的复合 shell,要求本地操作用 && 串联,网络操作单独成条,避免 Windows 进程句柄挂起和 120 秒超时。对应错误 CHAINED_NETWORK_COMMAND。

失败恢复(failureRecovery)

当 edit 可用却要对已有大文件做破坏性 write 全量覆盖时,插件会阻止。若一次 8KB–1MB 的大写入因未配对的 justification 被拒,插件自动登记 retry_failed_write,只重放那一次写入,而不是让模型从头重新生成整段内容。

收敛提示与遥测(convergence / telemetry)

收敛组件在步数接近预算间隔时追加软性提示,默认 stepInterval: 8,单轮最多 4 条。它做了错误感知抑制:模型正在排查报错时不再提示,避免打断调试。

遥测组件采集模型请求数、工具调用数、复合并行度(parallelismRatio)、首 token 时间(TTFT)、token 消耗和前缀缓存稳定性(prefixChanges),用来做客观 A/B 对比。

安装与启用

推荐用 DSH 插件命令直接加到当前 web profile:

dsh plugin --profile web add dsh-plugin-agent-optimizer

也可以走 npm 或 pnpm:

npm install dsh-plugin-agent-optimizer
pnpm add dsh-plugin-agent-optimizer

按 README 的说法,安装后全部优化默认开启,cordis.patch.yml 里不需要加任何配置行。仓库要求 Node >=22.0.0、DSH >=0.2.2-rc.1,包为 ESM("type": "module")。

只有需要改路径或关掉某个子系统时,才在 cordis.patch.yml 里加一条:

# 仅在自定义默认值时声明 override
- id: agent-optimizer
  config:
    # 关掉提示接管,恢复官方冗长提示
    customPrompt:
      enabled: false

    # 调整批处理上限
    compositeTools:
      maxBatchFiles: 15
      maxBatchEdits: 15

    # 放宽无进展熔断
    runtimePolicy:
      noProgressLimit: 3

典型用法

插件零配置装好后即可用,不需要建额外文件。如果你想主动把精简提示用起来,典型路径是:

1、写一份 ~/.dsh/SYSTEM.md。它会成为 replace-all 模式下的唯一提示权威,约 380 tokens 的体量,写工具约定、交付要求这类你自己的规范即可。
2、保存文件。插件用 fs.watch 热重载,下一次对话自动生效,不必重启 DSH。
3、装好 read_batch / edit_batch 后,一次调用代替多次串行读写,适合跨多个文件的排查与批量替换。
4、需要确认收益时,看遥测里的并发比例、TTFT、token 消耗和 prefixChanges,做同一批任务的 A/B 对比。

适用场景与注意

适合已经在用官方 DSH、希望压掉官方系统提示冗余、减少多文件读写往返,并且需要一些运行时硬约束避免智能体陷入无进展循环的开发者。批处理能力在跨文件排查时更见效,NO_PROGRESS 和 Windows 命令守卫则偏防御。

两点提醒:其一,插件以当前 dsh 进程的权限运行,能读写你让智能体访问的文件系统与网络范围,安装前应检查源码与许可证(本仓库是 MIT,README 自述 CI 状态为 21 个测试通过、TypeScript 严格类型,但仍应自己过一遍代码)。其二,replace-all 会剥离官方提示段落,如果你依赖某些官方 Web GUI 指令,需要确认 SYSTEM.md 里已覆盖。

结尾

这个插件的价值在于把几件重复的手工干预固化进运行时:精简提示省 token、批处理工具减往返、熔断与命令守卫防呆、遥测提供客观对比依据。它以非侵入方式接入官方管道,默认零配置可用。

目录页:https://www.skillhub.cn/plugins/Jaylor-Wang/dsh-plugin-agent-optimizer
GitHub:https://github.com/Jaylor-Wang/dsh-plugin-agent-optimizer

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

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

小夜