前言¶
在 DeepSeek Harness(DSH)里跑长对话或工具链时,每一轮都会产生 token 与费用。DSH 会把 usage 写进会话日志,但落盘通常有 1–5 分钟延迟,单靠日志很难在「这一轮还在输出」时看到钱涨到了哪。若只等结算后再看账单,对控制单次轮次成本、对比峰谷时段并不方便。
下面介绍社区插件 dsh-billing-chip(维护者 EuphonXD,GitHub:EuphonXD/dsh-billing-chip)。它在 DSH Web 界面右下角挂一块纯文字计费牌:当前模型、本轮花费、今日累计、账户余额、峰/谷状态;特色是订阅模型输出流,按字符折算 token 做本轮实时估算,结算后再并排「实际 · 预估」。
这是什么¶
dsh-billing-chip 是 DSH 的客户端类插件(npm 包名 dsh-billing-chip,当前资料中的版本为 0.2.0,MIT 许可证)。没有头像和动画,只显示数字;窄条布局,尽量不挡操作区。
插件读两类数据并合并展示:
| 数据源 | 内容 | 延迟 |
|---|---|---|
会话日志 $DSH_HOME/sessions/<workspace>/<session-id>/session.v4.jsonl.zstd |
已结算 usage、模型、turn 边界、今日汇总 | 1–5 分钟 |
进程内 assistant 流(sessionController.follow + assistantStream) |
思考/正文增量,用于实时估钱 | 即时 |
若未安装对应 cordis 服务,流式订阅会退回只读日志,实时预估能力会减弱。
实时估算怎么工作¶
算法与桌宠计费板同源(仓库内 bridge.mjs 的 estAdd / estEmit 思路):
- 跟随当前活跃会话的 assistant 流,收集
reasoning-delta/text-delta每一段文字(思考内容也计入)。 - 字符折算输出 token:汉字 0.6 token/字,其他字符 0.3 token/字。
- 输出侧取
max(本轮已结算 output, 字符估算);真实 usage 到了以真实值为准。 - 输入侧用本轮已结算的
cacheRead+uncachedInput;尚未结算时,退回上一次请求的量级(每步重发全量上下文,量级接近)。 - 按 DeepSeek 官方价(峰/谷)算金额,每来一段增量就重算。
README 中给出的实测(deepseek-flash,约 600 字散文):流式期间约 ¥0.0126,结算后实际 ¥0.0126,误差 0%。多 step 轮次(中间调工具)在同一 turn 内累加字符,不会因工具调用打断。
峰/谷规则(北京时间):工作日 09:00–12:00、14:00–18:00 为高峰(价格翻倍);周末与法定节假日全天按谷时价。节假日表在 src/index.js 顶部,每年需维护。
牌子上显示什么¶
典型一行布局如下:
deepseek-flash 峰
本轮 ¥0.0421
今日 ¥2.57 余额 ¥118.00
- 本轮:进行中为粉色
≈ ¥(流式预估);turn/end后换成本轮实际花费;预估与实际差 ≥3% 时显示¥实际 · ≈¥预估,接近则只显示实际;刚结算时金色闪 2.4 秒。 - 今日:当天所有会话的花费与 token(跨 workspace、跨 session;子代理会话 usage 也在日志里,会算进今日)。
- 余额:调用
GET https://api.deepseek.com/user/balance,显示 CNY 可用余额。每轮结束、缓存超过 60 秒、保存 Key 或右键「刷新余额」时会拉取;失败不覆盖上一次成功值。
交互:拖动(位置存 localStorage 并同步后端)、双击折叠、右键菜单(刷新余额、输入 API Key、折叠/展开、重置位置、隐藏)。未填 Key 时单击牌子也会弹出 Key 输入框。
安装与启用¶
插件以当前 dsh web 所在 profile 的 Node 进程权限运行;实时流是进程内数据,必须装在会话所在的那台 dsh 实例的 profile 里。安装前建议自行查看源码与 LICENSE。需要 Node ≥ 22.13(使用 zlib.zstdDecompressSync)。资料说明目前在 DeepSeek Harness 0.2 的 Web profile 上验证过。
从 npm 安装¶
dsh plugin --profile web add dsh-billing-chip
跟踪 GitHub 最新提交¶
dsh plugin --profile web add github:EuphonXD/dsh-billing-chip
两种装法都会把包放进 profile 的 node_modules,但仍需手动把 dsh-billing-chip 加入 profile 的 dsh.profile.bundles,然后 pnpm install(如需要)并重启 dsh web。dsh plugin add 不会自动改 bundles。
推荐 profile 片段示例:
{
"dependencies": {
"dsh-billing-chip": "..."
},
"dsh": {
"profile": {
"bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-billing-chip"]
}
}
}
插件自带 cordis.patch.yml,作为 bundle 加载时会自动 insert。若不想改 bundles,可在 profile 的 cordis.patch.yml 中 insert id: dsh-billing-chip。
本地 link 开发时:
dsh plugin --profile web add link:/path/to/dsh-billing-chip
同样要手动写入 bundles 并重启。
验证¶
重启后可用同源请求检查状态($DSH_URL 为你的 DSH Web 地址):
curl -s "$DSH_URL/api/dsh-billing-chip/state" -H "Origin: $DSH_URL"
仓库还提供 scripts/find-dsh.mjs 与 scripts/enable-in-profile.mjs(见 README 与 SETUP-AI.md),供定位 DSH 与写入 profile 时使用。
配置与 API Key¶
在 cordis.yml 或 profile patch 中可选配置:
- id: dsh-billing-chip
name: 'dsh-billing-chip'
config:
apiKey: ''
defaultModel: deepseek-flash
settingsPath: ''
allowRemote: false
priceOverrides:
deepseek-flash:
hit: [0.02, 0.04]
miss: [1, 2]
out: [4, 8]
API Key 优先级(高到低):右键保存到 $DSH_HOME/dsh-billing-chip/settings.json(权限 0600)→ config 里的 apiKey → 环境变量 DEEPSEEK_API_KEY。接口只回显掩码,不返回明文。
同源 HTTP 路由(供 Web client):GET /api/dsh-billing-chip/state、POST /api/dsh-billing-chip/key、POST /api/dsh-billing-chip/refresh、POST /api/dsh-billing-chip/ui。默认 allowRemote: false,仅本机或 Origin 与 Host 一致的浏览器请求可通过。
适用场景与限制¶
适合:在 DSH Web 里长时间对话、需要一眼看到本轮是否在涨钱、今日累计与 DeepSeek 账户余额,并在结算后对比估准不准的开发者。
注意:
- 只认 DeepSeek 官方价;其他 provider 时 token 数仍来自日志/流,金额需自行配
priceOverrides。 - 结果是估算,非官方账单;缓存判定与四舍五入可能有细微差别。
- 实时估算对长英文/代码块可能比中文偏差略大(0.3 系数对英文单词偏高),极端长单轮可能有百分级偏差。
- 插件只读会话日志,除带 Key 的余额查询外无额外外联与埋点;DSH 登录与端口暴露取决于你的部署方式。
DSH 生态强调「一切皆插件」;社区目录 skillhub.cn 上的 dsh-billing-chip 页 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-billing-chip 把「等日志落盘才知道本轮花了多少」变成「输出流上边写边看 ≈¥」,并在 turn 结束后用实际 usage 校正。若你在 Web profile 里日常用 DSH,可按上文命令安装、写入 bundles 并重启,再用右键或 config 配好 Key 即可在右下角看到计费牌。
- 目录页:https://www.skillhub.cn/plugins/EuphonXD/dsh-billing-chip
- 源码与完整说明:https://github.com/EuphonXD/dsh-billing-chip