dsh-token-lens:把 Harness 本地会话日志变成用量与费用看板

前言

Harness 默认只把会话写成本地日志,不会告诉你:这段时间烧了多少 Token、缓存命中率是多少、哪几个模型在吃预算、输出速度的 P50 掉到哪儿去了。想知道这些,只能翻 session.v*.jsonl.zstd 自己算,或者干脆只看账单——而账单往往滞后,也没有缓存命中和模型速度这些过程数据。

下面介绍的 dsh-token-lens 就是针对这个缺口的插件。它读的是本机会话日志,所有统计在本地完成,不联网、不上传、不需要 API Key。维护者是 muxili87-art,社区分类为「模型推理」。插件名 TokenLens · 用量透镜,作用是把日志折叠成 Token / 请求 / 费用 / 缓存命中 / 模型速度的看板。

核心功能

插件做的事情是「本地日志 → 按天折叠 → 看板展示」,覆盖这几类信息:

  • 多口径总览:今天 / 7 天 / 30 天 / 全部 / 自定义区间,KPI 卡可对比。
  • 趋势图:Token、请求、费用、模型耗时、输出速度五种指标;柱状 / 折线切换,可按模型筛选。
  • 自动聚合粒度:今天按小时;7 天 / 30 天按天;更长区间按周(周一锚定)或按月。
  • 热力图:近 53 周每天一格,按请求 / Token / 费用 / 耗时着色,点击格子筛选当天。
  • 模型分布:按请求 / Token / 费用 / 耗时排名的占比条,点击图例筛选。
  • 速度面板:速度分布(P25 / P50 / P75)与速度趋势折线,支持多模型对比。
  • 请求明细:按时间 / 耗时 / Token 排序,支持模型与关键词搜索,失败请求有独立视图。
  • 隐私模式:一键隐藏会话名、账号、错误详情与敏感模型名,数字不变,适合截图与共享。
  • 更新检查:面板顶栏查询 GitHub 最新 Release。
  • 峰谷计价:按北京时间工作日高峰 / 低谷两档估算,内置 DeepSeek / OpenAI / Anthropic / Google 公开价目。

安装后插件会自动扫描 ~/.dsh/sessions,增量折叠成按天桶并缓存到 ~/.dsh/usage-dashboard/cache.v1.json,之后每次打开只做增量更新。

安装与启用

前置条件:DeepSeek Harness 桌面版(开发与验证版本 0.2.1-rc.5)。

  1. 下载 Release 里的 dsh-token-lens-<version>.zip,解压到任意目录并记下绝对路径。
  2. 在 Harness 会话里执行:
plugin_manager install_bundle target=<解压后的绝对路径>
  1. 完全退出并重新打开 DeepSeek Harness(首次加载 / 替换插件必须重启,浏览器半的客户端模块才会重新组装)。
  2. 左侧边栏出现「用量分析」图标,点击进入。

升级方式相同:用新版本 zip 重跑一次 plugin_manager install_bundle,再完全退出重启。

需要特别注意:v1.0.0 的 zip 是坏的,它的 package.json 漏了 exports["./client"],Harness 启动扫描会直接抛错、整个插件组装链失败。请使用 v1.0.1 或更新版本。

装完应用起不来时,按这个顺序排查:

  1. 打开插件目录执行自检:
npm run doctor

报 ✗ 声明了 dsh.client,但 package.json 没有 exports 映射 就是上面那个问题,改用 v1.0.1+。

  1. 先卸载再重装:删掉 ~/.dsh/profiles/<profile>/node_modules/dsh-token-lens,并删掉 cordis.patch.yml 里对应行,重启确认应用恢复,再重新 install_bundle。
  2. 仍失败时,把 Harness 启动日志里 client-modules: 开头的报错发到 Issues。

Windows 用户注意:插件本身与操作系统无关(路径全部走 homedir() / path.join)。如果从命令行启动 Harness 后静默退出,通常是环境变量同时存在 HTTPS_PROXY 和 https_proxy(大小写重复),清掉其中一个,或直接双击桌面图标启动。

计价配置与隐私模式

