dsh-billing-statistics: Usage of DSH Local Billing Ledger

前言

接了模型 API 以后,账单是最容易失控的一环:一次任务可能跨平台、跨模型,事后想回答「这个月 DeepSeek 花了多少、其中峰时占多少」往往只能靠翻后台。控制台看的是账号维度,看不到按平台/模型/时间的问题拆解;自己写脚本又容易漏掉峰谷价、缓存命中 token 和汇率折算这些细节。

dsh-billing-statistics 处理的是另一件事:把经过 DSH llm/stream 的调用原地记下来,按平台、模型、小时汇出 token 与估算花费,并支持官方账单逐项对齐。下面介绍它的定位、安装、配置和典型用法。

这是什么

插件由 SuLiuCanYing 维护,仓库为 dsh-billing-statistics(GitHub,MIT 许可),目录页登记在 community 目录的 admin-security 分类下。定位是 DSH 的本地计费账本:只统计和展示,不接管模型请求,也不替你登录任何平台。当前版本 1.13.0,兼容 DSH Web UI >=0.2.1-rc.5 <0.3.0,要求 Node.js >=20。

它和直接看官网控制台的区别是粒度:后者给你账号总花费,前者给你每个平台、每个模型、每个小时的调用次数、token 和价格来源标记。

核心功能

调用与 token 统计。 按平台/模型汇总调用次数、失败与中止次数、输入/输出/缓存命中 token、花费。历史按小时桶保存(usage.json v2),当天明细可以下钻到小时。

峰谷与阶梯计价。 花费按峰谷时段与阶梯价计算,峰谷判断默认北京时间(UTC+8),可用 utcOffsetHours 调整。

6 位小数记账。 金额按 0.000001 元记账;面板默认显示 1~3 位(<100 元 3 位、≥100 元 2 位、≥1000 元 1 位),金额后的眼睛按钮可展开 6 位完整金额,再点隐藏。HTML 报表与 CSV 导出同样按 6 位。

价格来源自动检索与标记。 价格从 models.dev 按平台与模型匹配,美元价按 usdToCny 折成人民币;匹配不到时退回内置参考价,页面上会标明每个价格来自哪里。

DeepSeek 官方价识别。 provider 为 deepseek / deepseek-official / deepseek-account,或 baseURL 的 host 是 api.deepseek.com 时,自动启用官方峰谷价并内置一份价表。只对官方 API 生效,第三方平台上的 DeepSeek 模型不套用官方价。

人工导入与 CSV。 目录未收录或价格不对时,可在表格里给模型填人工单价(留空字段保持旧价),也能勾选峰时时段(如 09:00-12:00, 14:00-18:00,选每天/工作日/周末)填峰时价。也可以下载 CSV 模板用 Excel 填好导入。人工价持久化,目录刷新不会覆盖。

时间范围与裁剪。 今天/近 7 天/近 30 天,另有「全部」与按年份切换;选中某年列出该年 12 个月汇总表,趋势图同步按月/按年展示。按小时明细保留 30 天(可调),月度汇总长期保留,年份与「全部」视图不会随裁剪缩水。

记账口径。 数据目录 $DSH_HOME/llm-usage-insights/,usage.json 只含计数、token 与价格来源,不保存 prompt/回复内容。写盘用「临时文件 + 重命名」,启动时损坏会先备份再按空数据启动,连备份都失败则进入只读模式。页面路由仅允许同源/环回地址访问。

安装与启用

无构建。README 给出的安装方式是把目录放进工作区,靠本地 link 依赖加载:

# 1. 把本目录放到工作区
# 2. 在 profile 的 package.json 里登记为依赖(link: 形式即可)
# 3. 重启应用,在侧栏看到「计费统计」入口

依赖方面,@deepseek-ai/schemastery 是 peer 依赖(可选);PDF 导出依赖 pdfkit(已列在 package.json 的 dependencies,安装时自动装)。当前仅在 Windows 11 + DSH 0.2.1-rc.5 实机验证。

从 1.12.x 升级要注意:旧包名是 dsh-billing-insights(更早是 llm-usage-insights),需先在 Plugin Manager 卸载旧 bundle 再安装新包,避免两个 bundle 同时注册侧栏页面;数据目录与 API 前缀沿用旧名,账本不会丢。

