前言¶
在 DeepSeek Harness(DSH)裏 spawn 子代理時,默認會繼承父會話正在用的模型。若本機通過多個 provider 接入了大量模型,就會出現兩類浪費:調研類子代理用高價倍率模型回答一行問題,編碼類子代理卻落在明確不擅長代碼的免費檔上。手動爲每次 spawn 點選模型,在目錄長到幾十、上百條時幾乎不可行。
下面介紹社區插件 dsh-subagent-switch(維護者 wld12314,GitHub:wld12314/dsh-subagent-switch)。它在子代理激活時攔截 spawn,按任務類型在本機候選模型裏做一次路由,並把選擇理由寫進結果;同時提供獨立控制面板,不改動 DSH 原有的會話模型選擇欄。插件分類爲「模型推理」,當前 GitHub 星標爲 0,版本 0.1.1,許可證 MIT。
這是什麼¶
dsh-subagent-switch 是給 DSH 的子代理自動挑模型的桌面插件:每次 spawn 子代理時,先彙總本機已接入的模型,再按「便宜優先 + 能力匹配 + 額度是否可用」爲本次任務選一個,並把結果寫入子代理的會話配置。默認儘量只使用訂閱裏已付過錢的檔位;只有在便宜檔裏沒有任何模型真正聲明擅長該任務域時,才條件允許升到付費檔。
DSH 生態裏能力以插件形式擴展;社區目錄頁在 skillhub.cn,與 DeepSeek / 幻方無官方從屬關係,安裝前請自行查看源碼與許可證。
核心功能¶
按任務域與能力打分,不是隻看價格¶
任務歸到 coding、research、writing、summarize、analysis 等域。每個模型可有 goodAt / badAt 標籤;命中 required 域 +10、optional +2,不擅長 −10/−2。free 與 free_quota 合成一個檔帶後仍按能力分排序——明確標了不擅長編碼的免費模型,不會壓過倍率略高但真擅長編碼的模型。
免費優先與條件升級付費¶
只有便宜檔裏沒有任何模型真正聲明擅長該域,且配置允許時,才往付費檔升,且只升到「真匹配」的模型。面板會標「升級付費」,日誌說明被跳過的候選與分數;不爲 0 分猜測多花數倍 token。
路由門禁與額度¶
默認只讓「賬號接入、能讀餘額、相對穩定」的模型進入自動路由;例如 README 中 our-free-model 類 provider 可列在面板但不參與自動選擇,也可通過「放行」手動納入。插件會調用各 provider 插件自帶的 HTTP 端點讀取餘額,餘額爲 0 時該 provider 下模型整體退出選擇。
可審計的選擇理由¶
路由預覽與 select() 返回體包含 reason、tier、score、matched、escalated 等字段,區分能力匹配、釘死指定、兜底按目錄順序等情況。能力標籤來源分三層:手寫 config、內置系列預設、無標籤;面板上標「手寫 / 推測 / 無標籤」。中英文標籤均支持,內部統一爲英文 canonical id。
控制面板與手動優先級¶
左側欄「子代理模型切換」入口打開獨立面板:檔位與 provider 策略、六類任務的「本次路由預覽」、本地模型目錄(優先級 ↑↓、黑名單、放行/收回)。手動優先級 >0 時壓過能力分與檔帶順序,且不再觸發升級付費。實現爲零依賴 Node 內置模塊,除讀本機 provider 額度端點外不發外部請求;README 稱含 143 個單測(node:test)。
安裝與啓用¶
從 GitHub 安裝(README 推薦)¶
先進入你的 profile 目錄(官方 profile 一般在 ~/.dsh/profiles/desktop),執行:
cd <你的 profile 目錄>
pnpm add "git+https://github.com/wld12314/dsh-subagent-switch#v0.1.1"
在 <profile>/cordis.patch.yml 中插入:
- insert:
- id: '@local/subagent-switch'
name: '@local/subagent-switch'
重啓 DSH 後,左側欄會出現「子代理模型切換」。使用 tag v0.1.1 是爲了安裝版本不隨倉庫 main 漂移;若要跟最新提交,可將 URL 後綴改爲 #main。
通過插件市場發現¶
DSH 的「發現」頁讀取 format-1 市場索引,無中央註冊表,需自行添加索引 URL。在插件頁「發現」的索引源中填寫:
https://raw.githubusercontent.com/wld12314/dsh-subagent-switch/main/market-index.json
或在 <profile>/cordis.patch.yml 裏爲 plugin-market 配置 indexes 包含上述地址。搜「子代理」「模型路由」「quota」等關鍵詞可命中並安裝。
源碼 link 開發¶
按 README 在 profile 的 package.json 裏用 link:<插件目錄> 依賴並加入 dsh.profile.bundles,再在 node_modules 下建立指向源碼的軟鏈接(或 Windows junction),最後重啓 DSH。修改宿主側 lib/*.js 需重啓;瀏覽器側 lib/ui/client.js 刷新頁面即可。
典型用法¶
裝上之後默認即可用:免費優先 + 能力匹配 + 門禁,無需先改配置。打開面板後建議按 README 順序查看:
- 頂部說明區:檔帶順序、忽略的 provider、參與路由的 provider、是否允許升級付費、手動 pin 數量、overrides 文件路徑。
- 本次路由預覽:六類任務當前會選中的模型、檔位、是匹配還是兜底(例如「兜底 0 分 · 8 個並列」表示按目錄順序而非能力匹配)。
- 模型表:檔位、狀態、擅長/不擅長、優先級;可對被門禁擋住的模型點「放行」。
- 任務類型指定:對某類任務釘死模型時使用
routingTable。
路由決策順序(摘要):routingTable 指定 → 全局 pin(優先級 >0)→ 便宜檔內按優先級與能力分 → 命中則返回 → 條件允許則升級付費檔 → 最後 defaultModel 或任意可用模型兜底。
手動優先級與放行可寫入 ~/.dsh/subagent-switch-overrides.json(或通過 overridesPath 指定),例如:
{
"priority": { "workbuddy/glm-5.3": 2 },
"routable": { "our-free-model/big-pickle": true }
}
更細的鍵名見 README「配置」表:enabled、modelTiers、cheapBand、escalateOnMiss、escalateMinScore、excludedProviders(內置含 cline)、requireQuotaAware、autoRouteSubagents、forceOverride 等;可在 cordis.patch.yml 對本插件寫扁平 config:,或參考倉庫內 config.example.json 嵌套寫法,二者會合併爲扁平對象交給路由器。
適用場景與注意¶
適合:本機接多個 provider、模型目錄很長,且希望子代理按編碼/調研/寫作等任務自動落到合適檔位,同時需要看見每次選擇的理由與是否升級付費。
注意:
- 插件在當前 DSH 進程權限下運行,安裝前應閱讀倉庫源碼與 MIT 許可證,確認 provider 排除名單、門禁與
forceOverride等行爲符合你的安全與成本預期。 autoRouteSubagents爲 true 時會攔截子代理的startActivation改模型;若調用方已顯式指定模型,默認不會覆蓋,除非開啓forceOverride。- 數組型配置項爲替換而非追加;寫
[]即清空。 - 需要 Node >= 20(見
package.jsonengines)。
結尾¶
dsh-subagent-switch 把「子代理用哪條本地模型」從繼承父會話,改成按任務、按能力、按額度與檔帶策略自動路由,並在面板裏預覽與微調。目錄頁:https://www.skillhub.cn/plugins/wld12314/dsh-subagent-switch;源碼與完整說明:https://github.com/wld12314/dsh-subagent-switch。