前言¶
在 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 插件頁。
本地 link 開發¶
README 另述通過 package.json 的 link:<插件目錄>、bundles 與 node_modules 軟鏈接裝載,改插件宿主代碼後需重啓 DSH(bundle 啓動時加載)。
典型用法¶
裝上後默認即:免費優先 + 能力匹配 + 路由門禁,無需先改配置。
- 打開左側「子代理模型切換」,先看頂部說明區(檔帶、provider 過濾、升級與 overrides 路徑)。
- 查看「本次路由預覽」,確認六類任務當前會選中的模型與
matched/ 兜底說明。 - 在模型表中調整優先級,或對被門禁擋住的模型點「放行」。
- 需爲某任務類固定模型時,在配置中使用
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。