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

前言

在 DeepSeek Harness(DSH)裏,子代理默認沿用父會話的模型。本機若通過多個 provider 接入了幾十甚至上百個模型,就會出現兩類浪費:調研類子代理用高價倍率模型回答一句話,編碼類子代理卻落在明確標了「不擅長編碼」的免費檔上。手工爲每次 spawn 點選模型,規模一大就不可行。

dsh-subagent-switch(維護者 AshenSeeker)在子代理啓動時攔截配置,按任務類型從本機候選池裏挑模型,並把選擇理由寫進路由結果。社區目錄將其歸類爲「模型推理」;GitHub 倉庫當前約 2 stars。下文功能與安裝步驟均來自倉庫 README 與 package.json(版本 0.1.1,許可證 MIT,運行環境 Node >= 20)。

這是什麼

一句話:dsh-subagent-switch 是 DSH 桌面 profile 插件(包名 @local/subagent-switch),在 spawn 子代理時爲每次任務選擇「便宜優先、額度可查、能力匹配」的本地模型,並提供獨立控制面板。默認儘量只花訂閱裏已付過的錢;便宜檔裏沒有任何模型真正擅長該任務域時,纔在配置允許下升到付費檔。

它不改動原有會話模型選擇欄,而是在左側欄增加「子代理模型切換」入口。實現上聲明爲純 Node 內置模塊、無額外 npm 依賴;除讀取本機 provider 額度 HTTP 端點外,不發外部網絡請求。

核心功能

任務域與能力打分

任務歸到 coding、research、writing、summarize、analysis 等域(面板預覽裏還包含通用類)。每個模型可帶 goodAt / badAt;路由時對 required 域 +10、optional +2,不擅長 −10/−2。中英文標籤等價(如「編碼」與 coding),內部統一爲英文 canonical id。

能力標籤來源分三層:手寫 config 優先於內置系列預設,無標籤模型可信度最低;面板上區分「手寫 / 推測 / 無標籤」,便於審計而非黑箱。

檔位、額度與升級策略

free 與 free_quota 可合成一個「便宜檔帶」,在檔內按「手動優先級 → 能力分」排序,而不是「見到免費就先選」。只有便宜檔裏沒有任何模型真正聲明擅長該域,且 escalateOnMiss 開啓時,才向付費檔查找滿足 escalateMinScore 的匹配模型;面板與日誌會標「升級付費」並寫明跳過候選與分數。

路由門禁默認 requireQuotaAware: true:僅賬號接入、有可能讀餘額的模型參與自動路由;our-free-model 等無穩定額度的模型可列出但不自動選用,可在面板「放行」。內置默認整段排除 cline provider(excludedProviders)。

攔截 spawn 與可解釋輸出

autoRouteSubagents 默認爲 true,在 startActivation 階段把選定模型寫入子代理會話配置。select() 返回體包含 reason、tier、score、matched、escalated、model 等字段,便於對照面板「本次路由預覽」。

手動優先級(面板 ↑/↓ 或 ~/.dsh/subagent-switch-overrides.json 中 priority > 0)壓過能力分與檔帶順序,且不再觸發付費升級。routingTable 可爲某類任務釘死模型。

控制面板

面板自上而下:當前檔帶順序、忽略的 provider、參與路由的 provider、升級開關、手動 pin 數量;六類任務的路由預覽(含匹配、兜底、升級依據);完整本地模型目錄(檔位、狀態、擅長域、優先級、放行/收回)。README 附帶真實環境截圖說明(百餘模型接入時的預覽示例)。

倉庫 README 稱具備 143 個 node:test 單測。

安裝與啓用

DSH 通過 profile 機制加載插件;官方 desktop profile 一般在 ~/.dsh/profiles/desktop。

從 GitHub 安裝(README 推薦)

cd <你的 profile 目錄>          # 官方 profile 一般在 ~/.dsh/profiles/desktop
pnpm add "git+https://github.com/AshenSeeker/dsh-subagent-switch#v0.1.1"

在 <profile>/cordis.patch.yml 中插入:

- insert:
    - id: '@local/subagent-switch'
      name: '@local/subagent-switch'

重啓 DSH 後,左側欄出現「子代理模型切換」。README 建議用 tag v0.1.1 固定版本;若要跟倉庫最新提交,可將 URL 末尾改爲 #main。

插件市場發現

倉庫提供 market-index.json。可在 DSH「發現」頁的索引源填入:

https://raw.githubusercontent.com/AshenSeeker/dsh-subagent-switch/main/market-index.json

或在 cordis.patch.yml 中爲 plugin-market 配置 config.indexes 加入同一 URL。DSH 插件市場無中央註冊表,索引不會自動掃描,需用戶自行添加索引地址。目錄頁:skillhub.cn 插件頁。

README 另述通過 package.json 的 link:<插件目錄>、bundles 與 node_modules 軟鏈接裝載,改插件宿主代碼後需重啓 DSH(bundle 啓動時加載)。

典型用法

裝上後默認即:免費優先 + 能力匹配 + 路由門禁,無需先改配置。

  1. 打開左側「子代理模型切換」,先看頂部說明區(檔帶、provider 過濾、升級與 overrides 路徑)。
  2. 查看「本次路由預覽」,確認六類任務當前會選中的模型與 matched / 兜底說明。
  3. 在模型表中調整優先級,或對被門禁擋住的模型點「放行」。
  4. 需爲某任務類固定模型時,在配置中使用 routingTable(詳見 README「配置」一節)。

路由決策順序(概要):routingTable 指定 → 全局 pin → 便宜檔帶內按優先級與能力分 → 條件升級付費 → defaultModel 或任意可用模型兜底。

配置可寫在 <profile>/cordis.patch.yml 對本插件的扁平 config:,或插件 config.example.json 下嵌套的 "subagent-switch" 對象;合併後爲扁平鍵。常用項包括 enabled、modelTiers、cheapBand、escalateOnMiss、escalateMinScore、tags、blacklist、excludedProviders、forceOverride、overridesPath 等;數組字段爲替換而非追加。

手動優先級表示例(README):

{
  "priority": { "workbuddy/glm-5.3": 2 },
  "routable": { "our-free-model/big-pickle": true }
}

適用場景與注意

適合誰: 在同一臺 DSH 機器上掛了多個 provider、模型數量多,且頻繁 spawn 編碼/調研/寫作等不同子代理的開發者;希望默認省訂閱額度、又能在便宜檔無匹配時才付費升級的場景。

權限與安全: 插件隨當前 DSH 進程與 profile 權限運行,會調用本機 provider 插件的額度接口並改寫子代理會話模型。安裝前宜閱讀倉庫源碼與 MIT 許可證,確認 cordis.patch.yml 與 overrides 路徑符合你的環境。

生態說明: DSH 主張「一切皆插件」;SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。本插件分發依賴 Git tag、market 索引或本地 link,並非中央應用商店一鍵上架。


若你需要在多模型桌面上讓每次子代理 spawn 都帶上可覈對的路由理由,可從上述 GitHub 安裝或在發現頁添加索引源。源碼與文檔:github.com/AshenSeeker/dsh-subagent-switch;社區條目:skillhub.cn/plugins/AshenSeeker/dsh-subagent-switch。

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

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

小夜