前言¶
在 DSH 里跑智能体对话,上下文和工具调用都会消耗 token。宿主通常能看 token 用量,但很难在同一屏里把「这一会话花了多少钱」「所有会话累计到多少」和「要不要在这一轮发请求前拦住」串起来。自己记 Excel 或事后对账单,和对话节奏是脱节的。
下面介绍的 yoka-dsh-billing(仓库 niliemi/dsh-billing,维护者 niliemi,SkillHub 分类 admin-security)是 DSH 计费类插件:用官方价目表给四类 token 计价,在聊天输入框下方、token 环左侧常驻显示本会话与全局费用,侧栏展示 DeepSeek 账号余额;达到你设的上限时,宿主在该轮开始前阻断 LLM 请求。
这是什么¶
一句话:在 DSH Desktop 里按 token 计费,双轨上限(全局 + 单会话),超额可阻断,并可重置「本次」计费起点而不丢历史 token 记录。
- npm 包名:
yoka-dsh-billing,当前版本 0.2.8(以package.json为准) - 运行环境:Node
>=20,DSH>=0.2.0-rc.1;README 记录与 DSH Desktop 0.2.0-rc.2 长期实跑为 compatible - 浏览器半边 profile:
web;账本与计价在宿主半边,浏览器通过同源/plugin-billing/…拉状态
界面上你会看到什么¶
聊天输入框下方常驻两条角标(示意):
● ¥0.0834 / ¥50.00 ↺ ● ¥12.3600 / ¥1000.00 ↺
本会话本次计费 / 上限 全局本次计费 / 你设的全局上限
- 左侧边栏底部(设置按钮旁):
余额 ¥…(充值 + 赠金,仅作参考,约每 60 秒刷新,面板可手动刷新) - 点角标打开面板;每条费用右侧 ↺ 可重置该口径的计费起点
- 圆点颜色:绿 <60%、橙 60–90%、红 ≥90%;全局上限未设时为灰点(不阻断)
点角标或侧栏余额进入面板后,可配置全局计费上限、汇率、超额阻断开关、每个会话各自的单会话上限,以及按模型覆盖单价或恢复官方价。
核心功能¶
计费口径¶
| 项目 | 说明 |
|---|---|
| 粒度 | 全局(所有会话累加)+ 单会话(同一份 token 按会话聚合) |
| token 来源 | 与官方 tokenUsage 投影同源的折叠逻辑 |
| 四类 token | 未缓存输入 / 输出 / 缓存读 / 缓存写,分别计价 |
| 单价 | 内置 @earendil-works/pi-ai 官方价目表(USD / 百万 token);仓库锁定 32 个 provider、605 个模型,面板可按模型覆盖 |
| 汇率 | 默认 1 USD = 7.2 CNY,面板可改 |
| 未知模型 | 估算价 [输入 1, 输出 4, 缓存读 0.1, 缓存写 0] USD / 百万 token |
金额永远现算:账本只存 token 与模型键;改汇率或单价会立刻重算全部历史用量。
上限、余额与阻断¶
- 全局上限:在面板「全局计费上限」填写;留空或 0 = 不设上限、不阻断。上限由你自设,不自动等于余额。
- 余额:来自宿主
deepseekAccount.getBalance(充值 + 赠金)。你设的全局上限超过余额时会被夹到余额(原值仍留在账本);余额取不到或为 0 时不夹取,自设上限照旧生效。 - 单会话上限:面板独立段「单会话上限」,每个会话各设各的,互不影响;留空 / 0 = 该会话不设上限;不受余额夹取。
- 越线且守卫开启时,宿主在
agent/pre-step返回{kind:"reject"},该轮不发 LLM 请求。阻断后可选择一次性放行、本会话放行、去充值、调高上限或暂不放行(「本会话放行」不绕过全局上限)。
本次、累计与两个 ↺¶
- 本次:自最近一次重置起算,用于和上限比较;累计为全部历史,只作参考,永不归零。
- 全局 ↺ 只把全局本次归零;某会话 ↺ 只把该会话本次归零;两者互不影响。面板底部「清空历史」才是硬重置(删全部 token 记录,不可恢复)。
数据与 HTTP¶
- 默认账本:
~/.dsh/billing/ledger.json(插件 config 的storeFile可覆盖) - 宿主路由前缀:
/plugin-billing(如GET /state、POST /config、POST /reset等);守卫仅接受同源 / 带dsh-auth-cookie / 回环地址请求
安装与启用¶
安装目标是让 desktop profile 解析到本包,并在 dsh.profile.bundles 登记。README 中已执行的等价命令如下(本地目录需换成你的路径):
# 在 DSH 会话内用 plugin_manager 工具,等价于:
dsh plugin --profile desktop add link:<dir>
# 示例 target: link:C:\Users\walex lin\Desktop\dsh workflow\插件\dsh-billing
成功后会在 ~/.dsh/profiles/desktop/package.json 的 dependencies 写入 "yoka-dsh-billing": "link:…",并把包名追加进 dsh.profile.bundles,随后热应用。
插件自带的 Cordis 补丁会插入服务并带上默认配置:
- insert:
- id: yoka-dsh-billing
name: 'yoka-dsh-billing'
config: { rate: 7.2, limit: 0, guard: true }
即默认汇率 7.2、全局上限 0(不设上限)、开启超额守卫。浏览器半边由 dsh-client-modules 以 combo URL 注入(形如 /plugins/??yoka-dsh-billing/client.js&rev=<rev>),无需单独构建。
典型用法¶
- 安装并热应用后,在输入框下确认双角标与侧栏余额是否出现;若无,可用 README 中的
node tests/probe-hmr.mjs核对运行中宿主是否已加载本地client.js(开发/自测场景)。 - 点角标打开面板:在「全局计费上限」填入本轮预算(人民币);需要时改汇率、确认「超额阻断」已开。
- 在「单会话上限」段为当前或历史会话各行填写上限;当前会话行会标「当前」。
- 对话过程中观察角标颜色与「本次 / 上限」;接近或超过上限时会被阻断,按提示放行或点对应 ↺ 重置计费起点。
- 若需通过 HTTP 改配置,可对同源
POST /plugin-billing/config写入{limit}、{sessionId, sessionLimitFor}、汇率与单价覆盖等(详见 README 接口表)。
适用场景与注意¶
适合谁:长期在 DSH Desktop 里多会话跑 agent、希望用官方价目表做等效费用参考、并靠自设上限在发请求前硬止损的开发者。
务必知晓:
- 插件以当前 DSH 进程权限运行:宿主半边读写仅本插件账本(默认
~/.dsh/billing/ledger.json),浏览器半边只对同源/plugin-billing发请求;安装前请自行查看 源码与 MIT 许可证。 - 订阅制账号并不按 token 单价扣费,界面金额是等效价值参考,不是 DeepSeek 账单。
- SkillHub 目录页:niliemi/dsh-billing 为社区插件索引,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,商店与宿主解耦。
结尾¶
yoka-dsh-billing 把 token 用量、官方价目表、双轨上限和阻断守卫收进 DSH 界面:输入框旁看本会话与全局花费,侧栏看余额,面板里设全局与各会话上限并重置「本次」起点。需要细节、截图与自测命令时,以 GitHub README 为准。
- 目录页:https://www.skillhub.cn/plugins/niliemi/dsh-billing
- 仓库:https://github.com/niliemi/dsh-billing