前言¶
接第三方模型跑智能體時,最常見的問題是「這個路由今天不行了」。限流(429)要立刻換一條路,超時則是偶發的、換一換可能就好了,這兩種情況處理方式並不一樣。手工改配置重啓,或者寫一段自己的重試邏輯,時間一長就散了。
下面介紹 dsh-model-rotation:由 Chrono-rigger 維護的 DSH 插件,思路是把一組模型排成一條鏈,按定義的順序依次試,把限流、超時、無適配器這幾類失敗分別處理,最後落到 DSH 平臺模型上。它屬於模型推理分類,在社區目錄上目前星標爲 0。
這是什麼¶
一句話定位:在 DeepSeek Harness 的 agent/request 瀑布事件上重寫路由,實現「順序失敗轉移 + 超時複測 + 平臺兜底」。
它解決的是:讓一條邏輯上的模型鏈替代單個模型選擇,使得上游波動時不需要人工介入,也不會因爲某一個模型臨時抽風就整體失敗。
它和手寫重試邏輯的區別是:這裏的失敗分類是約定好的(限流立即換,超時累計到閾值才換,配額耗盡立即換,無適配器/認證失敗直接跳過),並且鏈耗盡之後還有一輪複測和一個粘性的平臺兜底。
核心能力¶
- 順序失敗轉移:成員順序就是嘗試順序,可以自由排列。
- 限流(429)立即切換;超時按模型計數,達到每條鏈設定的超時上限才切換。
- 複測輪:第一輪只是超時的模型,在鏈耗盡後還會再給一輪新的超時預算。
- DSH 平臺兜底:鏈條全掛時落到你指定的平臺模型(例如
deepseek-account/deepseek-flash),並且是粘性的,不會因爲第三方路由一恢復就跳回去。 - 不打擾其他選擇:保存的組合會作爲「模型自動切換」provider 下的模型出現在模型選擇器裏,選別的東西時請求完全不被改動。
- 當前無適配器的成員會被標爲「當前不可用」並在巡遊中跳過,而不是讓請求失敗。
安裝與啓用¶
從 npm 安裝:
dsh plugin --profile <your-profile> add dsh-model-rotation
也可以直接從倉庫安裝:
dsh plugin --profile <your-profile> add github:Chrono-rigger/dsh-model-rotation
裝完重啓 DSH。
前置條件:DSH 需要提供 agent/request 與 agent/request-error 瀑布事件(0.2.x 及以上)。
建立組合¶
- 打開 Settings → 模型自動切換(或在 Plugins 下進入插件自己的頁面)。
- 新建組合,填寫名稱並添加成員,選擇器按模型 id 或名稱搜索;用 ↑/↓ 調整順序,順序即失敗轉移順序。
- 可選:指定「DSH 兜底模型」,整條鏈耗盡時使用。
- 保存組合,然後在模型選擇器裏按名稱選中這條鏈。
組合卡片會顯示每個已保存組合的成員、每條鏈的超時上限、當前是否可用。
每條鏈的配置項¶
| 配置項 | 含義 |
|---|---|
| 超時上限 | 一個成員可承受幾次超時才切換,0 表示第一次超時就切換 |
| 短時限流原地重試 | 默認關閉;開啓後,聲明等待時間較短的 429 會在當前模型原地重試而不是立刻切換,適合那些本質已經在賬號池裏輪轉的路由。配額耗盡始終立即切換 |
| 最長等待 / 原地重試次數 | 原地重試等待上限(毫秒),以及一條路被判死前可獲得的原地重試次數 |
狀態機¶
round1 按順序遍歷成員
限流 / 配額耗盡 → 標記死亡,繼續下一個
超時 → 計數 +1,達到上限後繼續下一個
無適配器 / 認證 → 標記死亡,繼續下一個
↓ 全部成員死亡或耗盡
retest 第一輪只超時的模型獲得新的超時預算再測一輪
↓ 耗盡
fallback DSH 平臺模型(指定或自動發現)——粘性
插件不負責的失敗(SERVER、TRANSPORT、EMPTY_RESPONSE 等)原樣交還給 harness 自己的重試策略。
運行時狀態寫在 ~/.dsh/model-auto-switch-state.json(或 $DSH_HOME),屬於盡力而爲:文件損壞時回退到插件配置,不會阻止啓動。
通過工具動手腳¶
agent 側同樣可以操作這套狀態:
model_rotation_catalog— 列出本安裝裏所有可用的 provider/model 組合model_rotation_set— 替換當前鏈的成員model_rotation_status— 查看各條鏈、每個 agent 的實時階段與決策日誌model_rotation_reset— 忘掉失敗記錄,重新開始巡遊
典型用法¶
典型場景是:你有兩三個第三方模型路由,外加一個 DSH 平臺模型。把它們排成鏈,比如:
- 主力第三方模型放第一位,超時上限設 2。
- 備用第三方模型放第二位,超時上限設 2。
- 指定 DSH 兜底模型。
出現限流時立即跳第二位;出現兩次超時也跳第二位。如果第一位只是偶發超時,第一輪結束後在複測輪裏還能再試它一次。全部用盡時落到平臺模型,且不自動跳回。
選器裏把這條鏈選上即可,日常不需要再改任何配置。
另外,如果你的 provider 支持圖片輸入,harness 會註冊一個 -vision 變體,列的是同一批模型,區別只在於接受圖片。選擇器默認隱藏它們,需要時打開「顯示『自動識圖』變體」。純文本任務用普通入口即可(更便宜、上下文相同),只有確實要發圖時才加視覺變體。
與 provider 級輪轉的兼容性¶
插件在 agent/request 瀑布事件裏重寫路由,這個時機早於適配器綁定。所以某成員自身如果已經在 provider id 後面輪轉賬號(如 WorkBuddy、免費模型池等),它的輪轉行爲保持不變:先跑它自己的失敗轉移,整個池子都失敗纔會到達這個插件。
適用場景與注意¶
適合:擔心單一第三方路由不穩定、希望限流與超時分類處理、想用平臺模型做最後防線的 DSH 用戶和智能體開發者。
需要注意的是:
- 插件以當前 DSH 進程的權限運行,會讀寫
~/.dsh下的狀態文件。安裝前先讀源碼並確認許可證。 - 當前資料裏許可證爲 MIT,倉庫用 JavaScript 編寫。
- 依賴低版本 DSH(低於 0.2.x,沒有那兩個瀑布事件)時插件不能工作。
結語¶
它的價值在於把「換模型」從手工操作變成一條有狀態機的鏈:限流即切、超時累計、超時者複測、鏈尾粘性兜底。對你明確配置的模型組合才生效,選別的時候不干擾。
目錄頁:https://www.skillhub.cn/plugins/Chrono-rigger/dsh-model-rotation
GitHub:https://github.com/Chrono-rigger/dsh-model-rotation