dsh-cost-ledger:給 DSH 加一個按天、按模型看花費的標籤頁

前言

在 DSH 裏跑模型,多數人不是隻用官方 API。你在阿里百鍊上調模型,但市面上的用量插件幾乎都內置同一份 DeepSeek 官方價。結果就是:模型名一樣、服務商不一樣,價格可能差好幾倍;官方有峯谷時段,百鍊不一定有;私有部署帶租戶前綴的模型,在任何公共價目表裏都查不到。最後 token 統計得很準,金額是錯的,而且錯得悄無聲息。

下面介紹 looriann/dsh-cost-ledger。它定位是 DSH 的「費用」標籤頁,按天、按模型看 token 花了多少錢。它認的不只是 DeepSeek,同一份權重經百鍊、官方、第三方轉售賣出、價格不同時,它按「服務商 + 模型」二元組查價,不是按模型名瞎猜。界面照着 DeepSeek 官方控制台做:按天堆疊柱狀圖,鼠標懸停看到當天明細。

這是什麼

這是一個客戶端插件,由 Looriann 維護,分類歸在客戶端(client,web 平臺)。倉庫地址是 https://github.com/Looriann/dsh-cost-ledger,社區目錄頁是 https://www.skillhub.cn/plugins/Looriann/dsh-cost-ledger。當前 GitHub 星標 1。

它解決的核心問題分三層:

1、認身份:按 服務商 + 模型 二元組查價,而不是隻看模型名。
2、講出處:每個模型一行都帶置信度徽章(手填 / 官方 / 聚合目錄 / 繼承 / 未定價)。
3、能補價:查不到就明確標「未定價」,點一下就地填,填完歷史數字立刻重算。

插件的設計口徑是:寧願顯示「未定價」,也不顯示一個看起來很專業的假 ¥0.00。

核心功能

能力 說明
按天圖表 天 × 模型的堆疊柱狀圖,懸停顯示當天各模型花費,可切「金額 / tokens」
KPI 條 今日 / 近 N 天 / 本月 / 緩存命中率 / 樣本數
價格來源徽章 每個模型一行徽章,一眼看出這個數是查來的還是你填的
就地補價 未定價橫幅點開填四個單價(元 / 百萬 token),保存即重算
隨包價目 自帶阿里百鍊 142 個模型的官方人民幣價:千問全系 + DeepSeek / Kimi / GLM / MiniMax 的百鍊上架版
歷史回填 首次啓動自動掃描 ~/.dsh/sessions/,過去幾天的賬立刻就有
可對賬 npm run replay 用同一份代碼在終端復算,界面數字必須能復現

其中「可對賬」是它區別於普通用量面板的一點:界面和 replay 共用 lib/ 下的同一份代碼,所以界面上的數字一定能在終端復現。

安裝與啓用

安裝有兩種方式。

方式一:插件商場,搜索 cost-ledger,完整包名是 @looriann/dsh-cost-ledger,點擊安裝。

方式二:命令行,在 DSH 桌面 profile 下安裝:

dsh plugin --profile desktop add @looriann/dsh-cost-ledger

裝完重啓 DSH,瀏覽器按 Ctrl+Shift+R 硬刷新。打開任意會話,頂部標籤欄會多一個「費用」。

依賴條件寫在 package.json 裏,運行時屬於零依賴:

"engines": {
  "node": "^22.19.0 || >=24.0.0"
}

README 同時寫明需要 DSH 0.2.0-rc.2 / 0.2.1-rc.2。這裏的 Node 範圍來自 package.json 的 engines 字段,DSH 版本約束來自 README 原文。注意控制命令必須按上面原文一字不改,尤其不要憑目錄名去拼 dsh plugin add github:owner/repo。

典型用法

1、打開任意會話,點頂部的「費用」。
2、首次打開會自動回填歷史;幾秒後圖表和 KPI 就有了。
3、頂部如果出現橙色橫幅「有 N 個模型還沒定價」,點裏面的 chip 補價,填四個單價並保存。

需要覈對原始賬目時,在倉庫目錄跑回放:

npm run replay                 # 回放全部會話,打印每天的 tokens 與金額
npm run replay -- <日誌文件>    # 單個會話,逐輪成本

