前言¶
在使用 DeepSeek Harness(DSH)进行多轮对话时,如果会话较长,很难直观判断当前已花费多少。平台后台通常只提供总量统计,无法查看每轮的计价明细,也不支持按时段(高峰/空闲)分别核算。
下面介绍的是 dsh-billing-capsule 插件:它在 DSH Web GUI 输入框底栏新增一个「账单」胶囊,实时显示当前会话按 DeepSeek 官方价目表折算的人民币花费;点开后可查看四类 token 分桶与逐轮明细,无需再去平台后台对账。
插件定位¶
- 名称:dsh-billing-capsule
- 维护者:CKLYZZQ(Ricardo)
- 分类:客户端
- 许可:MIT
- 仓库:https://github.com/CKLYZZQ/DSH-plugin-Billing-Capsule
它仅提供 UI 展示,不读写任何凭据,也不上传任何数据。
核心功能¶
1. 底栏胶囊¶
在 DSH Web GUI 的输入框底栏(conversation.composer.dock)原有「会话统计 / token 用量 / 上下文」三个项目旁,新增第 4 个项目「账单」。胶囊显示会话累计花费,保留两位小数;不足 1 分显示 <¥0.01;若整会话历史未全部加载,会在金额前加 ≈ 前缀,表示该值为估算量级。
如果价目表中没有当前模型,胶囊显示 --,绝不编造数字。
2. 逐轮明细弹层¶
点击胶囊可展开弹层,查看:
- 四类 token 分桶:未缓存输入、缓存读取、缓存写入、输出;每桶显示 token 数、该时段单价与小计;
- 计价模型、单价来源与数据时间;
- 高峰/空闲时段判定说明;
- 逐轮明细:轮次、token、计价模型、时段、该轮花费,最新一轮在最上面。
3. 计价规则¶
插件按 DeepSeek 官方价目表计价,单位为「元 / 百万 tokens」,分为「高峰」与「空闲」两档,空闲为高峰半价。
高峰时段为北京时间(Asia/Shanghai)周一至周五 9:00–12:00 与 14:00–18:00,其余时段及周末按空闲计价。缓存写入未在官方表中列出,该桶按 0 计价。
中国法定节假日未内置;如需精确,可在 cordis.patch.yml 的 holidays 列表中添加日期(YYYY-MM-DD),这些日期会按空闲计价。
4. 精度与估算¶
插件根据会话状态返回「精确」或「估算」:
- 已加载轮次带唯一模型路由,且其 token 合计等于整会话投影:精确,逐轮分别计价。
- 会话历史未全部加载(分页/压缩)或轮次缺少路由:显示
≈,按整会话总量与最近使用的模型估算,不会因分页而少算总额。 - 切到非对话视图导致取不到逐轮数据:只按整会话总量估算。
- 模型不在价目表内:该轮/该会话不计金额,弹层提示「单价未知」并列出 token。
会话总量始终取自 Harness 的整会话 tokenUsage 投影,逐轮数据只用于分摊。
安装与启用¶
插件支持从 npm 或源码安装。
从 npm 安装(推荐)¶
Web 端:
dsh plugin --profile web add dsh-billing-capsule
Desktop 端:
dsh plugin --profile desktop add dsh-billing-capsule
从源码安装¶
dsh plugin --profile web add github:CKLYZZQ/DSH-plugin-Billing-Capsule
在界面里安装¶
在 DSH 的 Plugins 页面点击「安装」,输入包名 dsh-billing-capsule,或让 agent 用 plugin_manager 的 install_bundle,将 target 设为包名、仓库地址或 tarball 绝对路径。
安装后刷新页面,胶囊会出现在底栏「会话统计 / token 用量 / 上下文」右侧。
卸载:在 Plugins 页取消选择,或用 plugin_manager 的 remove_bundle。
典型用法¶
- 安装插件后,打开任意 DSH 会话。
- 在输入框底栏右侧,会看到「账单」胶囊,显示当前会话花费。
- 点击胶囊展开弹层,查看四类 token 分桶、计价模型、高峰/空闲判定与逐轮明细。
配置项(cordis.patch.yml 的 config)¶
| 键 | 默认值 | 含义 |
|---|---|---|
priceSourceUrl |
官方中文价格页 | Host 半抓取并解析的地址 |
refreshHours |
12 |
重新抓取官方价格页的间隔;0 表示不定时抓取 |
requestTimeoutMs |
8000 |
单次抓取超时时间 |
loopbackOnly |
true |
只回应回环来源的 prices.json 请求 |
holidays |
[] |
按空闲计价的日期(YYYY-MM-DD,北京时间) |
models |
{} |
手动单价覆盖,优先级最高 |
手动覆盖示例:
models:
deepseek-chat:
cacheHitInput: { peak: 0.2, idle: 0.2 }
cacheMissInput: { peak: 2, idle: 2 }
output: { peak: 3, idle: 3 }
价格来源¶
插件的价格数据来自三个层级:
- 客户端内置基线:来自官方价格页,当前为 2026-10-11 抓取。
- Host 半自动抓取:插件激活时以及每
refreshHours小时,Host 半抓取官方价格页并解析,经同源路由GET /dsh-billing/prices.json提供给客户端;客户端每 6 小时拉取一次,拿到就覆盖基线。 cordis.patch.yml中的手动覆盖:优先级最高。
抓取或解析失败不会影响使用;弹层会显示当前用的是哪一来源。官方改版导致解析失败时,需要按「更新价格」章节处理。
权限与外部服务¶
- 唯一的对外网络请求:Host 半抓取
https://api-docs.deepseek.com/zh-cn/quick_start/pricing/(官方价格页),默认每 12 小时一次,可用refreshHours调整或关闭。 - 提供的本地接口:
GET /dsh-billing/prices.json(价格表)与POST /dsh-billing/refresh(立即重抓),注册在 Harness 自身的 Web 服务上,默认只回应127.0.0.1/::1,只读价格数据,不返回会话内容。 - 不读取凭据:不访问 API key、账号 token、cookie 或任何凭据存储。
- 无遥测、不上传:没有任何回传代码;会话数据只在本机浏览器内读取与计算。
- 客户端只读:只读 Harness 已有的
tokenUsage、modelSelection投影与当前对话的逐轮用量,不写入任何会话事件。
依赖与兼容¶
- 零
dependencies、零peerDependencies、零 install script:不 import 任何@deepseek-ai/*,不会触发 peer 版本拒绝或产生待批准的构建脚本。 dsh.client.inject只声明激活顺序:目标 profile 需组合ui-conversation(座位与底栏)与ui-chat(逐轮数据)。缺ui-chat时降级为整会话总量估算;缺dsh-token-meter时不显示(拿不到会话总量)。- Host 半的
webServer是可选依赖;没有它时只用内置基线。 - 已在 DSH
0.2.0-rc.2与0.2.1-rc.2/ profiledesktop上验证。
更新价格¶
官方改价后:
- 等自动刷新:Host 半会在
refreshHours内重新抓取;也可用POST /dsh-billing/refresh立即触发。 - 更新内置基线(仅官网改版导致解析失败时需要):改
client.js的BASELINE,并运行node tests/fetch-fixture.cjs刷新tests/fixture-pricing.html,按新页面改tests/pricing.test.js里的期望值。 - 改别名:官方改了模型名时,在
client.js的ALIASES里加旧名到新名的映射,或在config.models里直接给该 id 定价。
适用场景与注意¶
适合需要实时掌握会话花费量级、希望按模型与时段分别核算 token 用量的 DSH 用户。
安装前建议检查源码与许可证。插件以当前 DSH 进程权限运行,所有计算均在本地完成,不涉及外部服务或数据上传。
总结¶
dsh-billing-capsule 是一个轻量级、零依赖的客户端插件,在 DSH 底栏提供实时会话花费监控与逐轮明细。它基于官方价目表计价,支持高峰/空闲双档,通过胶囊与弹层两种视图呈现,帮助你在开发与调试时更直观地评估成本。
插件目录页:https://www.skillhub.cn/plugins/CKLYZZQ/DSH-plugin-Billing-Capsule
GitHub 仓库:https://github.com/CKLYZZQ/DSH-plugin-Billing-Capsule