前言¶
DeepSeek Harness 允許在代理之間進行協作,通常通過調用子代理來分擔任務。默認情況下,這些子代理會繼承父級會話的模型配置。dsh-submodel-change 插件允許用戶在 AI 決定調用子代理時,選擇該子代理由哪個模型驅動。這解決了在處理複雜任務時,需要子代理使用不同模型(例如用推理模型處理邏輯,用普通模型處理總結)的需求。
插件簡介¶
這是由 Anna-la 維護的一個 DeepSeek Harness 插件,屬於“模型推理”類別。它通過利用 agent/request waterfall 的“替換 LlmCallConfig”能力,在子代理發起請求前攔截模型路由,實現模型選擇。
核心功能¶
- 彈窗選擇:在 GUI 中,當 AI 判斷需要派發子代理時,會話裏會彈出一張卡片供用戶選擇模型。
- 零依賴:不依賴任何
@deepseek-ai/*包,純 JavaScript (ESM),無需構建。 - 僅對 in-process 生效:只對
provider: spawn生效。其他 provider 的 child 事件帶不到本進程,自然跳過,不影響原有功能。 - 複用與繼承:
- 默認同一父會話的後續子代理複用第一次的選擇。
- 嵌套子代理自動繼承父路由,不會連環彈窗。
安裝與啓用¶
安裝插件後必須完全重啓 DSH Desktop 才能生效。
方式 A:自動安裝腳本(推薦)¶
將整個 dsh-submodel-change 文件夾放到一個穩定的位置,例如:
C:\Users\Jason\Desktop\dsh-better\dsh-submodel-change\
在該目錄下執行安裝腳本:
node tools/install.mjs
腳本會自動處理 junction 建立和 cordis.patch.yml 的配置。如果補丁文件被別的工具重寫過,再次執行該命令即可恢復。
注意:不要在
cordis.patch.yml裏用name: 'file:///...'掛載。Desktop 會把這種行判定爲“未安裝”,插件雖然加載了,但拿不到userQuestions/llm/agents服務,導致插件無法工作。
方式 B:作爲 bundle 安裝¶
在 dsh-submodel-change 的上一級目錄執行:
dsh plugin --profile web add ./dsh-submodel-change
卸載命令爲:
dsh plugin --profile web remove dsh-submodel-change
配置項¶
在補丁文件的插件行下添加 config: 即可覆蓋默認值:
- insert:
- id: submodel-change
name: '@jason666not/dsh-submodel-change'
config:
enabled: true # 總開關
askOncePerParent: true # 同一父會話的後續子代理複用第一次的選擇;
# 設爲 false 則每個子代理都重新彈窗
allowDefault: true # 選項裏包含「使用默認模型(跟隨父級,不修改)」
extraModels: [] # 手動追加適配器目錄未列出的模型路由,
# 格式 ['provider/model', ...]
工作原理¶
- 識別子代理:攔截帶有
origin: 'subagent'與parentSessionheader 的請求。 - 提問位置:在
agent/requestwaterfall 中觸發,向實時根 agent(通過userQuestions.ask)彈窗。提問總髮生在根會話,UI 卡片也渲染在根會話。 - 注入模型:用戶選中的
{ provider, model }被寫回該次LlmCallConfig,子代理隨後使用該路由發起請求。 - 清理:在
subagent/end/agent/disposed事件中釋放選擇與提問標記。
注意事項¶
- 需要完全重啓 DSH Desktop 才能加載服務。
- 僅對
provider: spawn生效。 - 需要依賴
userQuestions/llm/agents服務。
結語¶
該插件通過官方擴展點提供了子代理模型選擇的靈活性,適合需要在多模型策略下精細控制子任務執行的智能體開發者。