前言¶
DeepSeek Harness(DSH)的 durable session log 裏記着每次調用的 provider 計費用量,但沒有任何頁面把它攤開:用了多少、花在哪、什麼時候用的,都看不見。更麻煩的是,會話投影每個會話只保留最近 600 行,會話一長或被刪,早期用量就從界面上消失了——數字變小,但數據從來沒丟,只是沒人再去讀它。
menglian001/dsh-token-usage 把這份權威數據折成一張請求日誌,並額外落一份盤上賬本,不受投影窗口限制,啓動時還會從全部會話日誌回掃補齊。
功能概覽¶
插件爲 DSH Web GUI 提供一個 Token 用量面板,包含以下視圖:
- 概覽:四張主指標卡(請求數、合計 tokens、緩存命中率、輸出速度)。「更多指標」展開四桶明細、平均耗時、平均首字。趨勢圖按桶堆疊,與同一 x 軸上的緩存命中率折線讀同一數據源與窗口,方便對比。全年熱力圖 53 周 × 7 天,月/周標籤齊全。渠道排行顯示佔比、四色構成條、請求數、命中率、合計。標題下方顯示今日讀數(不隨篩選變化)與實時併發。
- 請求日誌:12 列逐請求明細(時間/會話/渠道/模型/提示/緩存讀/補全/合計/耗時/首字/速度/流式),按天分組,粘性日期條與表頭隨滾動釘住。點任意一行展開四桶明細(含緩存寫、推理子集、輪次與步驟)。點會話名直接跳到對應對話。支持按時間範圍、渠道、模型、全文搜索篩選,支持暫停凍結表格(頂部數字照常更新),列頭可排序、CSV 導出、頁碼直達。
- 分組視圖:模型、渠道、日期三張表共用一套列(佔比帶條、請求、提示、緩存讀、補全、合計帶四色構成條、命中率、平均耗時、速度)。
- 實時併發:標題下的活體指示
● 運行中 N,數據來自會話列表自帶的running標誌,由 Host 推送而非輪詢。一個會話裏同時有多個調用在飛時,追加· M 步在飛:Host 按step/start→ 結算事件計數,turn/end清空。會話的running是布爾值,無法表達一段對話裏有幾個調用在跑,這個計數可以補充。
安裝與啓用¶
插件是一個普通的 DSH bundle,純 JS,無構建步驟。
git clone https://github.com/menglian001/dsh-token-usage.git ~/dsh-token-usage
# 1) 裝插件自己的依賴(必做,見下)
cd ~/dsh-token-usage && npm install
# 2) 在 profile 裏登記,然後安裝
cd ~/.dsh/profiles/web
pnpm install
profile 的 package.json 需要這兩處:
{
"dependencies": {
"dsh-token-usage": "link:~/dsh-token-usage"
},
"dsh": {
"profile": {
"bundles": ["...", "dsh-token-usage"]
}
}
}
然後重啓 dsh。
爲什麼第 1 步必做
link:包按真實目錄解析依賴,不經過 profile 的node_modules。插件目錄裏沒有node_modules/zod時,Host 半會以Cannot find package 'zod'加載失敗——而 Host 半失敗會連帶 Client 半不注入,表現是側邊欄根本沒有這個圖標。npm install只裝一個zod,幾秒鐘。Host 半改動需要重啓才生效;Client 半熱更新,刷新頁面即可。
數據來源與落盤賬本¶
| 數字 | 來源 |
|---|---|
| 四桶(未命中輸入 / 緩存讀 / 緩存寫 / 補全)與推理 | provider 回包上報 |
| 提示 / 補全 / 合計 / 緩存命中率 | 四桶的算術 |
| 耗時 / 首字 / 生成時間 | 本地時鐘,含網絡往返 |
| 輸出速度 | 補全 ÷ 生成時間,池化;僅計入補全 ≥ 100 且生成 ≥ 100 ms 的請求 |
鏈路:provider 響應 → stream.ts 的 usage 事件 → assembler → assistant/message.data.usage → 本插件的 requestLog 投影。
走中轉時,「準確」的含義是忠實反映中轉上報的數字;中轉少報,面板就跟着少報。
每次請求結算時追加一行 JSONL 到 $DSH_HOME/token-usage/requests.jsonl:
- 鍵:
session|turn|step|attempt,讀時後寫覆蓋。崩潰重放、重複回掃都不會重複計數。 - 回掃:啓動後讀遍磁盤上的全部會話日誌,把投影窗口早已丟掉的行補回來。
- 保留 730 天。
- 壓實:啓動時若文件 ≤ 32 MB 且(總行數 ≥ 2000 且 總行數 > 唯一鍵數 × 1.25,即重複行佔比 > 20%;或存在超 730 天的記錄)則壓實(寫臨時文件再 rename)。超過 32 MB 的文件只讀、不再壓實。
數據有兩條來源,頁腳會說明當前用的是哪條:
- 賬本:保留窗口內只增不減,但只有聚合(天/模型/渠道)與最近若干行明細(服務端留 2000 行,面板按需取 400 行)。
- 保留記錄:瀏覽器手裏的投影行,能按任意條件切片,但受每會話 600 行窗口約束。
切換規則只看完整性:賬本嘗試數 ≥ 保留行數,且無篩選時讀賬本。天數跨度不參與判斷——圖表的天數下限是畫圖用的,不能拿來仲裁數據源。
已知邊界¶
- 緩存寫 / 推理恆爲 0:上游若爲 OpenAI 口徑(prompt 裏已含緩存命中),不會單獨上報
cache_creation/reasoning。顯示 0 是沒報,不是漏讀。 - 速度顯示
—:中轉把首字和落盤報在同一瞬間時,生成時間≈0,除出來的速度是假的,因此按門檻顯示—。—表示「沒測到」,不是 0。 - 請求日誌明細受投影窗口約束:明細仍讀投影(每會話 600 行);分組視圖與趨勢在無篩選時讀賬本聚合,不會縮水。
- 熱力圖空格 = 那天沒有記錄,不是「那天沒用」。
- 賬本從啓用那天開始記:更早且日誌已被清理的會話,總數可能補回,明細補不回來。
適用場景與注意¶
適合需要長期追蹤 Token 用量、關注緩存命中率與渠道成本分攤的 DSH 用戶。插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。
結尾¶
本插件爲 DSH Web GUI 提供了持久化、可篩選、可導出的 Token 用量面板,幫助在會話投影窗口之外看清用量全貌。
- 目錄頁:https://www.skillhub.cn/plugins/menglian001/dsh-token-usage
- GitHub:https://github.com/menglian001/dsh-token-usage