前言¶
在 DeepSeek Harness(DSH)裏跑智能體,成本往往來自三塊:每次請求的輸入 token、緩存是否命中、以及你寫進提示詞裏的冗餘空白和重複段落。官方用量字段裏還有一個容易踩坑的地方:usage.inputTokens 只統計緩存未命中部分,命中部分在 cacheReadTokens,兩者相加纔是本次真實輸入量。若只盯前者,會低估實際花費,也很難判斷提示詞緩存是否在起作用。
下面介紹社區插件 dsh-token-saver(維護者 lucaixia1982,分類爲模型推理):在指令進入模型前做不改語義的「瘦身」,並在左側欄展示本次與累計省下的 token、金額,以及緩存相關指標。它與負責壓縮上下文的 billion-context 等插件互補,只管進模型前的提示詞與記賬展示。
這是什麼¶
dsh-token-saver 是 DSH 的省錢類插件:通過 agent/pre-step 鉤子在自然語言指令送達模型前刪除可安全去掉的冗餘,同時監聽 session/event 裏帶 usage 的 assistant/message,按 DeepSeek 定價口徑記賬,最後在 sidebar.footer.action(id token-saver)渲染側邊欄徽章。聚合數據落在 ~/.dsh/dsh-token-saver.json。
npm 包名爲 @acmepoyen/dsh-token-saver,當前資料中的版本爲 0.1.3,許可證 MIT,要求 Node >= 20。
指令瘦身(agent/pre-step)¶
插件在模型看到新消息之前,只做刪除、不改語義,具體包括:
- 行尾空格
- 連續 3 個以上空格
- 連續 3 個以上空行
- 連續重複的非空行
- 重複段落(長度 ≥ 60 字符)
- 結尾寒暄(如「謝謝」「麻煩了」「thanks」等)
約束與保守策略(資料原文):
- 代碼塊(``` 圍欄)內一字不動。
- 運行時上下文消息一律跳過,不瘦身。
- 單條消息瘦身收益不足 15 token 或不足 4% 時保留原文。
- 單條用戶消息短於 80 字符 時不做瘦身(純短指令省不下 token,屬刻意取捨)。
- 改寫隻影響進入轉發的新消息,歷史消息不會被改寫。
真實用量記賬與金額口徑¶
每次模型調用,插件記錄:輸入未命中 token、輸入命中緩存 token、輸出 token,並正確處理 DeepSeek 將命中與未命中拆成兩個字段的情況。
價格寫死在 index.js 的 DEFAULTS(元/百萬 token,DeepSeek 官方檔):
| 配置項 | 含義 | 默認值 |
|---|---|---|
priceInputMiss |
輸入未命中 | 2 |
priceInputHit |
輸入命中 | 0.2 |
priceOutput |
輸出 | 3 |
據此:
- 累計花費 =(未命中 × 2 + 命中 × 0.2 + 輸出 × 3)/ 1e6
- 緩存摺扣已省 = 命中 token / 1e6 ×(2 − 0.2)
- 瘦身已省 = 省下的指令 token / 1e6 × 當前輸入均價
指令瘦身省下的 token 會留在會話請求前綴裏,後續每次調用都會再省一次,累計值按調用次數累加。DeepSeek 調價後需改 DEFAULTS 並重啓;價格是硬編碼常量,不是在線拉取。
左側欄徽章與緩存健康度¶
安裝成功後,左側欄底部會出現徽章,一般不需要重啓 DSH 桌面端(改插件代碼才需要重啓裝載)。
展示行爲:
- 寬欄:例如
本次 ¥0.02 · 累計 ¥13.11 - 窄欄(56px 軌道):只顯示本次
- 懸停可見約八行明細:本次會話、累計省(緩存摺扣 + 指令瘦身)、開啓前/後對比、累計命中、調用次數、緩存前綴重建次數、瘦身條數等
「本次」按最近一次有模型調用的會話統計,隨 ~/.dsh/dsh-token-saver.json 持久化,重啓不清零;只保留最近 20 個會話。
緩存健康度:記錄 request/header 裏 startsSeries 的次數。每重建一次請求序列,可複用的前綴就作廢一次、下一次調用幾乎全價,這個數字越小越好。
客戶端半 client.js 對宿主暴露的 stats 接口做約 5 秒 輪詢(路徑見 README:/plugins/dsh-token-saver/stats)。
安裝與啓用¶
插件以當前 DSH 進程權限運行,安裝前應自行查看 GitHub 源碼 與 MIT 許可證。資料中的安裝方式如下,任選其一:
方式一:dshfind 插件市場
在 dshfind 插件市場裏搜索 dsh-token-saver(包名 @acmepoyen/dsh-token-saver)一鍵安裝。
方式二:npm 後掛載
npm i @acmepoyen/dsh-token-saver
安裝後按文檔將包目錄交給 plugin_manager 的 install_bundle(target 使用絕對路徑)。
方式三:本地包目錄
把本包目錄交給 plugin_manager 的 install_bundle,target 用絕對路徑。
裝載由 cordis.patch.yml 完成,插入 id: dsh-token-saver。主要文件:index.js(宿主:瘦身 + 記賬 + stats HTTP)、client.js(側邊欄徽章)、locale/*.json 與 icon.svg。
關閉瘦身但保留記賬¶
若只想看用量與側欄、不改編譯前進模型的文本,可在裝載配置中關閉瘦身,記賬與側欄仍工作:
config:
enabled: false
(給裝載行加上上述 config,具體寫法以 cordis.patch.yml 與 DSH 插件裝載文檔爲準。)
適用場景與邊界¶
適合誰
- 長期在 DSH 裏寫長提示詞、粘貼日誌或重複說明的開發者,希望在不改語義的前提下去掉空白與重複。
- 需要對照「未命中 + 命中」真實輸入、並在 UI 裏看累計省錢與緩存命中率的人。
明確不做的事(README 邊界)
- 不改寫模型回覆,也不壓縮上下文(上下文壓縮屬 billion-context 等插件範疇)。
- 只統計
assistant/message裏帶 usage 的調用;子代理調用同樣計入累計。
開發注意
已安裝位置是拷貝而非軟鏈;改 GitHub 工作區源碼若不重新部署/install,安裝目錄不會自動更新。源碼目錄可用 deploy.ps1 將宿主半寫成指向工作區的薄殼;修改 index.js / client.js 時勿用 PowerShell 5.1 的 Get-Content / Set-Content 處理 UTF-8,以免中文亂碼,應使用編輯器或 Node 腳本(UTF-8 無 BOM)。
結尾¶
dsh-token-saver 把「提示詞無損瘦身」和「按 DeepSeek 用量字段正確記賬」收進一個側邊欄徽章裏,適合作爲日常跑 agent 時的成本可觀測層。社區目錄頁:skillhub.cn/plugins/lucaixia1982/dsh-token-saver;源碼與說明:github.com/lucaixia1982/dsh-token-saver。