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