前言¶
用官方 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