DeepSeek Harness Token Usage 面板

前言

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
羽毛球分组比赛记分
小程序二维码

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

小夜