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

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

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

小夜