前言¶
Harness 默認只把會話寫成本地日誌,不會告訴你:這段時間燒了多少 Token、緩存命中率是多少、哪幾個模型在喫預算、輸出速度的 P50 掉到哪兒去了。想知道這些,只能翻 session.v*.jsonl.zstd 自己算,或者乾脆只看賬單——而賬單往往滯後,也沒有緩存命中和模型速度這些過程數據。
下面介紹的 dsh-token-lens 就是針對這個缺口的插件。它讀的是本機會話日誌,所有統計在本地完成,不聯網、不上傳、不需要 API Key。維護者是 muxili87-art,社區分類爲「模型推理」。插件名 TokenLens · 用量透鏡,作用是把日誌摺疊成 Token / 請求 / 費用 / 緩存命中 / 模型速度的看板。
核心功能¶
插件做的事情是「本地日誌 → 按天摺疊 → 看板展示」,覆蓋這幾類信息:
- 多口徑總覽:今天 / 7 天 / 30 天 / 全部 / 自定義區間,KPI 卡可對比。
- 趨勢圖:Token、請求、費用、模型耗時、輸出速度五種指標;柱狀 / 折線切換,可按模型篩選。
- 自動聚合粒度:今天按小時;7 天 / 30 天按天;更長區間按周(週一錨定)或按月。
- 熱力圖:近 53 周每天一格,按請求 / Token / 費用 / 耗時着色,點擊格子篩選當天。
- 模型分佈:按請求 / Token / 費用 / 耗時排名的佔比條,點擊圖例篩選。
- 速度面板:速度分佈(P25 / P50 / P75)與速度趨勢折線,支持多模型對比。
- 請求明細:按時間 / 耗時 / Token 排序,支持模型與關鍵詞搜索,失敗請求有獨立視圖。
- 隱私模式:一鍵隱藏會話名、賬號、錯誤詳情與敏感模型名,數字不變,適合截圖與共享。
- 更新檢查:面板頂欄查詢 GitHub 最新 Release。
- 峯谷計價:按北京時間工作日高峯 / 低谷兩檔估算,內置 DeepSeek / OpenAI / Anthropic / Google 公開價目。
安裝後插件會自動掃描 ~/.dsh/sessions,增量摺疊成按天桶並緩存到 ~/.dsh/usage-dashboard/cache.v1.json,之後每次打開只做增量更新。
安裝與啓用¶
前置條件:DeepSeek Harness 桌面版(開發與驗證版本 0.2.1-rc.5)。
- 下載 Release 裏的
dsh-token-lens-<version>.zip,解壓到任意目錄並記下絕對路徑。 - 在 Harness 會話裏執行:
plugin_manager install_bundle target=<解壓後的絕對路徑>
- 完全退出並重新打開 DeepSeek Harness(首次加載 / 替換插件必須重啓,瀏覽器半的客戶端模塊纔會重新組裝)。
- 左側邊欄出現「用量分析」圖標,點擊進入。
升級方式相同:用新版本 zip 重跑一次 plugin_manager install_bundle,再完全退出重啓。
需要特別注意:v1.0.0 的 zip 是壞的,它的 package.json 漏了 exports["./client"],Harness 啓動掃描會直接拋錯、整個插件組裝鏈失敗。請使用 v1.0.1 或更新版本。
裝完應用起不來時,按這個順序排查:
- 打開插件目錄執行自檢:
npm run doctor
報 ✗ 聲明瞭 dsh.client,但 package.json 沒有 exports 映射 就是上面那個問題,改用 v1.0.1+。
- 先卸載再重裝:刪掉
~/.dsh/profiles/<profile>/node_modules/dsh-token-lens,並刪掉cordis.patch.yml裏對應行,重啓確認應用恢復,再重新install_bundle。 - 仍失敗時,把 Harness 啓動日誌裏
client-modules:開頭的報錯發到 Issues。
Windows 用戶注意:插件本身與操作系統無關(路徑全部走 homedir() / path.join)。如果從命令行啓動 Harness 後靜默退出,通常是環境變量同時存在 HTTPS_PROXY 和 https_proxy(大小寫重複),清掉其中一個,或直接雙擊桌面圖標啓動。
計價配置與隱私模式¶
計價開箱即用:內置通用價目表,沒配置過的模型按模型名自動匹配估算。匹配順序是 providers.<名字> 精確命中 → 該 provider 價目表;否則按 fallbacks 用模型名兜底(openai/gpt-4o 與 gpt-4o 都認);都沒有才算「未定價」。providers 永遠優先於內置價目表。
pricing.json 的頂層結構如下:
{
"fx": { "USD": 7.2 }, // 非人民幣價目折算成人民幣
"peak": {
"offsetMinutes": 480,
"weekdays": [1, 2, 3, 4, 5],
"windows": [["09:00", "12:00"], ["14:00", "18:00"]]
},
"books": { "openai-usd": { "currency": "USD", "models": {} } },
"providers": { "official": { "book": "deepseek-official", "models": {} } },
"fallbacks": [
{ "match": "gpt-4o-mini", "book": "openai-usd", "model": "gpt-4o-mini" },
{ "match": "gpt-4o", "book": "openai-usd", "model": "gpt-4o" }
]
}
幾個容易踩的點:
providers.<p>的 key 必須和會話日誌裏provider/model的前半段一致,匹配不到才走fallbacks。fallbacks[].match默認前綴匹配(mode可設prefix/contains/exact),依次比對model、provider/model和模型名最後一段,所以gpt-4o-mini要寫在gpt-4o之前。books.<b>.currency不是CNY時按fx折算,界面統一顯示人民幣。- 只有
offPeak一檔的模型,在高峯時段按同一檔計算。 - 內置價目估算的模型會在頁腳單獨標註,不會被誤當成賬單金額。
隱私模式點右上角按鈕後:會話標題變成 會話 01、會話 02,賬號變成 賬號 A、賬號 B,錯誤信息與搜索關鍵詞隱藏,形如 /Users/...、https://...、sk-... 的敏感模型名顯示爲 模型已隱藏。統計數字、圖表、費用一分不變。
指標口徑與聚合粒度¶
指標定義如下:
| 指標 | 定義 |
|---|---|
| 總 Token | input + output + cacheRead + cacheWrite |
| 請求數 | 成功發出的模型請求數(失敗單列) |
| 緩存命中率 | cacheRead / (cacheRead + input) |
| 費用 | cacheRead×cacheHit + (input+cacheWrite)×cacheMiss + output×output |
| 模型耗時 | 該模型請求的 LLM 平均耗時(不含工具調用) |
| 輸出速度 | output tokens / (耗時 ms / 1000),逐請求取樣本後算 P25/P50/P75 |
聚合粒度:今天按小時;7 天 / 30 天按天;自定義區間跨度 ≤1 天按小時、≤45 天按天、≤315 天按周(週一錨定)、更長按日曆月。速度的 P50 在每個桶內用請求級樣本重新計算,不是「日 P50 的平均」。
數據準確性¶
唯一數據源是 ~/.dsh/sessions/<workspace>/<session>/session.v*.jsonl.zstd 會話日誌,插件只讀不寫。統計的是本地記錄的用量,與供應商賬單可能有出入(重試、失敗請求、緩存計費口徑、免費額度等)。fork / 副本會話的「播種」請求會去重,避免同一份歷史被算兩遍。緩存文件可隨時刪除,下次打開會全量重建。
插件對外暴露兩個鑑權路由:
GET /usage-dashboard/summary?from&to&tz&modeGET /usage-dashboard/requests?from&to&tz&view&sort&order&offset&limit&model&q
適用場景與注意事項¶
適合本地使用 Harness、想復盤自己 Token 與費用開銷的開發者;也適合需要把用量數據截圖共享、但不想泄露會話內容的場景——此時把隱私模式打開。
需要留意三點:
- 插件以當前 DSH 進程的權限運行,安裝前應檢查源碼與許可證(MIT)。
- 它統計的是本地日誌,不是供應商賬單,不能直接當作財務依據。
- 計價默認用公開價目估算,第三方中轉或改過名的自定義模型需要自己在
pricing.json里加,或用fallbacks兜底。
結尾¶
dsh-token-lens 把 Harness 已經記錄的會話日誌重新利用起來,補上了 Token、緩存命中、費用、模型速度這些「過程看板」,且全程本地計算、隱私模式可共享。
目錄頁:https://www.skillhub.cn/plugins/muxili87-art/dsh-token-lens
GitHub:https://github.com/muxili87-art/dsh-token-lens