前言¶
在 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。