重新抓取官方價目用:

npm run prices     # 重新抓官方價目,合併進賬本(不覆蓋手填行)

開發自檢命令也一併列出,均爲原文腳本:

npm run check      # 語法檢查(8 個模塊)
npm test           # 22 項單元用例 + 8 項插件冒煙
npm run replay     # 回放本機真實日誌
npm run seed       # 從抓取結果重建隨包價目表
npm run rename     # 一鍵改包名(換 npm 作用域時用)

價格是從哪來的

按優先級從高到低:

來源 說明
你手填的 最高優先級,永遠不會被自動抓取覆蓋
官方價目 隨包種子(阿里百鍊官方頁,142 個模型,含第三方模型的百鍊版),或 npm run prices 重新抓
聚合目錄 計劃接入 models.dev / LiteLLM
繼承同模型 同模型在別的服務商下有條目,借用但降級標註
未定價 只有 token 沒有錢,界面明確標紅

關於自動抓價,README 的口徑比較直接:bailian.console.aliyun.com 的模型廣場是登錄態 SPA,程序抓不到表格;但同一份表格有公開 Markdown 導出 help.aliyun.com/zh/model-studio/model-pricing.md,能解析出 CNY 單價、階梯區間和免費額度,當前 142 個模型。官方頁只列輸入 / 輸出單價,緩存單價不單列,插件按百鍊公開規則推算(緩存命中 10%、顯式創建 125%),並在價目表裏標 cacheRule 字段。真正抓不到的只有私有部署(cmaas-glm-5.3 這類帶租戶前綴的),設計上留空手填,不猜。

數字爲什麼可信

  • token 不猜:直接讀 harness 的 assistant/message 事件,input / cacheRead / cacheWrite / output 四個分項原樣落賬。
  • 不重複計費:以 sessionId + turn + step 爲鍵,同一步驟重複上報是替換,不是累加。
  • 整數微元:micro = round(tokens × 單價),避免浮點誤差滾雪球;null ≠ 0。
  • 讀時計價:金額永遠按當前價目表現算,改價不用重建歷史。

數據完全本地:

~/.dsh/cost-ledger/
├─ samples.ndjson   ← 只追加的 usage 樣本(唯一事實來源)
└─ prices.json      ← 你的價目表

不聯網,不上傳任何內容,也不讀對話正文,只讀 usage 裏的數字。刪掉 samples.ndjson 重啓等於從零重來。

適用場景與注意

適合這類人:同時在 DeepSeek 官方和百鍊上跑模型,需要按服務商區分同一模型的實際花費;有私有化部署模型,公共價目表裏查不到價;希望界面數字能在終端復現,而不是隻看一個面板。

有幾點需要寫在前面:

1、插件以當前 DSH 進程權限運行,安裝前應先檢查源碼(lib/ 與 scripts/)和許可證,而不是隻看 README。許可證是 MIT,作者 Looriann,README 註明事件解析語義參考了 @kidli1412/dsh-session-cost 與 dsh-context 的公開實現,代碼爲獨立編寫。
2、它是純本地工具,除你手動跑 npm run prices 時訪問阿里雲文檔頁之外不聯網,因此沒有後端賬號體系,也就不存在雲端賬單能力。
3、它顯示的是按你填的價目表算出來的估算,不是賬單。和官方賬單對不上時,常見原因包括緩存讀寫價沒填、階梯檔位不同、官方免費額度沒扣、四捨五入。
4、它只讀 session/event、只註冊自己的 /api/cost-ledger/* 路由、只在標籤欄加一個頁,不改任何內置組件,README 明確說明不會和其他用量插件衝突。

結尾

dsh-cost-ledger 把一個容易出錯的問題拆得很小:先記住每一筆 token 分項,再按「服務商 + 模型」框架計價,查不到就標「未定價」留給你填。它的價值不在把界面做得像官方控制台,而在讓金額可追溯、可復算、不靜默出錯。

目錄頁:https://www.skillhub.cn/plugins/Looriann/dsh-cost-ledger
GitHub:https://github.com/Looriann/dsh-cost-ledger

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

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

小夜