dsh-cache-probe:在 DSH 裏直接測渠道的提示詞緩存命中率與響應速度

前言

做 DSH 渠道接入或模型推理調優時,經常要回答幾個問題:這個渠道的提示詞緩存到底命中了多少?TTFT 和輸出速度是多少?模型能否按要求輸出一段可用的 SVG?過去要拆開單獨搭測試腳本,或者藉助外部工具,結果和渠道的真實運行態對不上。

下面介紹的 xymy666/dsh-cache-probe 是一個 DSH 插件,它在 DSH Web GUI 裏開一個獨立的「渠道測試」頁面,直接對已配置的渠道跑緩存命中率、響應速度和鵜鶘 SVG 三項測試。頁面走插件自己的 Host HTTP 接口,不註冊 slash 命令,不往對話寫命令卡片,也不會產生模型可見的消息。

這是什麼

由 xymy666 維護的 DSH 插件,分類爲模型推理。它的定位是「一個頁面測渠道」,解決的是渠道接入階段缺少可視化、可復現的緩存與速度驗證手段的問題。README 裏列出的兩個入口都打開同一個頁面:輸入框下方統計徽標行末尾的「渠道測試」按鈕,以及側邊欄的「渠道測試」頁面圖標。頁面替換中欄會話,點「返回會話」回到原會話;切換頁面再回來,最近一次結果仍在。

核心功能

頁面提供三個測試,各自獨立參數。

1、測緩存:一次預熱 + N 次複測,載荷爲固定模板加隨機 nonce 的長前綴(默認 12,000 字符),每輪內容完全相同,讀取真實 usage 計算命中率。
2、測速:N 輪短提示詞,每輪帶唯一 nonce 避免命中提示詞緩存把 TTFT 測低,測 TTFT、輸出 tok/s、總耗時。
3、鵜鶘測試:一輪請求讓模型畫「騎自行車的鵜鶘」SVG,頁面提取並渲染預覽,同時記錄 TTFT、tok/s、總耗時、推理/正文 token 和 SVG 字符數。
4、全部運行:緩存 → 測速 → 鵜鶘,逐項更新卡片,一項失敗不會跳過另一項。

三項測試的思考等級各自獨立,選項來自當前模型聲明的 reasoning.efforts,包含 無思考(off) 與 低 / 高 / 最高 等模型實際支持的檔位,默認都是 low。選 off 時請求帶 reasoning_effort: "none";選 low/high/max 時思考過程不進入正文、不展示、不保存,只從 usage 的 reasoningTokens 讀數量。

緩存命中率的口徑與 DSH 內置統計一致:

cacheReadTokens ÷ (未緩存輸入 + cacheReadTokens + cacheWriteTokens)

緩存表和測速表最後一行是平均:token/耗時取算術平均;緩存命中率按「總緩存讀 ÷ 總 prompt」加權,且只統計複測輪、不含預熱。失敗輪不參與平均。多輪測速給出中位數與範圍,只有 1 輪時不寫「中位」。

測試過程中結果區顯示全寬進度面板:當前階段、已用時間、預熱/複測步驟條、等待倒計時、逐輪實時指標,以及「停止測試」按鈕。正常完成後進度面板收起;取消後保留已完成輪次的進度面板,標記「測試已停止」,不生成不完整的結果卡。

安裝與啓用

需要帶 Web GUI 的 DSH profile(web 或 desktop);CLI/headless profile 不顯示頁面。

從 npm 安裝(推薦),npm 包是預構建版本,安裝時不需要 allowBuilds 授權:

dsh plugin --profile web add dsh-cache-probe

desktop profile 把 web 換成 desktop。

npm 不可用時可以從 GitHub 安裝:

dsh plugin --profile web add https://github.com/xymy666/dsh-cache-probe

本地開發時用 link: 指向 checkout:

dsh plugin --profile web add "link:/absolute/path/to/dsh-cache-probe"

安裝後重啓 DSH 一次,讓 Host 路由加載,之後刷新頁面。

啓用後確認三點:輸入框下方只有一個「渠道測試」按鈕;側邊欄出現「渠道測試」圖標;點擊任一入口打開頁面,供應商下拉能列出已啓用渠道,模型下拉只顯示所選供應商的模型。

典型用法

打開頁面後,先選供應商再選該供應商的模型,每個供應商會記住上次選的模型,切回來時自動恢復。沒有可用模型的供應商仍會顯示,標註「無可用模型」,選中後模型下拉爲空、運行按鈕禁用。

點「測緩存」先跑一次預熱,等待 10 秒後複測 2 輪,結果卡顯示命中率、逐輪表格、結論和可複製的文本報告,緩存卡還會顯示來源會話的真實流量對照(只彙總打開頁面時所在會話已結算的 assistant/message,按 provider 分組,不包含本次測試)。

