dsh-subagent-switch:爲 DSH 子代理按任務自動選本地模型

前言

在 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」等關鍵詞可命中並安裝。

按 README 在 profile 的 package.json 裏用 link:<插件目錄> 依賴並加入 dsh.profile.bundles,再在 node_modules 下建立指向源碼的軟鏈接(或 Windows junction),最後重啓 DSH。修改宿主側 lib/*.js 需重啓;瀏覽器側 lib/ui/client.js 刷新頁面即可。

典型用法

裝上之後默認即可用:免費優先 + 能力匹配 + 門禁,無需先改配置。打開面板後建議按 README 順序查看:

  1. 頂部說明區:檔帶順序、忽略的 provider、參與路由的 provider、是否允許升級付費、手動 pin 數量、overrides 文件路徑。
  2. 本次路由預覽:六類任務當前會選中的模型、檔位、是匹配還是兜底(例如「兜底 0 分 · 8 個並列」表示按目錄順序而非能力匹配)。
  3. 模型表:檔位、狀態、擅長/不擅長、優先級;可對被門禁擋住的模型點「放行」。
  4. 任務類型指定:對某類任務釘死模型時使用 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.json engines)。

結尾

dsh-subagent-switch 把「子代理用哪條本地模型」從繼承父會話,改成按任務、按能力、按額度與檔帶策略自動路由,並在面板裏預覽與微調。目錄頁:https://www.skillhub.cn/plugins/wld12314/dsh-subagent-switch;源碼與完整說明:https://github.com/wld12314/dsh-subagent-switch。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