← Back to home@Ayaka157

dsh-conversation-cost

在 DSH 对话底部统计行实时显示 DeepSeek 用量费用(人民币/美元双币,含缓存命中与峰谷定价)

Stars
1
Language
JavaScript
Created
Aug 14, 2026
Updated
Sep 11, 2026
GitHub repo

Introduction

dsh-conversation-cost

在 DSH Web 的对话底部,把本次对话的费用(人民币 + 美元双币)以官方 Token 用量二级菜单里的追加区段呈现,按 DeepSeek 官方表价逐请求计价。

功能

  • 逐请求精确计费:Host 侧注册 costLedger 会话投影(带 wire 客户端视图),把每条请求的「提供方上报用量 + 请求发出时刻 + 调用模型」折叠进「档位 × 模型」token 桶。O(1) 状态、O(1) 每事件开销,不做聚合估算、不重放日志。
  • 区分调用时间 / 调用模型 / 缓存命中:每条请求按自身发出时刻归入峰谷档位、按自身模型取价、命中与未命中输入分别计价,因此同一会话跨时段、跨模型、混合缓存命中率都能算准,而不是拿当前时刻乘一个聚合总量。
  • 双币显示:¥0.7500 / $0.1125 —— ¥ 取官方中文页人民币表价、$ 取官方英文页美元表价,两套表各自独立,不做汇率折算。
  • 峰谷定价:高峰 = 北京时间周一至周五 9:00–12:00、14:00–18:00,其余为空闲(空闲价 = 高峰价的一半)。2026-08-17 00:00(北京时间)之前的会话走已废止的平价表。
  • 模型更名兼容:官方已把 deepseek-v4-flash 更名为 deepseek-flash(旧名仍可调用、按 Flash 价计费),插件以「模型族」计价,新旧名与历史会话日志都能正确计价;未知模型不计价并明确标注。
  • 融入官方统计菜单:费用作为「Token 用量」弹层里的追加区段,沿用官方弹层的标题行、分隔线与详情网格样式;官方统计行与详情内容完全保留、不改动。
  • 优雅降级:若官方弹层的 DOM 结构变化导致定位失败,费用自动并回统计行显示为同一行的一格(官方统计格同款 pill 样式),金额信息不会丢失。

安装

从 GitHub 安装:

npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Ayaka157/dsh-conversation-cost
dsh web

或先 clone 到本地,再从本地目录安装:

git clone https://github.com/Ayaka157/dsh-conversation-cost.git
cd dsh-conversation-cost
dsh plugin --profile web add .

卸载:

dsh plugin --profile web remove dsh-conversation-cost

定价表

2026-09-11 抓取官方中/英文定价页。每格为 ¥ / $(每百万 tokens)。

模型档位命中未命中输出
deepseek-flash高峰0.04 / 0.0062.0 / 0.308.0 / 1.20
deepseek-flash空闲0.02 / 0.0031.0 / 0.154.0 / 0.60
deepseek-v4-pro高峰0.30 / 0.0449.0 / 1.3227.0 / 3.96
deepseek-v4-pro空闲0.15 / 0.0224.5 / 0.6613.5 / 1.98

已下线的历史价(2026-08-17 前生效,仅用于给更早的会话计价):

模型命中未命中输出
deepseek-v4-flash(→ flash 族)0.02 / 0.00281.0 / 0.142.0 / 0.28
deepseek-v4-pro0.025 / 0.0036253.0 / 0.4356.0 / 0.87

计费公式(¥ 与 $ 各自套同一式):

费用 = 未命中输入 / 1e6 × 未命中价
     + 命中输入   / 1e6 × 命中价
     + 缓存写入   / 1e6 × 0          ← 缓存写入免费
     + 输出       / 1e6 × 输出价

价格随时可能变动,以上为 2026-09-11 抓取的官方表价,使用前请复查 中文定价页 与 英文定价页。

兼容性

