前言¶
DeepSeek Harness(DSH)默認會把所有已安裝插件的工具定義、技能目錄、各插件的 system-prompt 段落全部塞進每次請求的上下文。這導致每次請求都要爲「可能用到的東西」買單,而實際只在當前輪次用到的只是其中很小一部分。dsh-capability-composer 把這些資源按「組合(composition)」組織,只讓當前組合進入模型可見範圍,從而在保持插件與技能仍在運行的前提下,縮小每次請求的系統提示體積。
這是什麼¶
dsh-capability-composer 是 DSH 1.5 專用的能力組合器插件,維護者爲 xiamubumu。它將插件與技能按組合管理,根據會話、工作區或全局三個層級解析組合,從而控制模型在系統提示中看到的「可用插件與 MCP 工具」和「可用技能」範圍。插件本身不停止運行,技能仍可手動調用,只改變可見性。
核心功能¶
1. 插件按需加載¶
默認只有 28 個官方核心工具 + 3 個元工具(search_plugins、load_plugin、invoke_tool)常駐。其餘工具不會出現在工具列表中,只在系統提示的「可用插件與 MCP 工具」目錄中顯示名稱,模型通過 invoke_tool 或 load_plugin 按需調用。
2. 技能影子化¶
不在當前技能組合中的技能會被註冊一個影子條目,包含 invocation.modelInvocable: false 和 rank: 0,使其不進入模型可見的技能目錄,但仍可手動通過 /skill-name 調用。
3. 組合解析三層級¶
組合按「最近優先」規則解析:
- 會話級:僅當前會話生效
- 工作區級:基於當前工作目錄(
cwd)生效 - 全局級:
pinned[axis]['*']指定
空字符串、空數組、null 均視爲「未指定」,繼續向上繼承。單個層級可選擇多個條目,取並集。空列表不等於「選擇全部」,而是「不過濾」。
4. 系統提示段落裁剪¶
根據當前組合裁剪各插件的 system-prompt 段落,實測可節省約 2129 tokens/請求(包括 agent-teams:usage、plugin:dsh-docker、plugin:api-client 等)。裁剪失敗時採用「寧可多留」策略,避免誤刪。
5. UI 與即時生效¶
插件在 DSH 的「設置 → 插件」中新增兩個標籤頁:
- Plugin compositions:控制插件組合
- Skill compositions:控制技能組合
UI 操作防抖 400ms 後調用 POST /dsh-capability-composer/state,保存採用「按組合名稱逐項合併」而非整體覆蓋,避免跨位置創建的組合被誤刪。
安裝與啓用¶
僅支持 DSH 1.5(>=0.1.5-rc.2 <0.2.0)。
從 npm 安裝:
dsh plugin add npm:dsh-capability-composer
安裝後,在「設置 → 插件」中啓用該插件,即可在「Plugin compositions」與「Skill compositions」標籤頁中創建組合。
典型用法¶
示例:按工作區隔離插件與技能¶
- 在當前工作區創建一個「data-analysis」組合,只包含數據相關插件(如
dsh-docker、plugin:api-client)。 - 在同一工作區創建一個「web-dev」組合,只包含前端相關插件。
- 在不同會話中切換組合,模型只會看到當前組合內的插件與技能,減少無關上下文。
示例:手動調用非常駐工具¶
// 在系統提示中看到某工具名稱,但不在工具列表中
invoke_tool({
tool: "mcp__vnpy__run_backtest",
args: { ... }
})
需要整組插件時使用:
load_plugin({
ids: ["mcp:vnpy"]
})
示例:關閉系統提示裁剪¶
通過環境變量關閉對插件 system-prompt 段落的裁剪:
export DSH_COMPOSER_PRUNE_PLUGIN_SECTIONS=0
適用場景與注意¶
- 適合需要管理大量插件與技能、希望按會話/項目隔離可見範圍的使用者。
- 插件以當前 DSH 進程權限運行,安裝前建議檢查源碼與許可證。
- 不支持 DSH 1.5 以下版本,也不保證未來版本的兼容性。
短結尾¶
dsh-capability-composer 通過組合與按需可見性,幫助你在保持插件與技能運行的同時,顯著減少每次請求的系統提示體積。更多細節與配置項見目錄頁與 GitHub 倉庫。