dsh-cny-cost · Token 用量实时计价
English | 中文
English:
dsh-cny-costis a DeepSeek Harness web plugin that turns the token usage of DeepSeek official models into a theoretical CNY cost using the official peak/off-peak pricing. The cost appears under the composer and at the end of every completed turn, with a per-model, per-period breakdown. Install it from the Plugins page withgithub:FeiYuSS/dsh-cny-cost. MIT licensed.
DSH(DeepSeek Harness)Web 插件:在使用 DeepSeek 官方模型时,按官方公开定价把会话的 token 用量换算成理论人民币成本,并显示在三处:
| 位置 | 内容 |
|---|---|
输入框下方统计条(conversation.composer.dock) |
¥0.0123 费用 pill(与宿主用量统计同款图标+数值样式;≈ 只出现在悬停气泡与明细面板里);悬停显示气泡,点击展开会话费用明细 |
每个已完成回合的操作行(conversation.chat.assistant-actions,排在「复制/点赞/用量统计/时间」行尾) |
¥0.0042 pill;悬停显示「本回合 / 累计 / 分桶 / 时段」气泡,点击展开本回合明细 |
| 费用明细面板 | 总费用、按「模型 × 时段」的逐桶计算(tokens × 单价 = 小计)、时段拆分、每回合表、定价快照与口径说明 |
非 DeepSeek 官方模型不显示费用;混合会话只对官方模型计费(token 总数仍按宿主口径包含全部调用),并在面板中提示未计价次数。
两个 pill 的交互与宿主统计控件一致:hover 出现底色,悬停片刻(或键盘聚焦)出现读数气泡,点击在控件上方展开明细面板,Esc 或点击面板外关闭。
回合操作行里的费用 pill 依赖会话日志里记录的最后一条 Assistant 消息 id 与回合对应。 插件更新 Host 半侧后需要重启 DSH 才会切换到该精确映射;重启前客户端会退化为从 Chat 视图反查回合,功能一致。
官方定价自动检查(可选,默认开启)
插件会定期检查 DeepSeek 官方定价是否变化,变化时弹窗询问是否新建会话更新计费规则:
- 纯浏览器实现:官方文档站不返回 CORS 头,网页无法直接读取
api-docs.deepseek.com(命令行工具不受影响)。仓库里的 GitHub Actions 每小时把官方pricing.md解析成pricing/official-zh.json静态快照,浏览器插件轮询raw.githubusercontent.com(该域允许 CORS)。运行时没有自建服务,Host 半侧也没有新增接口。 - 变化弹窗:价格/规则与已确认快照不同时,用 DSH 通用组件样式弹出全局对话框,列出逐条变化。点「新建会话并更新规则」会新建会话并自动填入更新提示词:Agent 核对官方页面、修改
logic.js的默认价格/节假日/模型别名、更新测试与文档,然后汇报;不会自动发布。 - 设置标签页:设置 → 内置插件 →「Token 计价」可配置自动检查开关、检查周期(1 小时–30 天)、立即检查、手动发起规则更新;同时显示上次/下次检查、已确认快照、镜像同步时间与待确认变化。
- 设置保存位置:浏览器 localStorage(每个浏览器各自保存),不写入 profile 配置。
- 延迟与维护:镜像每小时同步一次,最多约 1 小时延迟;若镜像超过 7 天未更新,设置页会提示检查 GitHub Actions。官方改价后,需要按更新会话的产出发布新版本插件,已安装用户才会拿到新计价规则。
设计取舍与状态机见 docs/pricing-watch.md。
计价依据
官方文档「模型 & 价格」:https://api-docs.deepseek.com/zh-cn/quick_start/pricing/ (内置快照日期 2026-11-10)。单位:元 / 百万 tokens。
| 模型 | 输入·缓存命中(空闲/高峰) | 输入·缓存未命中(空闲/高峰) | 输出(空闲/高峰) |
|---|---|---|---|
deepseek-flash(含 deepseek-v4-flash、deepseek-v4-flash-vision-exp 别名) |
0.02 / 0.04 | 1 / 2 | 4 / 8 |
deepseek-v4-pro |
0.15 / 0.30 | 4.5 / 9.0 | 13.5 / 27.0 |
- 高峰:北京时间周一至周五(不含中国法定节假日)09:00–12:00、14:00–18:00;其余时段为空闲(半价)。
- 内置 2026 年法定节假日表(国办发明电〔2025〕7号)。跨年或官方调整时请更新
holidays配置。 - 价格与节假日是手工维护的快照(
logic.js的DEFAULT_FAMILIES/DEFAULT_HOLIDAYS,快照日期 2026-11-10)。 官方调价或发布新一年节假日安排后需要更新,建议至少每季度对照一次官方价格页;跨年后rateDate与holidays都应重新核对(2027 年节假日目前尚未内置)。 - 计费 = 命中输入 + 未命中输入 + 输出;缓存写入默认不计价(
writePrice: 0)。 - 推理 token 已包含在输出 tokens 中,不重复计算。
- Search / Fetch 按「次」计费,与 token 无关,不计入本插件。
- 内部以整数「纳元」(1 元 = 1e9 纳元)累加,避免浮点误差;费用按请求完成事件的时间戳归入高峰/空闲。 配置的单价格式是「元 / 百万 tokens」,精度为 0.001 元/百万 tokens(即 1 纳元/token);更细的价格会被 拒绝激活而不是静默取整,保证明细公式与计费一致。
数据一致性
费用使用的 token 分桶与宿主界面显示的 token 用量完全同源同口径:
- 插件在 Host 侧注册两个会话投影(
deepseekTokenCost、deepseekTurnCost),折叠已提交的会话日志; - 折叠规则镜像宿主
@deepseek-ai/dsh-token-meter的tokenUsage投影:同一 turn/step 的重复 usage 样本按替换处理、llm/retry-started关闭替换区间、assistant/attempt取 stream 中最后一次 usage; - 因此费用中的 hit / miss / write / output 总量恒等于宿主
tokenUsage投影的对应字段(usage 上报什么值就 用什么值,不做四舍五入或截断)。 - 会话 token 总数包含非官方模型的调用(与宿主口径一致),但费用只对配置了价格的模型计价;未计价的调用 次数会在明细面板里提示。
插件重装或新开会话时,投影会按需回填整个日志,历史会话也会显示正确费用。
安装
本包是标准 DSH bundle:安装时 dsh.bundle.patch 声明的 cordis.patch.yml 会作为 bundle
层自动应用,不需要再把其中的 insert 抄进配置档 patch(重复插入会产生同 id 冲突)。
从 GitHub 安装(推荐)
在 DSH 侧边栏「插件」页的安装入口填入下面的安装地址(也接受
https://github.com/FeiYuSS/dsh-cny-cost):
github:FeiYuSS/dsh-cny-cost
等价的 CLI(<profile> 换成你的配置档名,例如 desktop):
dsh plugin --profile <profile> add github:FeiYuSS/dsh-cny-cost
DSH 会以 git 依赖通过 pnpm 安装本包,并按 dsh.bundle 声明启用。首次安装后刷新一次
Harness 页面,浏览器半侧模块即会加载。非官方 bundle 升级需要先卸载再安装新版。
本地目录安装(开发用)
在插件页安装绝对路径目录(也接受 file: / link: 绝对路径),例如:
C:\Users\you\src\dsh-cny-cost
本包没有构建步骤,改完源码后重装或等待 HMR 即可;页面未出现新控件时刷新一次 Harness 页面。
配置
在配置档的 patch 中覆盖本插件的 config(整段替换;未写字段取默认值):
- id: cny-cost
name: dsh-cny-cost
config:
rateDate: '2026-11-10'
models:
deepseek-flash: flash
deepseek-v4-flash: flash
deepseek-v4-flash-vision-exp: flash
deepseek-v4-pro: pro
families:
flash:
peak: { hit: 0.04, miss: 2, out: 8 }
idle: { hit: 0.02, miss: 1, out: 4 }
pro:
peak: { hit: 0.30, miss: 9, out: 27 }
idle: { hit: 0.15, miss: 4.5, out: 13.5 }
writePrice: 0
periodMode: auto # auto | peak | idle(后两者用于自测或保守估计)
# holidays 是整段替换:不写则使用内置 2026 年表;一旦提供就完全覆盖内置表,
# 所以自定义时要写完整的法定节假日列表,否则会漏掉其余假期、把高价时段算多。
# holidays:
# - '2026-01-01'
# - '2026-10-01'
配置改动后插件会重启并重新折叠日志,历史会话费用随之更新。配置字段有拼写错误时插件会拒绝激活并 在日志中给出明确原因。
已知边界
- 展示的是理论成本,不是账单;实际扣费以 provider 返回的 usage 与官方结算为准。
- 高峰期边界时刻附近按请求完成时间归类,可能有秒级偏差。
- 调休上班的周末仍按「周一到周五才是工作日」的规则计为空闲(法定节假日表只覆盖放假日),
与把「工作日」理解为含调休的口径不同;需要保守估计时可用
periodMode: peak。 - 子代理是独立会话,各自显示自己会话的费用,不汇总进父会话。
- fork 出的子会话包含被复制历史的费用(与宿主
tokenUsage口径一致)。 - 已压缩/剪枝的历史仍计入费用(计费是全会话口径)。
- 未上报 usage 的尝试(如中断且无 usage)不计费。
- 每个回合的明细只展示该回合的聚合结果;一个回合内混用多个模型时会提示「分模型单价见会话费用明细」。
- 自动定价检查只在 Harness 页面打开时轮询;页面关闭期间不检查,下次打开会按周期补检。
- 官方文档站没有 CORS 头,浏览器无法直连官方页;检测基于 GitHub Actions 维护的静态镜像,最多约 1 小时延迟。
- 自动检查的设置保存在当前浏览器的 localStorage,不同浏览器/设备各自独立。
开发与测试
纯计价/折叠逻辑在 logic.js,不依赖任何包,可直接用 Node 测试:
npm test # node --test(计价/折叠/客户端模块/镜像校验,共 34 项)
npm run check:locale # 校验 client.js 用到的文案键在中英文里都存在
npm run check:package # 校验包名、patch 行、loader id、exports、镜像与 client 基线一致
npm run check # 以上全部
npm run sync:pricing # 手动拉取官方 pricing.md 并刷新 pricing/official-zh.json
测试覆盖峰谷边界(含周末、法定节假日)、模型别名、缓存分桶、同 step 替换、重试另计、
逐回合落账、金额精度、配置校验与视图/状态校验;test/client-pricing.test.mjs 还会从
client.js 中提取浏览器内置的定价检查模块,校验其解析/差异/提示词与 Node 版一致,
并模拟加载客户端模块确认四个 slot 注册。
装好本插件后还可以用真实会话日志做端到端核对(需要 DSH_HOME 指向 DSH 主目录):
# Windows (PowerShell)
$env:DSH_HOME="$env:USERPROFILE\.dsh"; node scripts/verify-against-host.mjs <sessionId>
# macOS / Linux
DSH_HOME="$HOME/.dsh" node scripts/verify-against-host.mjs <sessionId>
脚本会用独立实现的参考折叠与插件折叠各算一遍,并与宿主 tokenUsage 投影的持久化
检查点逐项比对。
贡献
欢迎提 Issue 和 Pull Request。提交前请跑一遍 npm run check;CI 会在 Node 22 和 24
上运行同样的检查。
No comments yet. Be the first to write one.