项目范围
DSH>=0.1.5-alpha.2 <0.2.0;0.1.5-rc.1 与 0.1.5-rc.2 声明 compatible
Node.js>=20(宿主半部为 ESM)
平台Web(dsh.client.platform = "web")
外部依赖zod(peer,宿主半部用于投影 schema 校验;DSH 安装自带)
权限只读会话投影 + 本机 Host RPC(sessions.models 取模型名)+ 纯本地查表:不读文件、不发起外部网络请求、不执行命令、不接触凭据

package.json 的 dsh.compatibility.dshReleases 为逐版本声明,证据强度如下:

  • 0.1.5-rc.1 = compatible:在本机一次性 Profile 中完成真实安装、启动与运行验收(宿主半部成功挂载 costLedger,浏览器半部进入 boot manifest 并成功构建/投递),单元测试全绿。
  • 0.1.5-rc.2 = compatible:通过官方发行包逐项核对该版本插件所依赖的契约面 —— dsh-client-ui-conversation / dsh-client-locale / dsh-client-connection 的 . 与 ./client 导出、dsh.client 的 web 声明、conversation.composer.dock slot 与官方 id: "stats" 格、data-session-stats-usage 弹层锚点、locale 命名空间注册。属来源兼容声明,未在该版本做真实 Profile 运行验收。
  • 0.1.5-alpha.2 = unknown:未验证,不冒充已验证。

换版本时插件按契约面自适应:弹层锚点缺失只会退化为底部独立一行,不会报错或影响官方界面。

说明与限制

  • 数据源:costLedger 折叠 assistant/message(提供方上报用量 + 自带模型源)与 assistant/chunk(失败请求的用量),计价时间取 step/start(请求发出时刻)。
  • 必须带 wire:投影单元只有声明了 wire(viewSchema + view)才会进入客户端快照。少了它该 key 就是 host-only,浏览器 useProjection("costLedger") 恒为 undefined,插件会静默退化成聚合近似值(带 ≈)。测试里有专门的注册契约用例守这条。
  • 存储开销:checkpoint 只存「档位 × 模型」token 桶聚合(O(1)),不存逐请求明细;金额在读取时按当前表价计算,调价无需重放。wire.view 按 state 引用记忆化,保证注册表的 Object.is 比较能抑制重复发布。
  • 降级:costLedger 未就绪(刚安装、或本会话早于插件加载)时回退为「聚合用量 × 当前档位」的粗略近似,并在金额后加 ≈ 标注。该标注只表示走了近似分支,不代表逐请求精确值。
  • 时间归属约定:峰谷按请求发出时刻判定;官方未明示按发出还是完成,属本插件约定。
  • 金额为表价推算:仅依据 token 用量与官方表价计算,不是账单凭证;官方调价后未更新表价即会有偏差。
  • 界面接入方式:官方「Token 用量」弹层没有开放扩展 Slot,插件以 React portal 把费用区段挂到 [data-session-stats-usage] 之后的弹层节点上。该锚点缺失(官方结构调整)时自动并回统计行显示为同一行的一格——只降级显示位置,不报错、不影响官方界面。
  • 不占用官方 Slot:插件只注册自有 id conversation-cost,官方 stats 格及其详情弹层始终由官方组件渲染。
  • 升级:重新执行 dsh plugin --profile web add github:Ayaka157/dsh-conversation-cost 覆盖安装,然后重启 DSH Web 生效。

开发

npm test        # node --test test/*.test.mjs
  • test/ledger.test.mjs:投影折叠、模型族解析、峰谷档位边界、双币金额、checkpoint 往返。
  • test/client.test.mjs:以最小 React/DOM 仿真驱动 lib/client.js,验证 slot 注册、locale 字典、弹层锚定与降级路径。

lib/index.js 的单价表与档位判定必须与 lib/client.js 的同名副本保持一致(客户端降级近似用)。

许可

MIT License