前言¶
DeepSeek Harness (DSH) 的核心設計理念是「一切皆插件」。在通過 Web GUI 進行本地開發或調試時,實時掌握 DeepSeek 賬戶餘額、當前會話的 Token 消耗以及上下文佔用情況,是控制成本和調試模型行爲的基礎。
dsh-session-balance 插件專門解決這一問題。它不改變會話狀態,也不發起模型請求,而是在 DSH Web GUI 的會話標題欄右側掛載一個餘額徽標。點擊展開後,可以查看賬戶餘額明細、會話 Token 用量統計、上下文壓力(Context Pressure)以及基於當前模型單價的費用估算。
核心功能¶
該插件通過宿主與瀏覽器的協作實現數據展示:
- 賬戶餘額:通過調用 DeepSeek
GET /user/balance接口,獲取賬戶總額、充值餘額、贈送餘額及可用狀態。 - 會話用量:讀取會話投影(Projection)中的
tokenUsage(細分爲未緩存輸入、緩存讀取、緩存寫入、輸出)與sessionStats(輪次、步驟、模型耗時)。 - 上下文壓力:讀取
contextPressure數據,顯示已用 Token 與窗口限制的佔比。 - 費用估算:在瀏覽器本地,根據當前選中的模型單價(
modelSelection投影)將 Token 數量換算爲 CNY(元)。 - 安全設計:全程只讀。API Key 僅在宿主進程內使用,不會寫入前端響應;路由僅接受同源 GET/HEAD 請求,防止跨域調用。
安裝與啓用¶
插件由「宿主插件」和「瀏覽器插件」兩部分組成,需要安裝到當前使用的 web profile 中。
1. 添加插件包¶
將插件目錄以軟鏈方式加入 profile:
dsh plugin --profile web add link:/path/to/dsh-session-balance
注:link: 表示軟鏈,修改代碼後重啓 dsh web 即可生效。若需固定副本,可使用 file:/path/to/dsh-session-balance。
2. 掛載插件行¶
編輯 profile 配置文件 ~/.dsh/profiles/web/cordis.patch.yml,添加插件行。該文件默認爲空列表,直接追加即可:
- insert:
- id: session-balance
name: 'dsh-session-balance'
3. 重啓服務¶
重啓 DSH Web 服務以加載插件:
dsh web
刷新 Web GUI(通常是 http://127.0.0.1:3080)後,會話標題欄右側應出現餘額徽標。
配置參考¶
所有配置項均爲可選,通過 config 字段覆蓋默認值。
基礎配置¶
| 字段 | 默認值 | 說明 |
|---|---|---|
balanceEnabled |
true |
是否請求餘額接口。關閉後僅顯示本地用量與費用。 |
apiKeyEnv |
DEEPSEEK_API_KEY |
憑據引用名,用於從環境變量或 ~/.dsh/.credentials.yaml 讀取 Key。 |
baseURL |
$DEEPSEEK_BASE_URL → https://api.deepseek.com |
DeepSeek API 基址。若使用自建網關,需在此處配置。 |
timeoutMs |
10000 |
餘額請求超時時間(毫秒)。 |
cacheMs |
60000 |
宿主側餘額緩存時長(毫秒)。 |
refreshMs |
60000 |
前端輪詢刷新間隔(毫秒)。設爲 0 表示僅加載一次。 |
rate |
off-peak |
off-peak(空閒)或 peak(高峯)。高峯時段價格係數爲 2。 |
currency |
CNY |
費用估算的計價幣種,僅影響顯示。 |
顯示開關¶
| 字段 | 默認值 | 說明 |
|---|---|---|
showBalance |
true |
面板是否顯示賬戶餘額。 |
showTokens |
true |
是否顯示 Token 用量。 |
showCost |
true |
是否顯示費用估算。 |
showContext |
true |
是否顯示上下文佔用。 |
模型單價覆蓋(Pricing)¶
插件內置了 DeepSeek 官方定價的默認值,但單價可能隨時間調整,建議根據實際模型配置覆蓋。
默認單價(元 / 1M tokens,空閒時段):
| 模型 | 緩存命中輸入 | 緩存未命中輸入 | 輸出 |
|---|---|---|---|
deepseek-flash |
0.02 | 1 | 4 |
deepseek-v4-flash |
0.02 | 1 | 4 |
deepseek-v4-flash-vision-exp |
0.02 | 1 | 4 |
deepseek-v4-pro |
0.15 | 4.5 | 13.5 |
配置示例:
config:
rate: peak
currency: CNY
pricing:
deepseek-v4-pro:
cacheHitInput: 0.3
cacheMissInput: 9
cacheWriteInput: 9
output: 27
注意:pricing 表中的數值按空閒時段基準填寫,rate: peak 時程序會統一乘以 2。
工作原理¶
插件利用 DSH 的投影機制獲取數據,不修改宿主狀態。
- 數據源:會話用量和上下文壓力來自宿主已有的投影(如
dsh-token-meter提供的tokenUsage和contextPressure)。 - 前端計算:費用估算完全在瀏覽器端完成,使用投影中的累計 Token 數和宿主下發的單價表。
- 餘額獲取:前端通過路由
fetch /dsh-session-balance/api/overview請求宿主,宿主讀取憑據後調用 DeepSeek API。餘額請求帶有 TTL 緩存和併發合併機制,避免頻繁請求打爆上游。 - 安全路由:後端路由只接受同源的 GET/HEAD 請求,檢查
Origin與Host一致性,否則返回 403。
兼容性與要求¶
- DSH 版本:需 DSH
0.1.5-rc.1及以上,且 Web composition 中已啓用dsh-token-meter、dsh-session-stats、dsh-api-session-controller。 - Node.js:宿主環境需 Node.js
>=20。 - 瀏覽器:需支持
Intl.NumberFormat和可選鏈操作符的現代瀏覽器。
排查¶
如果功能未正常顯示,可參考以下現象與原因:
| 現象 | 原因 / 處理 |
|---|---|
| 標題欄沒有徽標 | 確認 cordis.patch.yml 中已添加 session-balance 插件行並重啓;確認插件包已安裝在 node_modules 中。 |
| 徽標顯示「未配置 API Key」 | 檢查環境變量 DEEPSEEK_API_KEY 或 ~/.dsh/.credentials.yaml 中的配置。 |
| 顯示「獲取失敗」 | 檢查 baseURL 是否正確(如使用了自建網關),或 API Key 是否有效,查看網絡請求詳情。 |
| 費用顯示「未配置該模型單價」 | 在 pricing 配置中補全當前使用的模型 ID。 |
| token 一直是 0 | 確認會話中已發送過帶 usage 數據的請求;檢查 dsh-token-meter 是否在 web composition 中啓用。 |
| 餘額與官網不一致 | 官網可能包含未結算費用;插件按緩存刷新,可在面板點擊刷新按鈕強制更新。 |
License¶
MIT