用 DeepSeek-Harness-billing-plugin 在会话头部查看余额和剩余任务

前言

DeepSeek API 从 2026 年 8 月 17 日起按北京时间峰谷计价:高峰是每天 9:00–12:00、14:00–18:00,其余为空闲时段,空闲价是高峰价的一半。智能体在 DeepSeek Harness 里连续跑任务时,账户还剩多少钱、按当前模型大概还能开几次会话,往往要自己去控制台查余额,再对照官方价目和历史用量心算。

DeepSeek Harness(dsh)的架构口号是「一切皆插件」。社区目录里有一款会话与消息插件,把官方 GET /user/balance 的真实余额,以及按模型折算的剩余任务估算,直接挂到 Web 会话头部。本文按插件目录页、GitHub 仓库 README / 源码,以及 DeepSeek 官方余额接口与价目页核对后整理:它做什么、怎么装、估算怎么算、边界在哪。

这是什么

DeepSeek-Harness-billing-plugin 是 WilliamLIiii 维护的开源插件,许可证 MIT,主要语言 TypeScript。GitHub 仓库主题带 dsh-plugin。目录页把它归在「会话与消息」,当前星标 9。根目录 package.json 里的工作区版本是 0.1.0-rc.5

它解决的问题很具体:在 DeepSeek Harness 的 Web 会话头部显示账户余额,并按当前模型估算大概还能跑多少个任务。余额来自 DeepSeek 官方接口 GET /user/balance 的真实数字;「还能跑多少任务」是估算,不是计费承诺。这一点目录页和仓库 README 写的是同一句话。

仓库是 pnpm workspace,拆成两个包:

