DSH-UsageStats-WhenNeedOverview:基於真實會話日誌的 Web UI 用量統計面板

前言

在 DeepSeek Harness(DSH)裏跑智能體,token 會分散在多段會話、多種模型和緩存讀寫路徑裏。單靠印象或廠商賬單,很難對照「哪幾次調用花了多少、預算還剩多少」。社區維護者 xkzdwb 的 DSH-UsageStats-WhenNeedOverview(包名 dsh-usage-stats)在 DSH Web UI 側邊欄增加用量統計入口,把 harness 寫入會話日誌的 usage 折成 KPI、時間線和單會話明細,並按你在配置裏填的單價重算費用。數字來自 ~/.dsh/sessions/**/session.v4.jsonl.zstd,不是面板內估算;Host 與 Client 分別只用 Node 內置模塊和瀏覽器已有的 react,沒有額外 npm 依賴。

這是什麼

  • 倉庫與目錄:GitHub,SkillHub 分類爲客戶端插件。
  • 維護者:xkzdwb。
  • 版本與許可(資料原文):1.0.0,MIT;要求 Node >=20。
  • 定位:給 DSH Web UI 加用量統計面板;另提供只讀 JSON 路由,便於 curl 或自建監控對接。

裝好後側邊欄在「插件」「定時」之後多一個柱狀圖標,點開主欄即儀表盤。面板每 5 秒輪詢(CPU 走勢依賴此間隔);點「刷新」會強制重讀全部會話日誌。

面板能力

下面按 README 中的區塊說明(時間範圍按鈕:全部 / 24h / 7d / 30d 隻影響面板顯示;預算 KPI 始終按 budgetPeriod 計算,不受範圍按鈕影響)。

區塊 內容
四個 KPI 總 token(含輸入/輸出/緩存拆分)、會話數、模型調用次數、預估費用;第四格爲預算進度
Token 用量時間線 按小時堆疊柱(跨度超過 7 天按天);緩存讀取 / 輸入 / 輸出;綠線爲每桶費用
按模型 每個 provider/model 的調用數、token、費用、相對花費條
CPU 活動 進程與系統 CPU、進程內存、運行時長,約 90 個採樣點的走勢
會話明細 每會話調用數、token、費用、最後活動時間;可搜索、排序

面板右上角語言:自動 / 中文 / EN(默認跟隨 Harness 或瀏覽器;選擇寫入 localStorage 的 dsh-usage-stats:lang,僅影響本面板渲染,不重新拉數)。

數據從哪來、怎麼計費

Harness 每輪把 assistant/message 事件的 usage 寫入會話日誌。Host 側通過 sessionQuery 列出並讀取會話,從 data.usage 取 inputTokens、outputTokens 及可選的 cacheReadTokens、cacheWriteTokens 等,用 data.message.source 的 provider/model 分組。

兩點實現上容易寫錯、README 也單獨強調:

  1. 總 token 含緩存讀寫,計費必須四類 token 各乘各自單價,不能用 totalTokens 乘單一價。
  2. 中間結果只存 token 計數、不存費用;改 pricing 後歷史會按新價立即重算,無需清緩存。非 live 會話在 cacheTtlMs 內可只折一次;live 會話刷新會重讀。

對外只讀路由:

GET /plugin-usage-stats/data?days=0&refresh=0

僅 GET/HEAD;響應 cache-control: no-store,不含消息正文。?refresh=1 強制重讀日誌;?days=7 限制最近天數(0 表示全部)。

安裝與啓用

插件以 bundle 包形態發佈:package.json 的 dsh.bundle.patch 指向自帶 cordis.patch.yml。要同時出現側邊欄與主欄面板,需把包列入 profile 的 bundles(方式 A);僅插 Host 入口(方式 B)則只有 JSON 路由、沒有 Web 界面。

方式 0:從 GitHub 安裝(資料原文命令)

dsh plugin add github:xkzdwb/DSH-UsageStats-WhenNeedOverview

裝完重啓 DSH。Host 日誌中應出現:

