前言¶
在 DeepSeek Harness (DSH) 中,工作流引擎的 maxConcurrentAgents 和 maxTotalAgents 僅作用於工作流內的 agent() 調用。對於工作流之外根級的直接調用,或後臺/可繼續運行的任務,DSH 缺乏進程級的併發限制。maxParallelToolCalls 限制的是工具調度的併發池,而非活躍運行的任務數。
dsh-subagent-concurrency-limit 插件旨在填補這一空白,它限制同一進程內根級委託准入和本地子代理輪次的併發數。
插件介紹¶
名稱: dsh-subagent-concurrency-limit
作者: blauerberg
定位: DeepSeek Harness 工作流插件
核心功能: 限制同一進程中併發運行的子代理運行和本地子代理輪次,根代理不計入限制。
核心功能¶
- 進程級限制: 對同一進程中
delegationDepthOf(agent) > 0的委託工具和本地子代理輪次進行併發控制。 - FIFO 隊列: 根代理的委託調用按先進先出 (FIFO) 順序等待。
- 自定義工具名: 支持通過配置
subagentToolNames指定非標準委託工具名稱。 - Cordis Patch 集成: 使用 Cordis Patch 方式集成到 DSH。
- 嵌套與遠程支持: 適用於嵌套子代理和遠程進程提供商(如 Codex)。
安裝與啓用¶
安裝插件需要指定 profile(示例中使用 web)和特定的 commit hash:
dsh plugin --profile web add github:blauerberg/dsh-subagent-concurrency-limit#01182275695067510a187cb05b46df49e5fe812c
安裝後,將配置添加到 profile 的 cordis patch 文件中:
- id: subagent-concurrency-limit
name: dsh-subagent-concurrency-limit
config:
maxConcurrentSubagents: 2
subagentToolNames:
- subagent
啓動 profile:
dsh --profile web
使用說明¶
- 併發池: 進程內所有符合條件(委託深度 > 0)的代理共享同一個併發池。
- FIFO 等待: 當併發池滿時,根代理的委託調用進入等待隊列。
- 嵌套行爲: 嵌套的子代理調用同樣消耗併發池。如果池已滿,子代理調用會立即失敗,不會等待,從而避免阻塞正在等待的祖先代理。
- Workflow 調用: 工作流中的
agent()調用和恢復的本地子代理輪次在開始時會使用該併發池。 - 資源釋放: 當子代理輪次變爲空閒、運行結束或代理被銷燬時,許可 (permit) 被釋放。
注意事項¶
- 默認限制: 默認併發限制爲 2。
- 配置約束:
maxConcurrentSubagents必須是正整數;subagentToolNames必須包含至少一個非空工具名稱。 - 根代理不計入: 根代理本身不佔用併發配額。
- 遠程進程限制: 對於遠程進程提供商(如 Codex, Claude Code, ACP),只能統計配置的根級委託准入,以及可觀測的
subagent/start和subagent/end邊界。遠程進程內部的嵌套執行和重啓無法被統計。 - 獨立限制:
maxParallelToolCalls的限制是獨立的,它限制的是工具調用,而非活躍運行的任務。
結語¶
該插件通過控制進程內的併發資源,幫助開發者防止子代理耗盡系統資源。開發者可以在插件目錄頁查看更多詳情,或在 GitHub 倉庫查看源碼。
目錄頁: dsh-subagent-concurrency-limit - SkillHub
源碼: github.com/blauerberg/dsh-subagent-concurrency-limit