计价开箱即用:内置通用价目表,没配置过的模型按模型名自动匹配估算。匹配顺序是 providers.<名字> 精确命中 → 该 provider 价目表;否则按 fallbacks 用模型名兜底(openai/gpt-4o 与 gpt-4o 都认);都没有才算「未定价」。providers 永远优先于内置价目表。

pricing.json 的顶层结构如下:

{
  "fx": { "USD": 7.2 },            // 非人民币价目折算成人民币
  "peak": {
    "offsetMinutes": 480,
    "weekdays": [1, 2, 3, 4, 5],
    "windows": [["09:00", "12:00"], ["14:00", "18:00"]]
  },
  "books": { "openai-usd": { "currency": "USD", "models": {} } },
  "providers": { "official": { "book": "deepseek-official", "models": {} } },
  "fallbacks": [
    { "match": "gpt-4o-mini", "book": "openai-usd", "model": "gpt-4o-mini" },
    { "match": "gpt-4o", "book": "openai-usd", "model": "gpt-4o" }
  ]
}

几个容易踩的点:

  • providers.<p> 的 key 必须和会话日志里 provider/model 的前半段一致,匹配不到才走 fallbacks。
  • fallbacks[].match 默认前缀匹配(mode 可设 prefix / contains / exact),依次比对 model、provider/model 和模型名最后一段,所以 gpt-4o-mini 要写在 gpt-4o 之前。
  • books.<b>.currency 不是 CNY 时按 fx 折算,界面统一显示人民币。
  • 只有 offPeak 一档的模型,在高峰时段按同一档计算。
  • 内置价目估算的模型会在页脚单独标注,不会被误当成账单金额。

隐私模式点右上角按钮后:会话标题变成 会话 01、会话 02,账号变成 账号 A、账号 B,错误信息与搜索关键词隐藏,形如 /Users/...、https://...、sk-... 的敏感模型名显示为 模型已隐藏。统计数字、图表、费用一分不变。

指标口径与聚合粒度

指标定义如下:

指标 定义
总 Token input + output + cacheRead + cacheWrite
请求数 成功发出的模型请求数(失败单列)
缓存命中率 cacheRead / (cacheRead + input)
费用 cacheRead×cacheHit + (input+cacheWrite)×cacheMiss + output×output
模型耗时 该模型请求的 LLM 平均耗时(不含工具调用)
输出速度 output tokens / (耗时 ms / 1000),逐请求取样本后算 P25/P50/P75

聚合粒度:今天按小时;7 天 / 30 天按天;自定义区间跨度 ≤1 天按小时、≤45 天按天、≤315 天按周(周一锚定)、更长按日历月。速度的 P50 在每个桶内用请求级样本重新计算,不是「日 P50 的平均」。

数据准确性

唯一数据源是 ~/.dsh/sessions/<workspace>/<session>/session.v*.jsonl.zstd 会话日志,插件只读不写。统计的是本地记录的用量,与供应商账单可能有出入(重试、失败请求、缓存计费口径、免费额度等)。fork / 副本会话的「播种」请求会去重,避免同一份历史被算两遍。缓存文件可随时删除,下次打开会全量重建。

插件对外暴露两个鉴权路由:

  • GET /usage-dashboard/summary?from&to&tz&mode
  • GET /usage-dashboard/requests?from&to&tz&view&sort&order&offset&limit&model&q

适用场景与注意事项

适合本地使用 Harness、想复盘自己 Token 与费用开销的开发者;也适合需要把用量数据截图共享、但不想泄露会话内容的场景——此时把隐私模式打开。

需要留意三点:

  1. 插件以当前 DSH 进程的权限运行,安装前应检查源码与许可证(MIT)。
  2. 它统计的是本地日志,不是供应商账单,不能直接当作财务依据。
  3. 计价默认用公开价目估算,第三方中转或改过名的自定义模型需要自己在 pricing.json 里加,或用 fallbacks 兜底。

结尾

dsh-token-lens 把 Harness 已经记录的会话日志重新利用起来,补上了 Token、缓存命中、费用、模型速度这些「过程看板」,且全程本地计算、隐私模式可共享。

目录页:https://www.skillhub.cn/plugins/muxili87-art/dsh-token-lens

GitHub:https://github.com/muxili87-art/dsh-token-lens

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

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

小夜