前言¶
DeepSeek Harness(简称 dsh)把智能体运行时拆成「一切皆插件」:会话、工具、界面都可以按需挂载。很多人日常用的是它的 Web 界面 dsh web——一边跑任务,一边看模型吐 token。2026 年 8 月 17 日起,DeepSeek 官方 API 对 V4 系列改成了峰谷定价:北京时间 9:00–12:00、14:00–18:00 是高峰,其余为空闲,空闲价是高峰价的一半。同一条对话,上午写代码和夜里跑批处理,单价可以差一倍。
dsh 自带的统计行会报 token 用量,但不会按官方政策把费用算出来,也不会把账号余额、本会话花费、本地模型「省了多少」放在同一处。社区插件 dsh-web-billing 做的就是这件事:按官方政策时间表自动计价,逐条消息记账,并在浏览器里实时显示。
需要先说明两点。第一,DeepSeek Harness 官方仓库在 deepseek-ai/deepseek-harness;插件目录站点 deepseek-harness-plugin.com 是社区收录,和 DeepSeek / 幻方没有官方从属关系,不要把它当成官方应用商店。第二,插件给出的费用是按官方单价和会话 usage 估算的本地账本,扣费仍以 DeepSeek 平台账单为准。
这是什么¶
dsh-web-billing 是一款面向 dsh web 的会话与消息插件,由 bpc-oss 维护,MIT 许可证,主要语言是 JavaScript。目录页把它归在「会话与消息」分类;仓库 package.json 当前版本号是 2.1.0,写作时 GitHub 星标为 9。
它解决的问题很具体:在 Web 界面里把「这条回复花了多少钱、这个会话累计多少、账号还剩多少」显示出来,并且计价规则跟官方政策走——包括 2026-08-17 起的峰谷时段,而不是写死一张价格表然后忘了改。
Host 端订阅 session/event,对每条带 usage 的 assistant/message 按消息完成时刻取价,账本写到 $DSH_HOME/storages/web-billing.json。浏览器端在每条助手消息动作条和会话头部放费用角标;更完整的汇总在「设置 → 费用」。中文界面默认显示人民币 ¥,英文界面显示美元 $,也可以用配置强制指定。
核心功能¶
按官方政策自动计价¶
定价引擎在 lib/pricing.js,内置政策时间表 OFFICIAL_PRICING_POLICIES。README 里列出的人民币单价(单位:元 / 百万 tokens,缓存命中 / 缓存未命中 / 输出)如下。
固定价阶段:
| 生效时刻(北京) | 政策 | 单价 |
|---|---|---|
| 2025-02-09 | deepseek-chat / deepseek-reasoner 标准价 | 0.5/2/8 · 1/4/16 |
| 2026-05-22 | V4 系列 75% 降价转永久 | v4-flash 0.02/1/2 · v4-pro 0.025/3/6 |
2026-08-17 起的峰谷价:
| 模型 | 空闲 | 高峰 |
|---|---|---|
| deepseek-v4-flash | 0.05 / 1.5 / 4.5 | 0.10 / 3.0 / 9.0 |
| deepseek-v4-pro | 0.15 / 4.5 / 13.5 | 0.30 / 9.0 / 27.0 |
这张表和写作时打开的 DeepSeek 官方价格页 一致:高峰为北京时间 9:00–12:00、14:00–18:00,空闲为高峰的一半。插件默认时区 Asia/Shanghai,高峰窗口 [[9,12],[14,18]](左闭右开)。
计价语义按仓库说明是这样的:
- 按消息时刻取价。每条消息用它完成那一刻生效的政策和峰谷时段,新政策生效后不用改配置。
- 政策链继承。新政策没点名的模型沿用最近一次被点名的价格,历史账单才和平台对得上。
- 改价自愈。政策表或配置变了,重启时按当前规则重估存量记录,token 数还在账本里,不会丢。
- 用户覆盖。
prices里精确到模型的条目会覆盖官方价;*只填补官方从未点名的模型。officialPricing: off则完全走用户价格表。 - 可追加政策。官方以后再调价,可以在配置里用
policyOverrides追加,不必改代码。
人民币和美元是两套官方单价,不是简单汇率换算。政策时间表策展自官方公告,插件 README 也写了:发现偏差以官方页面为准,欢迎提 PR。
逐条记账和界面展示¶
记账发生在 host 端:以 (sessionId, messageId) 为主键,重复或重放事件只覆盖明细,不重复累计。落盘是 1 秒防抖加临时文件原子替换;加载失败会从空账本开始并告警。每条明细会记下当时用的单价 unitPrice 和计价模式 mode(flat / peak / offPeak)。
浏览器端能看到两层:
- 每条 assistant 消息动作条上的费用角标,悬停可以看到 token 拆分和模型。
- 会话头部角标,悬停浮层只针对本会话:本会话今日与累计的花费/节省、按模型的金额和 Input / 缓存命中率 / Output;用 DeepSeek 系列模型时还会标当前是高峰还是空闲。
今日、本月、累计、账户余额、按模型、按会话、按天历史,集中在「设置 → 费用」。时间段可以选今日 / 本周 / 本月 / 近 30 天 / 全部 / 自定义日期。费用页还支持月度预算进度条、CSV / JSON 导出(CSV 带 UTF-8 BOM)。需要注意:范围明细基于最近流水窗口,默认 maxRecent 为 20000 条,更早的数据只保留日维度聚合。
账号余额¶
Host 端复用 provider 的 API key,调用官方只读接口 GET /user/balance(默认地址 https://api.deepseek.com/user/balance;若设置了 DEEPSEEK_BASE_URL,会以其为前缀)。默认 60 秒刷新、5 秒超时,失败静默降级。Key 只在服务端解析,不会下发到浏览器。余额查询可以在费用页运行时开关,不必重启。
Coding plan 与本地模型¶
除了直连 DeepSeek API,dsh 里还可以挂各种 coding plan。插件内置 DSH 预设的官方美元价(取自 Harness 内置 pi-ai catalog,见 lib/coding-plans.js),按 (provider, model) 路由:
opencode-go/opencode/kimi-coding:按平台公布的 $/1M 计费。人民币展示价 = 美元官方价 ×codingUsdCnyRate(默认 7.2,仅展示换算,不影响 DeepSeek 自己的人民币官方价)。qwen-token-plan/xiaomi-token-plan/zai-coding:平台不公布逐 token 单价,调用按 0 元计。- 未双双命中的模型,仍走 DeepSeek 官方政策链(含峰谷)。同一个模型名在不同 provider 下不会串价。
本地(自托管)provider 可以写进 localProviders。这类调用按官方价算「名义价值」,实际成本按 localCostPerM(默认 0,相当于免费),差值记成「已节省」,角标会显示类似 省¥X。
费用页还可以给每个 provider 设收费形式(即时生效):usage 按量、usage-free 按量但免费模型清单按 0、subscription 月费调用按 0 并折算回本、free 活动免费、local 本地部署。切换后会立刻重估历史记录。
安装与启用¶
目录页给出的安装命令如下,在 DeepSeek Harness 终端里运行即可:
dsh plugin add github:bpc-oss/dsh-web-billing
这是一个标准 DSH 组合包(bundle),package.json 里 dsh.bundle.patch 指向包内 cordis.patch.yml,客户端声明 platform: web。仓库 README 建议显式指定 web profile:
dsh plugin --profile web add github:bpc-oss/dsh-web-billing
需要可复现安装时,按目录页说明固定 commit 哈希,例如写作时仓库 master 最新提交为 27f3750d23ee08af1b8aa7d9843d470d26eadf67:
dsh plugin add github:bpc-oss/dsh-web-billing#27f3750d23ee08af1b8aa7d9843d470d26eadf67
安装后重启 dsh web 才会生效。同一 $DSH_HOME 下只应跑一个实例,多个实例会争写同一份账本。仓库说明:本包是纯 JS,git 安装一般不必走构建;若 pnpm ≥10 提示构建授权,把提示的包键加入 profile 的 pnpm-workspace.yaml 的 allowBuilds 后再试。
插件以当前 dsh 进程的权限运行,安装时可能执行代码。装之前请自己看一遍源码仓库和许可证。
典型用法¶
默认配置就能用:官方价格表已经写在 lib/pricing.js 里。装好并重启后,正常对话即可。助手消息旁会出现费用角标,会话头部能看到本会话花费;打开「设置 → 费用」可以看余额、分模型明细和导出账单。
如果要覆盖默认配置,在 $DSH_HOME/profiles/web/cordis.patch.yml 按 id web-billing 覆写整行。覆盖会替换整份 config,需要把要用的键都写上。下面是仓库文档里的常用项(单价单位都是每百万 tokens):
| 键 | 默认 | 说明 |
|---|---|---|
displayCurrency |
auto |
auto 跟随界面语言;CNY / USD 强制指定 |
timezone |
Asia/Shanghai |
峰谷判定时区 |
peakWindows |
[[9,12],[14,18]] |
高峰时段,[start,end) |
officialPricing |
auto |
off 则只用用户 prices |
localProviders |
[] |
本地 provider 名单 |
localCostPerM |
0 |
本地实际单价(¥/1M) |
codingUsdCnyRate |
7.2 |
coding plan 美元价的参考人民币汇率 |
loopbackOnly |
true |
/billing 端点仅允许回环访问 |
balance.enabled |
true |
是否查询并展示余额 |
注意:给某个模型在 prices 里写死单价,会冻结该模型价格,连峰谷切换也会被盖掉,一般不需要这么做。官方以后调价,更稳妥的做法是往 policyOverrides 追加带 since 的政策条目。
查询端点默认只监听回环:GET /billing/state(支持 ?range=...)、GET /billing/session/。运行时设置用 POST /billing/metering、POST /billing/budget、POST /billing/balance,同样默认仅回环。需要从局域网看账单时才把 loopbackOnly 改成 false;改完后与 GUI 其它路由一样,插件本身没有再做一层鉴权。
适用场景与注意事项¶
比较适合这几类用法:
- 日常在
dsh web里用 DeepSeek 官方 API,想按 8 月 17 日之后的峰谷价看每条消息和每个会话的费用。 - 同一套 Harness 里混用 coding plan、本地模型和官方 API,希望按 provider 路由计价,而不是把 glm / kimi 错误套进 DeepSeek 峰谷表。
- 需要本月预算、导出 CSV/JSON、或者看账号余额,但不想自己去爬官方价格页。
使用时有几条边界需要记住:
- 费用是估算。token 数来自会话 usage,单价来自插件内置(或你覆盖)的政策表;折扣、赠金扣减顺序、税务等以 DeepSeek 平台为准。政策表若滞后,以 官方价格页 为准。
- 这是 Web 端插件,给
dsh web用,不是通用 CLI 账单工具。 - 余额接口走官方只读
GET /user/balance,失败会静默降级,界面上可能暂时看不到余额。 - coding plan 的人民币数字是参考汇率换算;美元金额才是平台官方真值。
/billing默认仅本机可访问;关掉回环限制等于把只读账单接口暴露到监听地址上,按自己的网络环境决定。- 插件只读
session/event,不改会话内容;但仍然以当前 dsh 进程权限运行,安装前检查源码和许可证,生产环境建议固定 commit。
小结¶
dsh-web-billing 把 DeepSeek 官方政策(含 2026-08-17 峰谷价)嵌进 dsh web:host 端按消息时刻记账,浏览器端用角标和「设置 → 费用」把花费、余额、节省和分模型明细摊开。默认配置就能跟上当前官方单价;coding plan 和本地模型走单独路由,避免串价。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-web-billing/
GitHub:https://github.com/bpc-oss/dsh-web-billing