[usage-stats] serving GET /plugin-usage-stats/data

方式 A:作爲 bundle 鏈進 profile(推薦,含 UI)

在 ~/.dsh/profiles/<profile>/package.json 增加依賴並把 dsh-usage-stats 放進 dsh.profile.bundles,且排在 @deepseek-ai/dsh-base、@deepseek-ai/dsh-web-app 之後(依賴其 webServer 與 sessionQuery)。本地開發可用 link: 指向倉庫絕對路徑。改配置後同樣需重啓 DSH。

驗證路由

將 <DSH 的端口> 換成本機 Web 端口後執行:

curl -i http://127.0.0.1:<DSH 的端口>/plugin-usage-stats/data

期望:200、content-type: application/json、cache-control: no-store,正文爲計數字段。

配置項

配置寫在 patch 的 config: 下(完整字段見倉庫 cordis.patch.yml)。價格單位爲每 100 萬 token。

字段 默認 說明
currency CNY 幣種符號或「數字 + 代碼」
budget 200 預算;0 只顯示花費
budgetPeriod month month 本自然月;all 全部歷史
cacheTtlMs 30000 摺疊緩存有效期
cpuSampleIntervalMs 2000 CPU 採樣間隔(500–60000)
cpuHistoryLength 90 走勢採樣點數(10–600)
maxSessions 2000 最多統計會話數
maxConversations 300 明細條數上限,按花費降序
pricing.default / pricing.models 見 README 按 provider/model 覆蓋單價

pricing.default 中的數值在文檔中標明爲佔位,需按你的實付價或官方價表填寫。不確定模型鍵名時,可先請求 GET /plugin-usage-stats/data?days=0,用返回裏 byModel[].key 對照填寫 pricing.models。

示例形狀:

pricing:
  default:
    input: 2
    output: 8
    cacheRead: 0.5
    cacheWrite: 2
  models:
    some-provider/some-model:
      input: 1
      output: 4
      cacheRead: 0.25
      cacheWrite: 1

典型用法

  1. 日常看板:重啓 DSH 後從側邊欄打開面板,用 24h / 7d 等按鈕切換視圖,用「刷新」對齊最新日誌。
  2. 腳本拉快照:用 curl 訪問 /plugin-usage-stats/data,必要時加 refresh=1 或 days 參數。
  3. 改價後復盤:只改 patch 裏 pricing,無需清緩存,歷史費用按新價重算。
  4. 離線自測(不必安裝 DSH):在倉庫目錄執行 node test/run-tests.mjs(不讀 ~/.dsh、不聯網);資產檢查可執行 node tools/check-assets.mjs。

適用場景與注意

適合:已在 DSH Web UI 里長期使用、需要對照真實會話日誌看 token、費用、預算和 CPU 的開發者。

排錯摘要(來自 README):

  • 側邊欄無圖標:未按方式 A 裝入 bundles(缺 dsh.client 則只有路由);或未重啓。
  • 面板空轉:確認 Host 日誌有 serving GET /plugin-usage-stats/data,且 profile 包含提供 webServer 的官方 Web bundle。
  • 費用異常:檢查 pricing 佔位價與 byModel[].key 是否匹配。
  • 數字滯後:點「刷新」或 ?refresh=1;非 live 會話受 cacheTtlMs 影響。

邊界:時間線按 UTC 整點分桶;預算週期僅「本自然月」與「全部」;會話數含子代理會話;金額宿主側四捨五入到 4 位小數。

安全與信任:插件隨當前 DSH 進程權限讀取 ~/.dsh 下會話日誌並註冊 HTTP 路由。安裝前請自行審閱 倉庫源碼 與 MIT 許可證。DSH 社區插件目錄(如 SkillHub)爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

結尾

DSH-UsageStats-WhenNeedOverview 把 harness 已落盤的 usage 轉成可讀的 Web 面板與一條只讀 JSON API,費用由配置價驅動、改價即可重算曆史。需要入口與細節時,可查閱 SkillHub 目錄頁 與 GitHub 倉庫。

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

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

小夜