點「測速」跑 3 輪短提示詞,每輪 prompt 約 30 token。輸出列下方顯示 思考 N 字 / 正文 M 字,由插件統計流裏的 reasoning-delta 與 text-delta,不用 token 拆分。

打開「高級設置」爲緩存、測速、鵜鶘分別調整參數,參數寫入 localStorage,下次打開繼續使用:

項目 參數 默認 範圍
緩存測試 載荷字符數 12,000 2,000–200,000
緩存測試 複測次數 2 ≥1(無上限)
緩存測試 等待秒數 10 0–120
緩存測試 單次超時 120s 10–300
測速 目標輸出 tokens 256(思考關閉時即上限;開啓時自動 +4,096) 32–2,048
測速 輪數 3 ≥1(無上限)
測速 輪間隔 1s 0–30
測速 單次超時 120s 10–300
鵜鶘測試 單次超時 120s 10–300

思考等級不是 off 時,實際發送的上限是 目標 + 4,096,高級設置裏會顯示本輪實際生效的上限。原因是 DSH 的 outputTokens 已包含思考部分,若「目標輸出 tokens」只按正文估算,思考會喫光預算、正文爲 0 字。

頁面內的供應商/模型選擇隻影響本頁測試,不會切換當前會話的聊天模型。

Host 接口

頁面使用兩條同源 HTTP 路由,不經過命令系統:

GET  api/dsh-cache-probe/models?sessionId=...
POST api/dsh-cache-probe/run

models 返回 active providers、各自模型、模型的 reasoning.efforts 和默認路由。run 接收 JSON 請求體,kind 支持 cache、speed、pelican,鵜鶘返回 pelican.attempt、text、svg、svgSource、svgLength、report、summary。單次只接受一項,「全部運行」由頁面順序發三次請求。請求頭帶 x-dsh-cache-probe-stream: 1 時,run 改爲返回 application/x-ndjson 流,逐行推送 start → attempt-start → attempt → wait → wait-done → done,頁面據此實時填表。

安全圍欄:只允許 loopback socket + loopback Host;拒絕 cf-connecting-ip / x-forwarded-for 代理跳;拒絕 sec-fetch-site: cross-site,Origin 必須與 Host 同源;有 remoteWebUiPairing 時已配對設備 cookie 作爲第二條放行路徑;POST 額外要求 x-dsh-cache-probe: 1 請求頭;請求體上限 64 KiB。

適用場景與注意

適合剛接入新渠道、需要確認緩存是否生效、或做模型推理速度迴歸的 DSH 開發者。三個測試都會發送真實計費請求,README 給出的默認成本參考:默認緩存 3 次請求(預熱 + 2 次複測),每次約 3,000 prompt token + 32 output token;默認測速 3 輪 × 256 output token;默認鵜鶘 1 輪不設輸出上限(落到模型配置上限,README 在 a6 上實測約 1.2 萬 output token)。複測次數和測速輪數都不設上限,輪次越多耗時和費用越高,每輪都是真實請求。

插件以當前 DSH 進程權限運行,頁面不會讀取或打印 API Key,憑據由 DSH 的 provider 配置提供。同一時間只允許一個測試,第二個請求返回 409「已有渠道測試正在進行」。安裝前建議檢查源碼與許可證(MIT,版本 0.5.7)。

已知限制:頁面只在帶 webServer 與 Web GUI 的 profile 加載;實時逐輪進度與「停止測試」需要新版 Host,舊 Host 會自動回退到一次性 JSON 結果,升級後必須重啓 DSH 才能啓用流式進度;結果保存在 localStorage,只保留全局最近一次緩存、測速和鵜鶘結果;鵜鶘 SVG 只做提取和基礎清理(去腳本、事件屬性、外鏈、foreignObject),清理後仍不安全的 SVG 不渲染,只顯示原始文本,鵜鶘測試不判斷畫得像不像。

開發

本地開發的命令:

git clone https://github.com/xymy666/dsh-cache-probe.git
cd dsh-cache-probe
node scripts/build.mjs     # 生成 lib/client.js(內聯 options/stats/client)
node --test                # 98 個單測
node scripts/verify.mjs    # 包結構 + bundle + profile 安裝狀態

主要目錄:lib/index.js 是 Host 路由入口,src/http.mjs 實現 loopback/配對圍欄與 JSON body 處理,src/routes.mjs 是 models / run 兩條 Host 路由,src/probe.mjs、src/speed.mjs、src/pelican.mjs 分別負責三項測試的執行、摘要與報告,src/client.mjs 提供 controller、頁面、側邊欄圖標與輸入框按鈕。

結尾

dsh-cache-probe 的價值在於把渠道接入階段最常問的幾個問題(緩存命中、響應速度、SVG 輸出)收進一個 DSH Web GUI 頁面,參數可調、結果可復現,且不干擾當前會話。插件目錄頁在 https://www.skillhub.cn/plugins/xymy666/dsh-cache-probe,源碼在 https://github.com/xymy666/dsh-cache-probe。

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

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

小夜