dsh-model-router:給 DSH 增加虛擬模型提供商並按激活提供商路由請求

前言

DSH 的插件體系允許擴展 harness 的模型選擇、設置卡片和請求路由能力。dsh-model-router 是一個社區插件,用於解決一個具體場景:用戶已經配置了多個提供商和多個模型,希望在模型選擇器中統一看到全部模型,並在每次 LLM 請求發出時,把請求發到該模型當前激活的提供商。

它不在會話中保存真實提供商,而是讓會話始終使用虛擬提供商 model-router,請求發出時再解析當前激活提供商並委派給原有 adapter 管線。下面介紹它的能力、安裝方式和配置項。

這是什麼

dsh-model-routerfonlan 維護,許可證爲 MIT。

它向 DSH harness 註冊一個虛擬模型提供商:

model-router

該提供商會匯聚用戶已添加的所有提供商及其模型,並按 model id 嚴格歸併。每次 LLM 請求發出時,插件會把請求路由到該模型當前激活的提供商。

設置入口位於:

設置 → 插件 → 插件配置 → 模型路由

核心能力

虛擬 model-router 提供商

安裝後,model-router 會出現在輸入框下方的模型選擇器中,也會出現在默認模型設置等模型選擇入口中。

它列出全部已配置提供商的所有模型。模型條目會標註當前激活提供商,例如:

via OpenCode Go

這意味着用戶看到的不是分散在各個提供商下的模型,而是一個統一的模型入口。

模型選擇菜單中的提供商切換

噹噹前會話選擇的是 model-router 模型時,點擊輸入欄的模型選擇器,可以看到「模型 / 提供商 / 推理等級」三欄菜單。

其中「提供商」一欄會列出該模型當前激活的提供商,支持直接切換。切換後,該模型後續請求會使用新的激活提供商。

該入口顯示由 showQuickSwitch 控制。當 router 全局只有一個提供商,或當前模型僅由一個提供商服務時,提供商欄會自動隱藏。

嚴格按 model id 歸併

同一個模型如果出現在多個提供商中,會被歸併爲一條模型條目。

模型展示名、上下文窗口、推理檔位等參數會跟隨當前激活的提供商。請求時,插件會按該提供商的原始模型 ID 發給真實提供商。

匹配時忽略模型 ID 前綴

插件支持匹配時忽略模型 ID 前綴,默認開啓,可通過設置關閉。

例如配置示例中:

deepseek/deepseek-v4-flash

和:

deepseek-v4-flash

可以視爲同一模型,統一顯示不帶前綴的模型 ID。請求時傳入帶前綴的 ID 也能命中同一路由。

這裏只是配置示例,不表示這些模型一定可用。

請求時即時路由

會話中始終保存:

provider=model-router

每次 LLM 請求發出時,插件在進程內解析當前激活提供商,並委派給真實 adapter 管線處理。

這種方式對主 agent、子代理、工具 LLM 調用使用同一路由邏輯。

設置卡片

設置卡片位於:

設置 → 插件 → 插件配置 → 模型路由

在設置卡片中,每個模型下列出其全部提供商,並支持以下操作:

  • 點擊提供商,切換當前實際使用的提供商。
  • 拖拽提供商,調整優先級順序。
  • 未配置 API 密鑰的提供商不可選,並會被標灰。

orderactive 分開維護:

  • 點擊切換隻改 active
  • 拖拽排序只改 order

order 用於維護優先級順序,爲後續自動切換策略預留;當前版本在請求失敗時直接返回錯誤,不做自動切換。

模型顯示順序

模型選擇列表中的 model-router 分組支持三種顯示順序:

custom | name | recent

含義如下:

  • custom:自定義順序,可手動拖拽模型順序。
  • name:按名稱排序。
  • recent:最近使用排序,最近請求過的模型排最前,未用過的排最後。

切換顯示順序和拖拽模型順序後,全局即時生效。

自動同步配置

新增或刪除提供商、模型後,插件會自動同步配置:

  • 消失的提供商從排序中清理。
  • 激活提供商失效時,自動回落到剩餘第一位。
  • 新提供商追加到排序末尾。
  • 消失的模型從自定義順序中清理。
  • 新模型追加到自定義順序末尾。
  • 未配置過的模型自動選擇排序第一位。

modelOrderrecentlyUsed 由插件自動維護,無需手寫。

CLI 和 headless profile

