dsh-better-stats:給 DSH Web UI 加一條即時費用與狀態條

前言

用 DSH(DeepSeek Harness)跑長任務時,費用是最難心裏有數的一項:deepseek-v4-flash、deepseek-v4-pro 價格不同,官方人民幣價目還分峯谷時段,輸入要按緩存命中與否分桶計價,agent team 下面還有並行子會話的用量要合併。流式輸出進行到一半,很難估出當前 turn 已經花了多少;事後拿着 token 明細手工對賬也很費勁。

DSH 的理念是「一切皆插件」,Web UI 裏的信息展示同樣可以交給插件補齊。dsh-better-stats 做的就是這件事:在 composer 正下方放一條狀態條,把花費、餘額、計時和 token 統計即時擺出來,計價直接對齊 DeepSeek 官方價格表。

這是什麼

dsh-better-stats 是 null5069 維護的 DSH Web UI 插件,MIT 許可,當前版本 0.1.16,無運行時依賴,要求 Node >= 18。裝好後它呈現爲一條位於 composer 正下方的狀態條,README 給出的示例長這樣:

DeepSeek Official | Balance ¥8.67 | Turn ¥0.1676 · Session ¥29.49 | 20 turns · 345 steps | LLM 1h 12m · Tool 5m 6s | TTFT avg 3.88s · 111.72tok/s | Cache 103.98M · hit 98.64% | In 1.44M · Out 336.53K

從左到右依次是價格來源、賬戶餘額、turn/session 金額、turn 與步數、LLM 與工具時長、整樹 TTFT 與 tok/s、緩存用量與命中率、輸入輸出 token。

計價

官方價格表

價格不寫死在插件裏。host 每 6 小時從官方定價頁 api-docs.deepseek.com/zh-cn/quick_start/pricing 重新同步一次人民幣價格,映射官方模型表頭列,並帶內置回退。popover 會顯示來源與抓取時間。

峯谷分時

峯時爲週一至週五北京時間 09:00–12:00 / 14:00–18:00,價格 ×2,週末按谷時。計價按每條事件自己的時間戳判定所在時段;popover 顯示下次峯谷切換的倒計時,會跳過週末。

按模型與緩存分桶

每條消息用產生它的模型計價:deepseek-v4-flash / deepseek-v4-pro / deepseek-v4-flash-vision-exp 各自套用官方表格。未知模型顯式標記 Unpriced,token 計入總量但價格爲 0,不會悄悄套一個默認價。

緩存分三桶:未緩存輸入、緩存讀(低價)、緩存寫分開計價,狀態條同時顯示緩存命中率。

Turn 即時結算與流式估算

一個 turn 的金額來自兩部分:已結算的步驟按事件級摺疊計價;進行中的步驟用流式字符級估算,估算密度經 EMA 自校準,並按當前峯/谷時段計價。

Agent team 樹合併

開 agent team 時,host 每秒經 /live 路由發佈一份以 session id 和事件修訂版爲鍵的一致樹快照,把子會話的用量併入所選會話的統計。合併有明確邊界:僅 origin: subagent 的會話加入樹,普通 fork 不合並。

餘額直查與提醒

餘額由 host 直接查詢 api.deepseek.com/user/balanceDEEPSEEK_API_KEY 通過 DSH credentials seam 傳遞,不經過瀏覽器。查詢結果緩存 15 秒;點擊狀態條上的餘額組可以強制刷新,host 側有 2 秒防洪冷卻。popover 顯示 granted/topped-up 拆分、剩餘天數估算(EWMA)與充值鏈接。

餘額提醒分兩檔,默認 warn ≤¥20 變黃、critical ≤¥5 變紅;可用 balanceWarnCny / balanceCriticalCny 調整,設爲 0 關閉對應檔位。

預算提醒(可選,默認關閉)

預算提醒默認關閉,在插件 config 中寫入 dailyBudgetCny / monthlyBudgetCny 即啓用:

config: {
  dailyBudgetCny: 20,
  monthlyBudgetCny: 100
}

花費超過預算 80% 時金額組變黃,超支變紅並帶 ⚠。popover 會給出 Today ¥x · daily budget ¥20 (85%) / Month ¥y · monthly budget ¥100 (30%) 這類明細,按 Asia/Shanghai 零點與月初滾動重置。

其他細節

  • 即時計時器:LLM/工具時長僅統計所選會話,並行子會話不重複累計;整樹 TTFT 與 tok/s 即時顯示。
  • 全新會話佔位條:新窗口/新對話首幀即渲染全部分組,空值顯示合法的 0 或 -
  • Live popover:agent team 運行時,turn/session 金額、Tok、模型行、緩存、活動計數、TTFT、tok/s 即時更新。
  • 佈局:與 composer 等寬,最多換行兩行,丟棄行邊界的孤兒分隔符,溢出截斷爲尾部 (基於緩存自然寬度,無閃爍)。
  • i18n:UI 字符串跟隨瀏覽器語言,支持簡體中文/英文。
  • 精度規則:計算金額(turn/session/today)4 位小數,外部金額(餘額)用提供方精度,配置金額 2 位,popover 保留 6 位明細。
  • 計費口徑:outputTokens 已包含 reasoningTokens,推理 token 僅作展示,不會重複計費。
  • 異常 dispose 會凍結 host 樹時長並清除臨時輸出;臨時邊 5 秒無新 /live 快照即過期,被打斷的子會話不會永久計時。

安裝與啓用

npm 方式一條命令:

cd ~/.dsh/profiles/web
pnpm add dsh-better-stats

裝完還要把包註冊爲 bundle:在 profile 的 package.json 中把 dsh-better-stats 加入 dsh.profile.bundles 數組,然後重啓 dsh web 並硬刷新瀏覽器。包內自帶 cordis.patch.yml,會自動掛載插件行,無需手動改 YAML。

默認值:餘額提醒兩檔開啓(warn ¥20 / critical ¥5),日/月預算關閉。要自定義,在插件 config 中設置 balanceWarnCny / balanceCriticalCny(0 關閉該檔),或 dailyBudgetCny / monthlyBudgetCny(寫入即啓用)。

GitHub clone 方式:

git clone https://github.com/null5069/dsh-better-stats.git
cd dsh-better-stats

該插件無運行時依賴,clone 後無需 npm install。下一步是把目錄 symlink 進 profile——README 在這一步被截斷,具體命令不完整,請以倉庫內文檔爲準。

適用場景與注意

適合長期在 DSH Web UI 裏跑任務、需要盯費用和餘額的人,尤其是會開 agent team、跑並行子會話的用戶——樹合併與即時結算正是在這裏發揮作用。

兩點注意。其一,插件以當前 dsh 進程的權限運行,安裝前建議先檢查源碼與許可證(MIT)。其二,餘額查詢依賴 DEEPSEEK_API_KEY,該 key 經 DSH credentials seam 傳遞、不經過瀏覽器,但仍建議確認信任作者後再啓用。

結尾

dsh-better-stats 把 DSH Web UI 裏最不透明的兩項——花了多少錢、還剩多少——變成常駐可見的一條狀態,並且計價、分時、分桶都對齊官方口徑。代碼與文檔見 GitHub 倉庫:https://github.com/null5069/dsh-better-stats。如需瀏覽更多 DSH 插件,社區維護的插件目錄是一個獨立站點,與 DeepSeek / 幻方無官方從屬關係。

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

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

小夜