dsh-speed-monitor:在 DSH 面板裏測模型的流式速度

前言

用 DSH 接中轉或官方模型,常會碰到一個問題:同樣一句請求,有的接口首字節很快、但吐字慢,有的相反。光看對話響應體感覺不出來,手工拿腳本去點贊也麻煩。dsh-speed-monitor 這個插件把這件事放進了 DSH 自己的界面裏:側欄點開,右側面板就按固定間隔對模型發流式請求,把首字節、總耗時、吞吐畫成曲線。

它由 doraasn 維護,分類是「工作流」,思路是「測速不離開 DSH」:模型清單直接讀 DSH 設置,請求打到供應商配置的 baseURL,密鑰走 DSH 自己的憑據文件。下面介紹它的功能、安裝和用法。

定位與維護

插件名是 dsh-speed-monitor,當前版本 0.9.8,MIT 許可,package.json 裏聲明對 dsh 引擎的要求是 >=0.2.1-rc.2。倉庫在 https://github.com/doraasn/dsh-speed-monitor,社區目錄頁在 https://www.skillhub.cn/plugins/doraasn/dsh-speed-monitor。目錄頁是獨立站點,與 DeepSeek / 幻方沒有官方從屬關係。

核心功能

模型清單來自 DSH。 Client 讀 /api/settings/describe 的 llm-* 命名空間,合併 llm-pi-ai.providers 與 llm-deepseek.models,插件裏不硬編碼模型。離開面板後新加的供應商,重啓後會出現在下拉里。模型顯示名也和 DSH 一致,用供應商 displayName + 模型 name 組合,例如 DeepSeek · DeepSeek-V4.1-Flash。

多模型並列。 每個模型一行,可以增刪,每行的模型和思考擋位各自獨立保存。默認目標寫的是 astra-hub / deepseek-v4.1-flash,異常時回落到清單裏第一個模型。

採樣間隔。 默認每分鐘一輪,可選 1 / 5 / 15 / 30 / 60 分鐘。每輪每個模型先預熱一次再採樣 3 次,取中位數入庫。

單指標曲線。 頂部切換首字節 / 總耗時 / 吞吐,每個模型一條線,圖例點擊可隱藏。懸浮顯示該次採樣的三項數值。時延單位是毫秒(越高越慢),吞吐單位是 tok/s(越高越快)。

斷檔不連線。 相鄰採樣點間隔超過 3 倍中位間隔或 2 分鐘時,曲線會斷開。這是刻意設計,不是數據丟失。

採樣方法

數值不是點一次得來的,方法參考 term-llm benchmark 和 llm-speed-test:

步驟 做法 原因
預熱 每個模型每輪第一次請求丟棄 排除 DNS、TCP 建連、前綴緩存冷啓動
採樣 默認 3 次,可調 1~5 次 單次抖動大,取中位數更穩
聚合 取中位數入庫,同時記錄 min / max 中位數抗離羣點,min/max 看波動
串行 多模型之間間隔 300ms 串行執行 併發會搶帶寬,把數值拉高
失敗 記錄 ok/runs 與錯誤信息 區分「慢」和「掛了」

面板概覽卡顯示的就是中位數:首字節帶 ±(max-min)/2 波動,總耗時帶區間;每條曲線上的一個點 = 一輪採樣(3 個樣本的中位數)。

安裝與啓用

README 給的安裝方式是界面操作,沒有命令行命令:

  1. 側欄 → 插件 → 添加插件,粘貼倉庫地址、.tgz 或本地目錄
  2. 啓用後重啓 DSH,Host 側改動不熱加載
  3. 側欄出現「速度監控」入口,點開即見面板

這裏不要憑插件名去拼安裝命令,README 裏沒有 dsh plugin add ... 這類寫法。也不需要手動 git clone。

指標口徑

讀曲線之前先確認每個字段的含義:

字段 含義
ttfb_ms 請求發出 → 收到響應頭
decode_ms 首個內容事件 → 最後一個內容事件
total_ms 請求發出 → 流結束
tokens completion_tokens
tps_decode 解碼吞吐 = tokens ÷ decode
tps_e2e 端到端吞吐 = tokens ÷ total

首字節偏低、但 total 和 tps_decode 都差,是排隊或生成慢;首字節高而 decode 正常,通常是建連或前綴緩存問題。

數據來源與接口

插件不新建配置體系,複用了 DSH 的設置和存儲:

項 說明
模型清單 DSH 設置(llm-pi-ai / llm-deepseek 等命名空間)
請求 POST {baseURL}/chat/completions,stream: true、stream_options.include_usage: true
存儲 ~/.dsh/storages/speed-monitor.json(配置)、speed-monitor.jsonl(採樣)、speed-monitor.providers.json(模型清單緩存)
密鑰 供應商配置裏的 apiKeyEnv,指向 ~/.dsh/.credentials.yaml 的字段

密鑰不出主機:按 apiKeyEnv 從 ~/.dsh/.credentials.yaml 讀取,Client 拿不到。

面板前端調的是這幾個 HTTP 接口:

方法 路徑 說明
GET /dsh-speed/api/state { config, providers, items, error }
POST /dsh-speed/api/providers 寫入模型清單 { providers }
POST /dsh-speed/api/config 保存 { intervalMinutes, runs, targets }
POST /dsh-speed/api/sample 立即採樣,可帶 { id } 只採一個目標

典型用法

裝好重啓後:

  1. 在 DSH 設置裏配好至少一個 llm-* 供應商,apiKeyEnv 指向 ~/.dsh/.credentials.yaml 裏有值的字段,baseURL 填完整
  2. 側欄點「速度監控」,面板會從清單裏帶上已有模型
  3. 先點 立即採樣 跑一輪,確認行內有數值而不是 --
  4. 確認無誤後把採樣間隔調回默認的 1 分鐘,讓它長期記錄
  5. 前幾條曲線只作爲早期參考,中位數要等每輪採樣攢夠纔有意義

常見問題

現象 處理
面板提示「還沒有可用的模型清單」 DSH 設置裏沒有配置任何 llm-* 供應商
某行一直 -- 該供應商 apiKeyEnv 在 ~/.dsh/.credentials.yaml 裏沒有值,或 baseURL 爲空
曲線不動 採樣間隔被調大;或全部請求失敗(行內會顯示紅色錯誤)
想清零 刪除 ~/.dsh/storages/speed-monitor.jsonl

適用場景與注意

適合已經在 DSH 裏接了多個供應商、想留下一條長期的延遲/吞吐記錄的人,也適合在切換中轉地址前後自己對比一次。它測的是網絡到供應商這一段的流式表現,不含模型實際生成的推理質量。

需要注意幾點:插件以當前 DSH 進程權限運行,會在該進程的工作目錄下讀取和寫入 ~/.dsh/storages/ 下的配置文件。安裝前先打開倉庫覈對源碼與 MIT 許可證,確認其中的接口路徑和存儲路徑符合預期,再決定是否啓用。另外測速請求會真實消耗供應商額度,跑之前確認賬戶餘額。

結尾

dsh-speed-monitor 的價值在於把測速變成 DSH 界面裏的常駐功能,配置複用 DSH 的模型清單和憑據,不需要另起腳本。目錄頁是 https://www.skillhub.cn/plugins/doraasn/dsh-speed-monitor,源碼在 https://github.com/doraasn/dsh-speed-monitor。

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

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

小夜