dsh-token-saver:指令進模型前無損瘦身,左側欄看省下多少 token

前言

在 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)

插件在模型看到新消息之前,只做刪除、不改語義,具體包括:

  1. 行尾空格
  2. 連續 3 個以上空格
  3. 連續 3 個以上空行
  4. 連續重複的非空行
  5. 重複段落(長度 ≥ 60 字符)
  6. 結尾寒暄(如「謝謝」「麻煩了」「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。

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

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

小夜