插件不僅用於 web profile。CLI / headless profile 安裝後,同樣會按照配置進行路由。

這類場景下,可以直接手改 settings.yaml 中的 model-router 段。

安裝與啓用

從 npm 包安裝

使用官方安裝命令:

dsh plugin --profile web add @fonlan/dsh-model-router

本地源碼安裝

也可以從倉庫本地構建後安裝。在倉庫目錄下構建出 lib/ 產物後,以本地目錄方式添加:

pnpm build
dsh plugin --profile web add .

掛載與生效

安裝後,插件通過 cordis.patch.yml 自動掛載到目標 profile:

  • 服務端註冊 model-router 提供商與路由配置。
  • web 端註冊 settings.plugin.item 設置卡片。
  • 重啓 profile 後生效。

web profile 重啓後,輸入框下方的模型選擇器中會出現 Model Router 分組。

注意:插件以當前 DSH 進程權限運行。安裝前應檢查源碼和許可證。該插件許可證爲 MIT。

配置示例

路由配置持久化在 settings 文檔的 model-router 命名空間中。下面給出一個配置示例;其中的模型 ID 僅作爲示例,不表示模型可用性。

model-router:
  showQuickSwitch: true
  ignoreModelIdPrefix: true
  modelSort: custom
  modelOrder:
    - deepseek-v4-flash
    - qwen3.7-max
  recentlyUsed:
    deepseek-v4-flash: 1787036509332
  models:
    deepseek-v4-flash:
      order:
        - opencode-go
        - deepseek-official
      active: opencode-go

各配置項含義如下:

showQuickSwitch

控制在模型選擇菜單中是否顯示提供商切換入口,默認開啓。

ignoreModelIdPrefix

控制匹配時是否忽略模型 ID 前綴,默認開啓。

modelSort

控制模型顯示順序,可選:

custom | name | recent

默認值爲:

custom
modelOrder

用於 custom 模式下的模型顯示順序,由插件自動維護。

recentlyUsed

用於 recent 模式,記錄模型 ID 與最後使用時間戳,由插件自動維護。

models.<model>.active

當前實際使用的提供商。

models.<model>.order

提供商優先級順序,用於後續自動切換策略。

典型用法

Web profile

1、安裝插件並重啓 profile。

dsh plugin --profile web add @fonlan/dsh-model-router

2、打開:

設置 → 插件 → 插件配置 → 模型路由

3、在某個模型下點擊提供商,切換當前實際使用的提供商。

4、如需調整優先級,可以拖拽提供商順序。

5、回到輸入框下方的模型選擇器,選擇 model-router 中的模型。發起請求時,會路由到當前激活提供商。

CLI / headless profile

1、安裝插件到目標 profile。

2、重啓 profile。

3、修改 settings.yaml 中的 model-router 段,例如調整:

models.<model>.active
models.<model>.order
modelSort
showQuickSwitch
ignoreModelIdPrefix

4、重啓後按配置路由。

適用場景與注意

適合以下 DSH 用戶:

  • 已經配置多個提供商。
  • 同一個模型可能來自多個提供商。
  • 希望在一個模型選擇器中統一查看模型。
  • 希望手動切換某個模型當前使用的提供商。
  • 希望手動維護提供商優先級順序。
  • 需要在 web、CLI 或 headless profile 中使用同一套路由配置。

需要注意以下幾點:

  • 當前提供商請求失敗時,插件直接返回錯誤;自動切換是後續規劃功能。
  • orderactive 分開維護,點擊切換不會改變拖拽出來的優先級順序。
  • 未配置 API 密鑰的提供商在設置卡片中不可選。
  • 配置示例中的模型 ID 只是示例,不表示這些模型可用。
  • 插件以當前 DSH 進程權限運行,安裝前應檢查源碼和許可證。
  • DSH 社區目錄是獨立站點,與 DeepSeek / 幻方無官方從屬關係,不應視爲官方應用商店。

結尾

dsh-model-router 的價值,是把多個提供商的模型入口收斂到 model-router 這一個虛擬提供商下,並在每次請求發出時解析當前激活提供商。它適合需要統一管理多提供商模型入口、手動切換當前提供商並維護優先級的 DSH 用戶。

目錄頁:未提供已覈實 URL。

GitHub:

https://github.com/fonlan/dsh-model-router
羽毛球分组比赛记分
小程序二维码

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

小夜