Session Cost Pill:在 Composer 底栏实时显示会话费用

前言

在 DeepSeek Harness(DSH)里跑长会话时,界面通常会告诉你用了多少 token、解码速度、上下文占用,但不会直接给出「这一会话大概花了多少钱」。若自己用单一单价去乘总 token,在 DeepSeek 上往往偏差很大:官方按峰谷时段调价,缓存命中与未命中的输入单价也差一个数量级。下面介绍社区插件 Session Cost Pill(仓库 vegerot/deepseek-harness-session-cost-pill),它在不修改 Harness 源码的前提下,把当前会话的估算费用放进 Composer 底栏,与已有的 activity、usage、context 等 pill 同一行展示。

这是什么

Session Cost Pill 由维护者 vegerot 发布,在 SkillHub 目录中归类为模型推理。它是基于 Cordis 的普通客户端插件:通过 slot 注入 Composer dock,读取会话快照里的每一步 assistant 用量与时间戳,按 DeepSeek 公布的峰谷价与分项单价累加,得到本会话的实时估算支出。DeepSeek 会报告 token 消耗,本插件补的是费用侧的可视化。

Composer 底栏里多了什么

Composer dock 原本已有 turns、速度、token、上下文等指标。安装后多出一枚 cost pill,显示本会话的估算总费用;图标会随金额区间变化,便于扫一眼判断量级(例如低于 1 美元、低于 5 美元等档位,README 中用不同 glyph 区分)。

点击 cost pill 会展开明细:未缓存输入、缓存读取、输出分别计价;并说明总额中有多少按峰时单价计、涉及多少 step。面板关闭方式依赖浏览器 popover 行为(Escape、点外部或再次点击),插件自身不维护对话框状态或定位逻辑。

与同一行的其他 pill 对应关系如下(摘自 README):

Pill 展示内容
activity turns · steps · decode speed
usage total tokens · cache-hit rate
cost 本会话估算费用
context context-window pressure

计价逻辑:为什么不是「总 token × 一个单价」

README 指出,简单用会话总 token 乘固定单价在 DeepSeek 上会错两次。

峰谷时段

峰时单价约为非峰时的两倍。非峰为除下列窗口外的所有时间(含整个周末);峰时为 UTC 周一至周五 01:00–04:00 与 06:00–10:00。插件对每一步 assistant 请求根据其时间戳判断是否在峰时,再选用对应单价,跨峰边界的长会话会得到混合计价后的总和,而不是整段会话套一个费率。

README 转录的单价(USD / 1M tokens,来源 Models & Pricing)示例:

Model Tier Cache hit input Cache miss input Output
deepseek-flash off-peak 0.003 0.15 0.60
deepseek-flash peak 0.006 0.30 1.20
deepseek-v4-pro off-peak 0.022 0.66 1.98
deepseek-v4-pro peak 0.044 1.32 3.96

缓存命中与未命中

缓存命中的输入单价远低于未命中。长 agent 会话里 cache-hit 比例可以很高;若把所有 prompt token 混为一桶,估算会明显偏离。插件按用量里的分项(含 cache 相关字段)分别计价。

与平台账单的核对

DeepSeek 未提供公开 pricing API;README 记载曾用 Platform 控制台的真实账单与插件表格对比某账户 2025 年 10 月 deepseek-flash 用量,合计与平台折算美元后相差约 0.11%(该月用量 effectively 全非峰)。这说明的是费率表与分项算法与官方一致的方向,不是承诺任意账户、任意月份都相同。

实现上,插件通过 session standard kit 读取聊天快照:useChat 得到每一步 settled assistant step 的 time 与 usage,useProjection('modelSelection') 得到会话模型,再按

total = Σ over steps  costOfUsage(step.usage, model, isPeak(step.time))

累加。注入方式示例(README):

ctx.slots.inject('conversation.composer.dock', () => ctx.slots.register({
  name: 'conversation.composer.dock',
  id: 'cost-pill',
  order: 2,            // joins the activity (0) and usage (1) pills
}, CostPill));

安装与启用

安装无需 build、bundler 或额外依赖;添加插件后重启对应 profile 并刷新页面即可。官方 README 给出的命令为本地路径形式(请按你本机 clone 位置替换路径):

dsh plugin --profile web     add ~/code/github.com/vegerot/deepseek-harness-session-cost-pill
dsh plugin --profile desktop add ~/code/github.com/vegerot/deepseek-harness-session-cost-pill

插件以当前 dsh 进程权限运行;安装前建议阅读仓库源码与 MIT 许可证,确认符合你的安全与合规要求。SkillHub 目录页(https://www.skillhub.cn/plugins/vegerot/deepseek-harness-session-cost-pill)是社区索引,与 DeepSeek / 幻方无官方从属关系,并非官方应用商店。

典型用法

  1. 按上文命令为 web 或 desktop profile 添加插件并重启、刷新。
  2. 在 Harness 中正常发起对话;Composer 底栏出现 cost pill 后,数字会随本会话各 step 的用量更新。
  3. 需要看分项与峰时占比时,点击 cost pill 打开 breakdown;用完 Escape 或点外部关闭。

未定价的模型不会显示错误数字,而是不渲染 pill(README 与测试套件中均有说明)。

适用场景与已知限制

适合谁: 在 DSH 里长时间调试 agent、需要边跑边看「这一会话大概花多少」的开发者;尤其依赖 cache、或会话跨越 UTC 峰谷边界时,分项 + 逐步峰谷计价比手算更可靠。

需要注意的限制(README 原文要点):

  • 中国法定节假日在业务上可能全程按非峰处理,插件未接入 PRC 节假日历;落在法定假日本应非峰的工作日窗口仍可能被标成峰时,那些天会略高估。
  • 模型按会话级选取:单步节点有 time 和 usage 但没有 per-step 模型名;会话中途换模型时,所有 step 会按最近选用模型的费率计价。
  • 不展示账户级总账单:Platform 控制台有真实账单接口,但依赖浏览器侧 Remote 的 zod codec 等,README 写明当前版本 deferred,界面只见会话估算,不见全账户消费。

开发侧:pnpm test 运行 tsc --noEmit && node --test test.ts;客户端 client.js 以经典 script 注入,类型靠 JSDoc + tsc --checkJs,无浏览器 build 步骤。README 标注测试 33 passing。

结尾

Session Cost Pill 把 DeepSeek 峰谷价、缓存分项和逐步时间戳揉进 Composer 底栏的一枚 pill,让「token 很多」和「大概多少钱」在同一块 UI 里对齐。目录页:https://www.skillhub.cn/plugins/vegerot/deepseek-harness-session-cost-pill ;源码与完整说明:https://github.com/vegerot/deepseek-harness-session-cost-pill 。

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

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

Xiaoye