dsh-plugin-token-cost:在输入框旁实时显示当前会话 token 花费

前言

在 DSH Web 里跑长会话时,界面通常会有一条内置统计,例如 38.4M tok · 缓存命中 99.6%,告诉你用了多少 token、缓存命中率如何。这条线回答的是「量」,不直接回答「按官方价目表,当前会话大概花了多少钱」。

若要对账或控制成本,往往还要自己拿 token 分桶去乘单价,并区分高峰与空闲时段。dsh-plugin-token-cost 是社区客户端插件,把服务端上报的精确分桶与 profile 里的价格表结合起来,在 composer 旁边显示参考金额,并可展开核对每一档的 token、单价与计费规则。

下面介绍插件定位、能力与安装配置方式,以及使用时需要接受的计费口径边界。

这是什么

插件在 DSH Web 输入框旁实时显示当前会话已产生的 token 花费(默认以人民币展示)。token 数来自服务端 tokenUsage 投影,不是本地按字符估算;金额由分桶 token 数乘以你在 profile 中配置(或使用内置默认)的价格表计算得出。

核心功能

精确分桶,而非本地估算

服务端上报四个分桶:cache-hit input(命中缓存的输入)、cache-miss input(未命中缓存的输入)、cache write(缓存写入)、output(输出)。插件按这四个桶累加当前会话用量,与 README 中「Token counts are exact」的说明一致。

金额与明细

各分桶 token 数乘以价格表中对应单价得到分项金额。界面上以胶囊形式展示合计;点击可展开:每档 token 数、单价、该项金额,并同时列出高峰与空闲两套单价(当前生效的一套会标出),便于与账单对照。

界面位置与时段

展示位置与内置 token 统计条相邻,字号与高度一致。高峰 / 空闲默认可按 UTC 自动判断(周一至周五 01:00–04:00、06:00–10:00 为高峰);也可在配置里固定为 peak 或 off-peak,不必跟随时钟。

内置默认价目(高峰价)

内置表单位为元 / 百万 token,表内数值为高峰价;空闲价在显示时按「空闲 = 高峰的一半」折算(与 README 对官方规则的描述一致)。

模型 命中 / 未命中 / 输出(¥/1M tok,高峰)
deepseek-flash 0.04 / 2 / 8
deepseek-v4-pro 0.30 / 9 / 27

未在价格表中配置的模型会显示提示,不会静默显示 ¥0。

安装与启用

插件面向 web profile。安装命令以仓库 README 为准:

dsh plugin --profile web add github:jessicacui99/dsh-plugin-token-cost

若本地已有插件目录 checkout,也可使用绝对路径安装(README 英文小节):

dsh plugin --profile web add /absolute/path/to/dsh-plugin-token-cost

说明:

  • 宿主侧在 profile 开启 patchReload: live 时会自动挂载;浏览器侧需要刷新一次页面后才会看到客户端 UI。
  • 无单独构建步骤:lib/client.js 为手写 bundle,仅依赖 React 与 react/jsx-runtime;宿主侧不 import 第三方包。

安装前建议浏览仓库源码与 MIT 许可证;插件在当前 DSH 进程权限下运行,与目录里其他客户端插件一样,信任边界取决于你安装的代码。

自定义价格与时段

与账单不一致时,可在 ~/.dsh/profiles/<profile>/cordis.patch.yml 中覆盖 token-cost 插件的 config。注意:一个 patch 会替换整段 config,因此需要把仍要保留的字段全部写全,不能只写改动项。

- id: token-cost
  config:
    currency: CNY          # 仅影响展示符号(¥ / $ / €)
    period: auto           # peak | off-peak | auto
    models:
      - model: deepseek-flash
        provider: deepseek-official
        inputCacheHit: 0.04     # 元 / 1M tokens,高峰单价
        inputCacheMiss: 2
        output: 8
      - model: deepseek-v4-pro
        provider: deepseek-official
        inputCacheHit: 0.3
        inputCacheMiss: 9
        output: 27

负数字段、缺少 model、拼错的 period 等错误配置会在加载时失败,而不是以错误价格静默运行。

典型用法

  1. 在 web profile 执行上述 dsh plugin --profile web add ... 完成安装。
  2. 刷新 DSH Web 页面,在 composer 旁查看与内置 token 统计并列的花费胶囊。
  3. 点击胶囊查看分桶明细及高峰 / 空闲单价对照。
  4. 若需固定按高峰或空闲计价,将 period 设为 peak 或 off-peak;否则保持 auto 跟随 UTC 规则。
  5. 官方调价或价目与内置表不一致时,按上一节补全 cordis.patch.yml 并重载 profile。

适用场景与注意

适合:在 Web 端长时间调试 agent、需要随会话推进观察「参考花费」、并希望用分桶明细与账单核对的开发者。

边界(README 明确说明,使用时请一并接受):

  • 显示金额为参考值,不是正式账单:例如缓存写入按「未命中」价计;高峰 / 空闲按 UTC 规则或你的 period 设置;官方改价或改规则后需更新价格表。
  • 长会话中每个请求会重发整段上下文,prompt token 会随轮次增长(缓存命中占主体),这是计费模型本身,不是插件重复计数;同一 turn/step 的重复记录会被替换而非累加。
  • Subagent 消耗不计入父会话数字,各自独立会话。
  • 会话中途切换模型后,累计 token 整体按 modelSelection.lastUsed(当前模型)计价;tokenUsage 为整段日志合计,不按模型拆分。
  • 仅当前会话:切换会话后数字归零重算。

DeepSeek Harness 生态强调「一切皆插件」;社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-plugin-token-cost 把服务端四档 token 用量与可配置价目表接到 Web composer 旁,在保留内置 token 统计的同时补上「花了多少钱」这一维,并支持展开核对高峰 / 空闲单价。安装以 README 中的 dsh plugin --profile web add github:jessicacui99/dsh-plugin-token-cost 为准;价目与时段可在 cordis.patch.yml 中完整覆盖。

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

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

小夜