dsh-usage-dashboard:在 DSH 设置里做本地用量统计

前言

DeepSeek Harness(DSH)在每轮对话里会给出 token 明细,但跨会话的汇总要自己想办法:有人用 cc-switch 这类桌面工具,靠解析日志文件猜格式,还要多装一层。若你只想在浏览器里看清最近一段时间花了多少 token、请求多少次、缓存命中如何,以及粗略的费用估算,并且数据不出本机,sixzjd/dsh-usage-dashboard 走另一条路——完全跑在 DSH 内部,挂载在设置页的「用量统计」分区。

这是什么

sixzjd/dsh-usage-dashboard(npm 包名 @sixzjd/dsh-usage-dashboard,当前资料版本 0.6.3)由维护者 sixzjd 发布,分类为客户端插件。它从本机会话日志聚合 token 消耗、请求数、缓存命中率与按天趋势,在设置 → 用量统计(英文界面下为 Usage Statistics)以原生设置分区展示;数据来自 sessionQuery 服务,不联网、不上传、不需要 API Key。许可证为 MIT。

和外部工具的差异

宿主已公开 ctx.sessionQuery:会话日志的解压、排序与中断轮次平衡由宿主负责,插件只消费结构化事件。因此没有自行解析 $DSH_HOME/sessions 下的文件、也没有因 DSH 升级改日志布局而统计失灵的问题(会话读取仍经 sessionQuery,插件明确不直接读 sessions 目录)。

删除的对话若只靠磁盘上仍存在的日志统计,历史 token 会随文件消失而变小。插件把每次扫描到的调用另存 storages/dsh_usage_dashboard_history.json:先载入历史、再折叠活日志,存在磁盘上的会话以日志为准,已删会话继续按存档计入。功能上线前就已删除的会话,会从宿主 session_projcache 一次性回填 tokenUsage 总量(总量准确,按天图上的位置近似,因回填只有会话级总量)。

指标口径

token 桶遵循宿主 @deepseek-ai/dsh-llm 的 DISJOINT 语义:inputTokens 只含未命中缓存的输入,缓存部分在 cacheReadTokens / cacheWriteTokens。

指标 计算方式
消耗 token 输入 + 输出 + 缓存写 + 缓存读
总请求数 携带 usage 的调用次数(按 session:turn:step 去重)
缓存命中率 缓存读 ÷ (输入 + 缓存写 + 缓存读)

一次调用只计一份用量:同一 turn:step 上 assistant/message 的最终 usage 会替换流式 assistant/chunk,不全零的重放事件也不会覆盖已记录数字。OpenAI 式协议若不上报 cacheWriteTokens,该项为 0,命中率分母仍一致,属于上游字段缺失而非统计漏洞。

面板里有什么

区域 内容
顶部三张卡 消耗 token、总请求数、缓存命中率;可展开构成明细
使用趋势 柱状图,可切 Tokens / 请求;默认按天,选「今天」或起止同一天时切按小时
筛选 供应商、模型、时间(今天 / 近 7 / 30 / 90 天 / 全部 / 自定义);打开默认近 30 天
请求明细 每次调用的时间、供应商、模型、token、费用
供应商 / 模型 分组聚合与占比
定价 可编辑价格表,按 USD / 百万 token 计四桶价格

趋势图 X 轴按日历日(或按小时视图的 24 时段)补齐,无数据为 0 而非跳过。「全部时间」起点为最早一条记录;无记录时退化为「今天」。标题下标注数据抓取时刻;改筛选或点「刷新」才更新,不自动轮询。HTTP 汇总接口为 GET /api/dsh-usage-dashboard/summary。

内置 DeepSeek 官方峰谷价(含中国法定节假日全天谷价),单位 USD / 百万 token;未在价格表中的模型显示「未计价」,不猜测单价。成本为估算值,不等于供应商账单。

安装与卸载

面向 Web 配置文件的安装命令如下(资料原文):

dsh plugin --profile web add @sixzjd/dsh-usage-dashboard

装好后可在 设置 → 插件 检查并更新版本。开发版:

dsh plugin --profile web add github:sixzjd/dsh-usage-dashboard

安装后刷新浏览器即可看到设置侧栏入口。卸载:

dsh plugin --profile web remove @sixzjd/dsh-usage-dashboard

package.json 中声明宿主兼容范围为 dsh >=0.2.0-rc.2 <0.3.0,engines.dsh 为 >=0.2.0-rc.2,Node 需 >=22。

典型用法

  1. 按上文命令安装并刷新页面。
  2. 打开 设置 → 用量统计,默认近 30 天;按需改供应商、模型或区间。
  3. 需要改费用假设时,在「定价」编辑四桶单价;保存走写接口,需进程令牌(由 GET /pricing 下发)。
  4. 核对别名解析是否生效时,可看 GET /api/dsh-usage-dashboard/summary 响应里的 catalog.aliasCount(0 表示未解析到任何路由别名)。

部分供应商用路由别名记模型(如 Qoder 的 qfmodel)。插件会读取 dsh-qoder-connect 的模型发现缓存($DSH_HOME/profiles/*/.dsh-qoder-connect/state/*-catalog.json)做显示名映射;分组、计数、筛选与计价仍按路由 id。该读取是另一插件的私有文件,失败即静默退回路由键,不影响统计。

适用场景与注意

适合在 DSH Web 端长期自用、希望本地看清用量与缓存行为、并做粗略美元估算的开发者。不适合把面板数字当作与云账单逐笔对齐的依据;Qoder 等按 credits 计费的路由,套用 token 单价只是「等价 API 价」。

插件以当前 DSH 进程权限运行:聚合会话 ID(UUID)、模型标识与用量数字,响应不含提示词、回复正文、会话标题或工作区路径。HTTP 路由限制回环地址,写价格表有额外令牌校验。安装前建议扫一眼 GitHub 仓库 源码与 MIT 许可证。社区目录 skillhub.cn 插件页 与 GitHub 无 DeepSeek / 幻方官方从属关系,属于「一切皆插件」生态里的第三方条目。

已知限制还包括:中断请求可能只有 chunk 用量;缺少 request/header / request/context 时模型显示 unknown;面板正文目前主要为中文,侧栏标签随浏览器语言。

结尾

dsh-usage-dashboard 把跨会话用量汇总收进设置页:用公开 sessionQuery 与本地历史存档,在不上传数据的前提下给出 token、请求、缓存与趋势,并支持可编辑价表。目录与源码:

  • 插件目录:https://www.skillhub.cn/plugins/sixzjd/dsh-usage-dashboard
  • GitHub:https://github.com/sixzjd/dsh-usage-dashboard
羽毛球分组比赛记分
小程序二维码

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

Xiaoye