用 dsh-model-router 給 DeepSeek Harness 做模型路由和成本面板

前言

DeepSeek Harness(dsh)把智能體循環做成「一切皆插件」:模型、工具、界面槽位都可以掛上去。日常用網頁界面寫代碼時,會話裏往往混着兩類請求:一類是「這個報錯是什麼意思」「繼續」這種短問,一類是改架構、讀大文件、跑多步工具的重活。如果全程走主模型,簡單問答也會喫前綴緩存和推理預算;如果全程走便宜模型,複雜任務又容易掉質量。

社區插件 dsh-model-router 做的是中間這一層:先判斷這一步是不是簡單問題,簡單的用 flash 直答,重活仍走主模型;主模型短暫故障時可以降級重試一次;輸入框下方再掛一塊 token / 緩存命中 / 估算成本面板。本文按插件目錄頁、GitHub 倉庫 README / package.json / 源碼交叉覈對後整理。

社區插件目錄(https://deepseek-harness-plugin.com)是獨立站點,和 DeepSeek / 幻方沒有官方從屬關係,不要把它當成官方應用商店。GitHub 上還有另一個同名倉庫 superboy911/dsh-model-router,做的是關鍵詞路由和隔離生圖,和本文介紹的不是同一個插件。

這是什麼

dsh-model-router 是一款面向 DeepSeek Harness 網頁界面的界面增強插件,由 tianji-qingtian 維護,許可證 MIT,主要語言 JavaScript。目錄頁收錄於 2026-08-12,分類爲「界面增強」。倉庫 package.json 當前版本爲 0.8.1,GitHub 最新 Release 也是 v0.8.1(2026-08-14)。插件聲明的客戶端平臺是 web,需要掛到 web profile 才能看到面板。

它解決三件事:

  • 簡單問題不要進主模型:零前綴 flash 作答,不碰主會話的前綴緩存。
  • 瞬時故障不要整輪失敗:限流、服務端錯誤、超時、空響應時降到便宜模型再試一次。
  • 用量要能看見:按會話摺疊真實適配器 token,並按模型檔位估一個帶 的費用。

Harness 官方倉庫寫明當前仍是 developer preview,不兼容變更是預期內的。插件 README 也提醒:升級 harness 後,僞造 step 包絡這一段值得複查。

核心功能

便宜模型裁判路由

請求先走 agent/pre-step 瀑布。明顯的重活(強關鍵詞或超長文本)直接進主模型,不加額外延遲。其餘請求會做一次零前綴 flash 裁判:只輸出 SIMPLEAGENTIC 一個詞,上限 64 token,並關掉思考。裁判會帶上上一條 assistant 回覆,用來識別「它 / 這個 / 繼續」這類依賴上下文的追問,避免把追問誤判成可以無上下文直答。

便宜 / 強模型對不是寫死的,運行時從 llm.listModels 的目錄裏按 id 匹配:

  • 便宜候選:flash|chat|mini|turbo|haiku|lite|air|nano
  • 強候選:pro|reasoner|opus|sonnet|max|ultra|premium|r1

原生 DeepSeek 適配器下,文檔寫的配對是 deepseek-v4-flashdeepseek-v4-pro

回答前先問,再直答

v0.8.0 起,auto 模式下命中 SIMPLE 不會立刻作答,而是彈出 harness 自帶的問題 UI,讓用戶選:

  • ⚡ 快速回答(flash):更快、成本更低
  • 主模型回答:走正常智能體流程

選主模型、關掉彈窗、子代理會話,或沒有問題 UI 時,都會回退到正常流程。問題文案跟隨提問語言(中 / 英)。

用戶選快速回答後,插件拒絕當前步驟,用便宜模型做一次零前綴單次流式調用,再把問答寫進會話日誌(僞造 step/startassistant/messagestep/end 包絡)。界面上看起來仍是普通一問一答,答案前綴帶 ⚡ 快速回答 / Quick answer · 標記。主模型不參與這一輪,也不會產生子代理會話、relay 卡片或 toast,主會話的模型和前綴緩存保持不動。

Auto / 關閉 與故障降級

快速回答可以按會話開關,三處入口做同一件事:

  • 輸入框下方面板的 Auto / 關閉
  • 斜槓命令 /router auto/router off
  • 模型可見工具 route_model(參數 tierauto | off

沒有「按請求指定模型」的配置項。auto/off 狀態由會話投影從 command/run 事件摺疊,重啓後仍保持;瞬時故障降級標記是進程本地的,harness 退出即丟。

降級只覆蓋這些瞬時錯誤:RATE_LIMITSERVERTIMEOUTEMPTY_RESPONSE。命中後把該輪標成降級,返回 { kind: 'retry' },重試進入 agent/request 時落到便宜模型,每輪最多一次。其餘錯誤交給 provider 自己的重試策略。

另外,agent/request 在沒有路由決策時會把模型拉回 agent 配置默認值,避免僞造 header 或重啓後的陳舊持久化 header 粘住。

輸入框下方的用量面板

面板掛在 conversation.composer.dock,中英文案走 harness 的 locale 服務。內容包括:

  • Auto / 關閉開關
  • 當前模型
  • miss/out/cache%/≈$ 一行
  • QA×N 快速回答計數(每次直答會短暫高亮)
  • 分模型用量明細

數字來自會話投影 modelRouter,摺疊 request/headercommand/runassistant/message 事件。用的是適配器上報的真實 token(輸入 / 輸出 / 緩存讀 / 緩存寫 / 推理),不是前端自己估的調用次數。投影可重放,冷啓動會話也能出數。安裝前已經寫進日誌的歷史也會被計入,這是文檔寫明的預期行爲。

成本是檔位估算,單位 USD / 百萬 token,寫在 src/index.js 頂部:

const PRICE_TABLE = [
  { test: CHEAP_RE, input: 0.27, output: 1.10, cacheHit: 0.07 },
  { test: STRONG_RE, input: 0.55, output: 2.19, cacheHit: 0.14 },
]

面板數字始終帶 。緩存命中按緩存價計,不按輸入價。harness 的 TokenUsage 字段是不相交的:inputTokens 已經去掉緩存讀(DeepSeek 上報 prompt_tokens = hit + miss,適配器把命中扣掉了),所以面板顯示 miss … · cache N%,命中率是 hit / (hit + miss)。文檔說健康的長對話通常在 90% 以上。價格表可以改成自己賬號的實際報價。

安裝與啓用

目錄頁給出的安裝命令是:

dsh plugin add github:tianji-qingtian/dsh-model-router

dsh CLI 需要在 PATH 上。如果之前只用 npx 跑過 harness,會報 command not found: dsh。倉庫 README 的前置步驟是先全局安裝:

npm install -g @deepseek-ai/dsh

也可以用 pnpm add -g @deepseek-ai/dsh(全局 bin 目錄要在 PATH 上),或把後面的命令都加上 npx @deepseek-ai/dsh 前綴。

這個插件的客戶端聲明是 web 平臺。倉庫 README 建議裝進 web profile,並固定 Release tag。README 示例仍寫 #v0.7.2,倉庫當前最新 Release 是 v0.8.1(含「快速回答前先問用戶」)。可復現安裝建議釘最新 tag:

dsh plugin --profile web add "github:tianji-qingtian/dsh-model-router#v0.8.1"
dsh --profile web

add 只改 profile 文件,運行中的實例不會熱加載。重啓後,輸入框下方應出現 ⚡Router 面板;宿主半場加載完成後會註冊 /routerroute_model。可在 Settings → Plugins 裏確認列表中有 dsh-model-router

目錄頁也提示:如需可復現安裝,可寫成 github:tianji-qingtian/dsh-model-router#commit。某個會話裏可能還跑着一個同名的動態原型(只活在當前進程),和裝進 profile 的 bundle 不是一回事,harness 退出即消失。

插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。裝之前應閱讀倉庫源碼和 MIT 許可證。

典型用法

裝好並重啓 web profile 之後,可以按下面的順序驗證。

  1. 打開網頁界面,看輸入框下方是否出現 ⚡Router 面板。開關應能在 Auto 和關閉之間切換。
  2. 保持 Auto,發一條自包含的短問題,例如「Python 裏 listtuple 有什麼區別」。裁判判成 SIMPLE 時會彈出 ⚡ 快速回答(flash) / 主模型回答。選快速後,回覆應帶 ⚡ 快速回答 標記,面板上的 QA×N 會加一。
  3. 再發「繼續展開第二點」這類追問。按文檔設計,裁判能看到上一條回覆,這類依賴上下文的問題應走主模型,而不是無上下文直答。
  4. 用斜槓命令顯式開關:
/router auto
/router off

參數只能是 autooff,寫錯會返回 usage: /router auto|off

  1. 也可以讓模型調 route_model,參數 tier 同樣是 autooff。工具返回裏會帶當前模式,以及目錄裏解析到的便宜模型 id。
  2. 看面板上的 miss/out/cache%/≈$ 和分模型明細。長會話裏 cache 命中率如果長期很低,優先檢查是不是每次都在換模型或清上下文,而不是先改價格表。

適用場景與注意事項

比較適合這些情況:

  • 主要在 DeepSeek Harness 網頁界面裏幹活,希望簡單問答走 flash,重構 / 多工具任務仍走主模型。
  • 想在輸入框旁邊看到本會話的 token、緩存命中和估算費用,而不是事後去賬單頁對賬。
  • 偶爾碰到限流、超時、空響應,希望該輪自動降到便宜模型再試一次,而不是整段對話停住。

使用前要注意:

  • 客戶端平臺是 web。只跑終端 TUI、不啓網頁界面時,裝了也看不到 dock 面板。
  • package.json 要求 Node.js ^22.19.0 || >=24.0.0,並聲明對 @deepseek-ai/cordisdsh-commandsdsh-llmdsh-session 等包的 peer 依賴。harness 升級後如果這些包對不上,需要對照 Release 再裝一次。
  • 直答會把僞造 step 包絡寫進會話日誌,這是插件和 harness 耦合最深的部分。官方 harness 仍在 developer preview,升級後應複查快速回答是否還符合會話不變量。
  • 面板費用是檔位估算,不是賬單。改 PRICE_TABLE 才能貼近自己的報價。
  • 插件以當前 dsh 進程權限運行。安裝前檢查 https://github.com/tianji-qingtian/dsh-model-router 的源碼和許可證;不要把目錄頁當成官方背書。

小結

dsh-model-router 把「簡單問題 flash 直答、瞬時故障降級、會話用量可視化」收進 DeepSeek Harness 的網頁輸入框下方。路由決策發生在 agent/pre-step,費用數字來自可重放的會話投影,開關只有 auto / off,沒有額外的按請求模型配置。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-model-router/

GitHub:https://github.com/tianji-qingtian/dsh-model-router

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

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

小夜