配置:单价与时区

配置项按需覆盖即可,默认值满足多数场景:

配置项 默认 说明
retainDays 30 按天明细保留天数(1–3660)
showCost true 是否显示花费列与合计
priceSync true 每天刷新一次 models.dev 价格目录
usdToCny 7.1 美元价折人民币的汇率
peakHolidays [] 视为空闲时段的日期(YYYY-MM-DD,北京时间)
utcOffsetHours 8 峰谷判断与按天分桶的时区偏移(-12 ~ +14)
pricing {} 自定义价格表,键可为 provider / provider/model / *

价格匹配顺序为:自定义 pricing → 人工导入价格 → DeepSeek 官方自动价(仅官方 API)→ models.dev 目录 → 内置参考价。也就是说,写在配置里的 pricing 优先级最高;同名键整体覆盖 models.dev 价,全 0 视为未定价。

一个容易忽略的点:utcOffsetHours 改变的是峰谷划分与分桶时区,但不会重排已有分桶,旧数据仍按旧口径统计,改动后老数据和新数据的峰谷口径会不一致,介意的话要及早统一。

{
  "pricing": {
    "deepseek/deepseek-chat": { "input": 0.001, "output": 0.002 }
  }
}

典型用法

先让它记上一段时间,再进侧栏「计费统计」看汇总。核对花费是否正确,推荐两步:

1、在页面按平台/模型分层展开,看调用次数、token 与花费是否符合预期;小时明细可下钻到具体小时桶,定位是哪一批请求把费用顶上去的。

2、打开页脚「官方账单对齐」,按平台/日期抄入官方后台的金额、调用次数(可选)与 token(可选),插件会与本地当天记录逐项对比并显示差额。官方不提供调用次数时留空即可。

第二点需要明确边界:插件不抓取账单、不保存账号凭据、不代替你登录,只是把官方数字和本地观测放在一起,结算仍以官方账单为准。对齐的目的是发现漏记或口径不一致,不是替代对账。

导出时选择格式、统计范围、是否包含时间明细即可。自包含 HTML 报表是主入口,PDF 依赖本机中文字体(Windows 默认用黑体,缺少字体时会直接报错,不会静默生成乱码报表),CSV 保留兼容入口。

适用场景与注意

适合这类人:模型调用已经跑在 DSH 上、想按平台/模型/时间复盘花费、并且需要把估算和官方账单对一下的人。如果你的调用是散在直连 API 或其他客户端里的,这个账本覆盖不到。

几点注意:

  • 统计范围有限。 只记录经过 DSH llm/stream 的调用;DSH 未运行、直连 API、其他客户端的请求不在账本里。
  • 金额是估算。 价格来源可能是 models.dev 目录价、内置参考价或人工价;目录价是参考价,不保证等于你所用平台的合同价,页面上会标出来,介意时以人工填价为准。
  • 不做预算拦截。 没有日/月预算、超额阻断、余额查询或自动充值,只统计和展示。
  • 多开注意。 usage.json 有 lock 做「逐字段取大」合并,同一小时的并发调用可能被少算,建议只开一个窗口。
  • 数据只在本机。 没有云同步或多机合并;卸载不会自动删除账本,需要清理时手动删目录。
  • 来源可信度。 该插件是社区项目,以当前 DSH 进程权限运行,价格、账单、文件读写都发生在本机。安装前建议先审一遍源码与 LICENSE,确认目录权限、数据目录位置和价格来源标记符合预期后再启用。

结语

这个插件的价值在「记账」而非「省费」:它不改变模型请求,也不会替你做预算决策,只是把已经发生的调用按平台/模型/小时摊开,让你能拿一个带价格来源标记的估算数去和官方账单逐项核对。对需要复盘多平台花费的人,这是目前 DSH 生态里少有的本地方案。

目录页:https://www.skillhub.cn/plugins/SuLiuCanYing/dsh-billing-statistics
GitHub:https://github.com/SuLiuCanYing/dsh-billing-statistics

羽毛球分组比赛记分
小程序二维码

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

Xiaoye