npm 名 运行位置 作用
packages/llm-billing @deepseek-ai/dsh-llm-billing 主机端 拉余额、跨会话按模型折叠 token、峰谷计价表;对外暴露 billing Remote(getBalancegetEstimate
packages/ui-billing @deepseek-ai/dsh-client-ui-billing 浏览器端 挂载 billing Remote,向会话头部工具区贡献徽标

包名带 @deepseek-ai 前缀,仓库维护者是 WilliamLIiii。DeepSeek Harness 官方仓库在 deepseek-ai/deepseek-harness;插件目录站点是社区收录页,与 DeepSeek / 幻方没有官方从属关系,不要把它当成官方应用商店。

核心功能

会话头部徽标

浏览器包向 conversation.session.header.utilities 贡献一个条目,在右上角渲染标签框。触发器两行:

  • 剩余额度:剩余额度:¥X
  • 按当前模型预计还能跑多少任务

点击后展开详情:剩余金额、手动刷新按钮,以及每个模型一行的剩余任务。没有消耗记录的模型显示「暂无消耗记录」,不会编造数字;按历史消耗折算不足 1 个任务时,文案是「按消耗能跑不足 1 个任务,该充钱了」。

仓库 README 和 UI 文案还约定了这些行为:

  • 首个请求在途时不渲染任何东西。
  • 刷新失败时保留上一次有效值,旧数字不会先消失。
  • 未配置 API key、凭据被拒绝或传输出错时,显示弱化的「额度不可用」,提示里带 Remote 返回的错误信息。
  • 徽标是账户级数字。插槽虽然挂在会话标题栏,显示值不随当前会话切换。
  • 只手动刷新。挂载时拉一次,之后要点「刷新」;长会话过程中不会自动跟随余额变化。

分模型剩余任务估算

主机包把「余额 + 每个已配置模型的一条估算」做成 getEstimate()。算法在 README 和 packages/llm-billing/src/billing.ts 里写得很清楚:

  1. 1 个任务 = 1 次会话。 在线会话和已持久化会话按会话 id 去重后各折叠一次,避免同一会话被算两遍。
  2. 每个模型累计三个计费 token 桶:缓存命中输入未命中输入(未缓存输入 + 缓存写入)、输出(含推理)。源码从 assistant/message 事件的 usage 里取 cacheReadTokensinputTokens + cacheWriteTokensoutputTokens
  3. 用该模型的历史平均每会话消耗,乘当前峰/谷时段单价,得到平均每任务费用。
  4. 还能跑多少 = floor(人民币余额 ÷ 平均每任务费用)

没有历史用量、没有费率行、或余额不是人民币时,该模型不给出估算。一个会话里切换过多个模型时,会分别计入它实际调用过的每个模型;平均是「每次调用会话」,不是「每次声明任务」。

默认展示行是 deepseek-v4-flash(DeepSeek-V4-Flash)和 deepseek-v4-pro(DeepSeek-V4-Pro)。只读投影,不改 prompt、消息、schema、流或工具结果。

峰谷费率表

源码常量 DEFAULT_MODEL_PRICING 写明按 2026-08-17 实行的官方 V4 费率,单位是元 / 百万 token。和 DeepSeek 模型与价格 对得上:

模型 时段 缓存命中输入 缓存未命中输入 输出
deepseek-v4-flash 高峰 0.10 3.0 9.0
deepseek-v4-flash 空闲 0.05 1.5 4.5
deepseek-v4-pro 高峰 0.30 9.0 27.0
deepseek-v4-pro 空闲 0.15 4.5 13.5

高峰窗口默认是北京时间 09:00–12:00、14:00–18:00,其余为低谷。源码用 Asia/Shanghai 对应的 UTC+8 小时判断,不考虑夏令时。

余额传输走 {baseURL}/user/balance,默认 baseURL 是环境变量 $DEEPSEEK_BASE_URL,再退回 https://api.deepseek.com。请求头是 Authorization: Bearer <API key>。这和 DeepSeek 查询余额 一致:响应含 is_availablebalance_infoscurrencyCNYUSD,以及 total_balance / granted_balance / topped_up_balance)。估算只读人民币余额行;纯美元账户可以显示余额,但不换算任务数。

安装与启用

目录页给出的安装命令如下,在 DeepSeek Harness 终端运行:

dsh plugin add github:WilliamLIiii/DeepSeek-Harness-billing-plugin

需要可复现安装时,按目录页说明固定 commit 哈希:

dsh plugin add github:WilliamLIiii/DeepSeek-Harness-billing-plugin#<commit>

<commit> 换成仓库里实际的提交哈希。插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前检查源代码仓库和许可证。

GitHub README 写的是另一条更细的路径:先把两个包装进 web profile。仓库原文是:

dsh plugin --profile web add @deepseek-ai/dsh-llm-billing @deepseek-ai/dsh-client-ui-billing

README 同时说明:这两个包在本仓库 packages/ 里,需要先发布到 npm(@deepseek-ai 或自己的 scope),dsh plugin add 才能从 registry 解析。也就是说,目录页的 GitHub 安装命令是收录页对外写法;仓库自己把可运行形态定义成两个 Cordis 插件。DeepSeek Harness 官方文档也写过:从 GitHub 安装拿到的是源码而不是构建产物,TypeScript 包通常要允许 prepare 构建,并在 profile 的 pnpm-workspace.yaml 里为包名打开 allowBuilds。以你实际用的安装路径为准,不要混用未发布的 npm 名和未构建的 git 源码。

接进组合时,README 要求编辑 ~/.dsh/profiles/web/cordis.patch.yml

- insert:
    - id: llm-billing
      name: '@deepseek-ai/dsh-llm-billing'
    - id: ui-billing
      name: '@deepseek-ai/dsh-client-ui-billing'

然后配置 DeepSeek API key,二选一:在网页「模型」页填入(会把 DEEPSEEK_API_KEY 写入 ~/.dsh/.credentials.yaml),或导出环境变量:

export DEEPSEEK_API_KEY=sk-...

最后重启 Web UI:

dsh web

浏览器包子包声明 platform: web,这套界面挂在 Web 会话头部,不是终端 TUI。

典型用法

装好并配上自己的 DeepSeek API key 之后,打开 Web 会话即可看到头部徽标。不需要向模型下指令,插件不注册面向模型的工具。

可选配置都有默认值。主机端字段如下(摘自仓库 README):

字段 默认 含义
apiKeyEnv DEEPSEEK_API_KEY 每次调用时解析的凭据引用(环境变量)名
baseURL $DEEPSEEK_BASE_URL,其次 https://api.deepseek.com 端点基础地址,会追加 /user/balance
models V4 Flash + V4 Pro 展示用的模型行,按展示顺序
billing.peakHours 09:00–12:00、14:00–18:00(北京) 高峰时段窗口
billing.models 官方 V4 费率 每个模型的峰/谷单价行

只覆盖某个模型、又不想丢掉其余默认行时,提供一个非空的 billing.models 列表;空或省略则回退到源码里的官方默认费率。

主机端最小配置示例(子包 README):

- id: llm-billing
  name: '@deepseek-ai/dsh-llm-billing'
  config:
    # apiKeyEnv: DEEPSEEK_API_KEY   # default
    # baseURL: https://api.deepseek.com

点开徽标后的操作就是看余额、看分模型估算、点「刷新」。UI 自带的说明文案也写了口径:只预估 DeepSeek 相关模型;1 个任务 = 1 次会话;按全部历史会话平均每模型的 token 消耗,再按当前峰谷单价折算。

适用场景与注意事项

比较适合这些情况:

  • 日常用 DeepSeek 官方 API 跑 DeepSeek Harness Web UI,希望抬头就能看到人民币余额。
  • 8 月 17 日峰谷价生效后,想按当前时段粗估「V4 Flash / V4 Pro 大概还能开几次会话」。
  • 需要分模型看历史消耗是否已经足够支撑估算,而不是只看一个总数。

使用前要注意仓库写明的限制:

  • 估算不是账单。 实际扣费以 DeepSeek 服务商为准;产品价格也可能再变,官方价目页是权威来源。
  • 仅人民币估算。 非人民币余额不换算任务数;多币种换算在仓库里标为暂缓。
  • 按需全量折叠。 每次估算都会重新折叠可达会话的用量,成本随会话数量和日志体积增长,不是增量账本。
  • 点快照。 不会在长会话里自动刷新。
  • 要有自己的 API key。 余额从 DeepSeek API 读取,每个用户用自己的 key。key 只应交给你信任的插件,去请求你配置的 baseURL

插件以当前 dsh 进程权限运行。安装前阅读仓库源码和 MIT 许可证;需要可复现环境时固定 commit,避免后续推送静默改变安装内容。

小结

DeepSeek-Harness-billing-plugin 把官方余额接口和按会话平均用量的剩余任务估算,做成 Web 会话头部的一枚徽章。余额是真的,任务数是估算,费率对齐 8 月 17 日的 V4 峰谷价。目录页与 GitHub 如下:

  • 目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/deepseek-harness-billing-plugin/
  • GitHub:https://github.com/WilliamLIiii/DeepSeek-Harness-billing-plugin
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