前言¶
DSH 裏的用量到這一層通常只是一個 token 數字:能讀到本輪用了多少 token,但很難直接回答“這條消息花了多少錢”。價格是分模型、分時段的——DeepSeek 在部分時段對推理價打折,同一段對話裏早高峯和深夜產生的用量單價並不相同,緩存命中與未命中又是兩套價。要把這些攤到每一輪,就得自己讀官方用量投影、做時段判定和金額換算,還要自己維護“所有會話累計”那一層。
下面介紹 dsh-plugin-usage-budget。它把 token 用量按可配置的價目換算成人民幣金額,提供會話費用讀數、逐輪價格、賬戶餘額與每日/每週/每月預算守衛。它本身不參與推理,只管覈算花費。
這是什麼¶
一句話定位:DSH 的用量費用與預算插件,負責“token → 金額 → 預算提醒”這條鏈路。
- 倉庫:dddfuxi/dsh-plugin-usage-budget
- 維護者:dddfuxi(GitHub);包
author字段爲fuxi - 分類:模型推理(用量計費側,非推理本體)
- 許可證:MIT
- 版本:
0.1.0(package.json) - 運行要求:Node
>=20,對@deepseek-ai/cordis~4.0.5
插件由早期的兩個自用小插件合併而來:dsh-plugin-usage-cost(費用讀數)與 dsh-plugin-account-balance(賬戶餘額),並新增了預算守衛與逐輪價格。
運行機制¶
Host 側在 lib/index.js 註冊兩個 session projection:
usageCost:對每條已結算的assistant/message用量事件,用事件自身的時間判斷峯谷時段,按tokens / 1e6 × 單價 × 時段折扣計價並累加,同時按輪累計,保留最近 120 輪。usageBudget:把每筆用量折成金額寫入按本地自然日聚合的賬本,輸出今日 / 本週 / 本月、預算等級與下一條預估所需的單價表。
兩個文件承擔核心邏輯:
lib/pricing.js:價目核心,無任何依賴,時段判定用Intl處理Asia/Shanghai與 DST。lib/budget.js:賬本核心,純函數,48 個單測,瀏覽器與 Node 都能跑。
賬本落在 $DSH_HOME/usage-budget/ledger.json。首次運行(或賬本版本變化)時會做一次全局回填:讀取所有已落盤的會話日誌,按每條用量事件自己的時間與價目重建賬本,之後只做增量;fork 會話的繼承前綴(session/end-seed 之前)會被跳過,避免重複計費。
界面與功能¶
插件不改動官方 DOM,而是走擴展點:
| 界面 | 位置 | 數據來源 |
|---|---|---|
| 本會話用量費用 | 輸入框狀態欄(用量圖標) | Host usageCost 投影,按每輪實際時段計價 |
| 預算 / 剩餘 / 下一條預估 | 輸入框狀態欄(盾牌圖標) | Host usageBudget 投影 + 全局賬本 |
| 賬戶餘額 | 會話頂部預設欄 + 預算彈窗 | remote.account.getBalance(與“設置 → 賬號與餘額”同源) |
| 逐輪價格 / 緩存節省 | 每條消息的“本輪用量”彈窗 | 用該輪 token 桶匹配 usageCost.turns |
| 每條消息用量行 | 每條助手消息底部 | usageCost.turns 裏該輪的 tokens + 金額 |
輸入框控件通過 conversation.composer.dock 槽位註冊,與內置用量控件同 id、更低 priority,從而原位替換;消息底部用量行走官方擴展點 conversation.chat.turnTail。預算彈窗與逐輪價格彈窗分別覆蓋“今日 / 滾動 7 天 / 自然月”的累計與單價拆解。
峯谷價目¶
內置默認價目爲人民幣元 / 100 萬 token(2026-11 取自 DeepSeek 官方價格頁):
| 模型 | 緩存命中 | 緩存未命中 | 輸出 |
|---|---|---|---|
deepseek-flash |
0.04 | 2 | 8 |
deepseek-v4-pro |
0.30 | 9 | 27 |
峯時爲北京時間週一至週五 09:00–12:00、14:00–18:00,其餘時間(含週末)一律 5 折;DeepSeek 不單列緩存寫入價格,故 cacheWrite: 0。pricing 配置項可整張覆蓋:
pricing:
currency: CNY
timezone: Asia/Shanghai
models:
deepseek-flash: { cacheRead: 0.04, cacheWrite: 0, input: 2, output: 8 }
deepseek-v4-pro: { cacheRead: 0.30, cacheWrite: 0, input: 9, output: 27 }
fallback: { cacheRead: 0.04, cacheWrite: 0, input: 2, output: 8 }
windows:
- { id: offpeak, label: { zh: 優惠時段, en: Off-peak }, start: "00:00", end: "09:00", days: [1,2,3,4,5], factor: 0.5 }
- { id: offpeak, label: { zh: 優惠時段, en: Off-peak }, start: "12:00", end: "14:00", days: [1,2,3,4,5], factor: 0.5 }
- { id: offpeak, label: { zh: 優惠時段, en: Off-peak }, start: "18:00", end: "24:00", days: [1,2,3,4,5], factor: 0.5 }
- { id: offpeak, label: { zh: 優惠時段, en: Off-peak }, start: "00:00", end: "24:00", days: [6,7], factor: 0.5 }
金額是估算,不是賬單:按可配置價目換算,峯谷按事件結算時刻判定;中國法定節假日未建模(窗口只支持星期),需要精確數額時以實際賬單爲準。
安裝與啓用¶
方式一是插件管理頁(README 推薦):
git clone https://github.com/dddfuxi/dsh-plugin-usage-budget.git
然後在 DSH 側欄打開 插件 → 添加插件 → 安裝第三方插件,把上面的倉庫地址粘貼到“包名/Git 地址”,或在“本地目錄”裏填 clone 下來的絕對路徑。安裝完成後啓用它,側欄“插件”裏會出現名爲 用量費用 的卡片(自帶圖標與中文描述)。
方式二是手動 bundle 安裝:
1. 複製本目錄到 %USERPROFILE%\.dsh\profiles\<profile>\node_modules\dsh-plugin-usage-budget
2. profile 的 package.json:
- dependencies 加 "dsh-plugin-usage-budget": "link:<本目錄絕對路徑>"
- dsh.profile.bundles 追加 "dsh-plugin-usage-budget"
3. HMR 會自動重組;頁面未更新時刷新一次;沒有 HMR 的 profile 需要重啓。
注意:README 未提供 dsh plugin add ... 這類一行式命令,安裝入口就是插件管理頁或手動 bundle,不要憑名稱自行拼接。
配置¶
預算數字寫在 profile 的 cordis.patch.yml 裏,只放 override(即預算數值),不要手寫 insert 行:
- id: usage-budget
name: dsh-plugin-usage-budget
config:
dailyBudget: 30
weeklyBudget: 100
monthlyBudget: 200
warnAt: 0.75
完整配置項如下:
| 鍵 | 默認 | 說明 |
|---|---|---|
dailyBudget |
20 | 日預算(元);0 關閉 |
weeklyBudget |
0 | 滾動最近 7 天預算(元);0 關閉 |
monthlyBudget |
0 | 自然月預算(元);0 關閉 |
warnAt |
0.8 | 花費/預算 ≥ 該比例時進入告警色(0–1) |
assumedOutputTokens |
600 | 發送前預估使用的輸出 token 數 |
assumedCacheReadRatio |
null | null = 用會話實測緩存命中率;0..1 可強制 |
pricing |
— | 可選:覆蓋價目(結構見上一節);省略則用內置默認價目 |
timezone |
Asia/Shanghai |
賬本與時段判定所用時區 |
預算數字也可以在 設置 → 通用設置 → 用量預算 裏直接改,回車或失焦即保存、立即生效。
計量口徑與測試¶
插件只統計已結算的 assistant/message 用量,被中斷、重試後未落盤的流式請求可能少算;累計範圍按所有會話共享,被攔的預算只是“守衛 + 提醒”,不攔截髮送。
測試:
npm test
# 等價於 node --test test/budget.test.mjs test/pricing.test.mjs
覆蓋時段邊界、跨午夜、時區與 DST、逐桶金額、緩存節省、未知模型回退、賬本滾動與髒數據容錯。
已知限制:
- 只統計已結算的
assistant/message;被中斷、重試後未落盤的流式請求可能少算。 - 全局回填只發生一次、範圍約最近 130 天;之後導入更早的會話日誌需要刪除賬本讓它重新回填。
- 預算只是守衛與提醒,不攔截髮送(DSH 的發送路徑沒有對外攔截槽位)。
- 發送前預估是啓發式:輸入 token 取上下文壓力投影,輸出長度取配置假定值。
適用場景與注意¶
適合已經在用 DSH、想要按金額而非 token 數看開銷的人:做長會話成本復盤、跨會話預算控制、確認緩存命中帶來的實際節省,或者給團隊一個統一的費用口徑。
兩點提醒:一是插件以當前 dsh 進程的權限運行,安裝前應檢查源碼與許可證;二是 DSH 生態的社區目錄是獨立站點,與 DeepSeek / 幻方無官方從屬關係,本插件並非官方應用商店裏的條目。如需覈對,可對照倉庫 README 與目錄頁 skillhub.cn/plugins/dddfuxi/dsh-plugin-usage-budget。
小結¶
它的價值在於把分散的 token 數字變成可讀的金額和可執行的預算門檻:費用按事件時刻的時段計價,預算跨會話累計並落地到本地賬本,逐輪價格和消息用量行讓每次改動都能對上賬。預算是用“提醒”而非“攔截”來落地,精確金額仍以賬戶賬單爲準。許可證爲 MIT,可自行審計後啓用。