前言¶
在 DSH 里跑模型,多数人不是只用官方 API。你在阿里百炼上调模型,但市面上的用量插件几乎都内置同一份 DeepSeek 官方价。结果就是:模型名一样、服务商不一样,价格可能差好几倍;官方有峰谷时段,百炼不一定有;私有部署带租户前缀的模型,在任何公共价目表里都查不到。最后 token 统计得很准,金额是错的,而且错得悄无声息。
下面介绍 looriann/dsh-cost-ledger。它定位是 DSH 的「费用」标签页,按天、按模型看 token 花了多少钱。它认的不只是 DeepSeek,同一份权重经百炼、官方、第三方转售卖出、价格不同时,它按「服务商 + 模型」二元组查价,不是按模型名瞎猜。界面照着 DeepSeek 官方控制台做:按天堆叠柱状图,鼠标悬停看到当天明细。
这是什么¶
这是一个客户端插件,由 Looriann 维护,分类归在客户端(client,web 平台)。仓库地址是 https://github.com/Looriann/dsh-cost-ledger,社区目录页是 https://www.skillhub.cn/plugins/Looriann/dsh-cost-ledger。当前 GitHub 星标 1。
它解决的核心问题分三层:
1、认身份:按 服务商 + 模型 二元组查价,而不是只看模型名。
2、讲出处:每个模型一行都带置信度徽章(手填 / 官方 / 聚合目录 / 继承 / 未定价)。
3、能补价:查不到就明确标「未定价」,点一下就地填,填完历史数字立刻重算。
插件的设计口径是:宁愿显示「未定价」,也不显示一个看起来很专业的假 ¥0.00。
核心功能¶
| 能力 | 说明 |
|---|---|
| 按天图表 | 天 × 模型的堆叠柱状图,悬停显示当天各模型花费,可切「金额 / tokens」 |
| KPI 条 | 今日 / 近 N 天 / 本月 / 缓存命中率 / 样本数 |
| 价格来源徽章 | 每个模型一行徽章,一眼看出这个数是查来的还是你填的 |
| 就地补价 | 未定价横幅点开填四个单价(元 / 百万 token),保存即重算 |
| 随包价目 | 自带阿里百炼 142 个模型的官方人民币价:千问全系 + DeepSeek / Kimi / GLM / MiniMax 的百炼上架版 |
| 历史回填 | 首次启动自动扫描 ~/.dsh/sessions/,过去几天的账立刻就有 |
| 可对账 | npm run replay 用同一份代码在终端复算,界面数字必须能复现 |
其中「可对账」是它区别于普通用量面板的一点:界面和 replay 共用 lib/ 下的同一份代码,所以界面上的数字一定能在终端复现。
安装与启用¶
安装有两种方式。
方式一:插件商场,搜索 cost-ledger,完整包名是 @looriann/dsh-cost-ledger,点击安装。
方式二:命令行,在 DSH 桌面 profile 下安装:
dsh plugin --profile desktop add @looriann/dsh-cost-ledger
装完重启 DSH,浏览器按 Ctrl+Shift+R 硬刷新。打开任意会话,顶部标签栏会多一个「费用」。
依赖条件写在 package.json 里,运行时属于零依赖:
"engines": {
"node": "^22.19.0 || >=24.0.0"
}
README 同时写明需要 DSH 0.2.0-rc.2 / 0.2.1-rc.2。这里的 Node 范围来自 package.json 的 engines 字段,DSH 版本约束来自 README 原文。注意控制命令必须按上面原文一字不改,尤其不要凭目录名去拼 dsh plugin add github:owner/repo。
典型用法¶
1、打开任意会话,点顶部的「费用」。
2、首次打开会自动回填历史;几秒后图表和 KPI 就有了。
3、顶部如果出现橙色横幅「有 N 个模型还没定价」,点里面的 chip 补价,填四个单价并保存。
需要核对原始账目时,在仓库目录跑回放:
npm run replay # 回放全部会话,打印每天的 tokens 与金额
npm run replay -- <日志文件> # 单个会话,逐轮成本
重新抓取官方价目用:
npm run prices # 重新抓官方价目,合并进账本(不覆盖手填行)
开发自检命令也一并列出,均为原文脚本:
npm run check # 语法检查(8 个模块)
npm test # 22 项单元用例 + 8 项插件冒烟
npm run replay # 回放本机真实日志
npm run seed # 从抓取结果重建随包价目表
npm run rename # 一键改包名(换 npm 作用域时用)
价格是从哪来的¶
按优先级从高到低:
| 来源 | 说明 |
|---|---|
| 你手填的 | 最高优先级,永远不会被自动抓取覆盖 |
| 官方价目 | 随包种子(阿里百炼官方页,142 个模型,含第三方模型的百炼版),或 npm run prices 重新抓 |
| 聚合目录 | 计划接入 models.dev / LiteLLM |
| 继承同模型 | 同模型在别的服务商下有条目,借用但降级标注 |
| 未定价 | 只有 token 没有钱,界面明确标红 |
关于自动抓价,README 的口径比较直接:bailian.console.aliyun.com 的模型广场是登录态 SPA,程序抓不到表格;但同一份表格有公开 Markdown 导出 help.aliyun.com/zh/model-studio/model-pricing.md,能解析出 CNY 单价、阶梯区间和免费额度,当前 142 个模型。官方页只列输入 / 输出单价,缓存单价不单列,插件按百炼公开规则推算(缓存命中 10%、显式创建 125%),并在价目表里标 cacheRule 字段。真正抓不到的只有私有部署(cmaas-glm-5.3 这类带租户前缀的),设计上留空手填,不猜。
数字为什么可信¶
- token 不猜:直接读 harness 的
assistant/message事件,input / cacheRead / cacheWrite / output四个分项原样落账。 - 不重复计费:以
sessionId + turn + step为键,同一步骤重复上报是替换,不是累加。 - 整数微元:
micro = round(tokens × 单价),避免浮点误差滚雪球;null ≠ 0。 - 读时计价:金额永远按当前价目表现算,改价不用重建历史。
数据完全本地:
~/.dsh/cost-ledger/
├─ samples.ndjson ← 只追加的 usage 样本(唯一事实来源)
└─ prices.json ← 你的价目表
不联网,不上传任何内容,也不读对话正文,只读 usage 里的数字。删掉 samples.ndjson 重启等于从零重来。
适用场景与注意¶
适合这类人:同时在 DeepSeek 官方和百炼上跑模型,需要按服务商区分同一模型的实际花费;有私有化部署模型,公共价目表里查不到价;希望界面数字能在终端复现,而不是只看一个面板。
有几点需要写在前面:
1、插件以当前 DSH 进程权限运行,安装前应先检查源码(lib/ 与 scripts/)和许可证,而不是只看 README。许可证是 MIT,作者 Looriann,README 注明事件解析语义参考了 @kidli1412/dsh-session-cost 与 dsh-context 的公开实现,代码为独立编写。
2、它是纯本地工具,除你手动跑 npm run prices 时访问阿里云文档页之外不联网,因此没有后端账号体系,也就不存在云端账单能力。
3、它显示的是按你填的价目表算出来的估算,不是账单。和官方账单对不上时,常见原因包括缓存读写价没填、阶梯档位不同、官方免费额度没扣、四舍五入。
4、它只读 session/event、只注册自己的 /api/cost-ledger/* 路由、只在标签栏加一个页,不改任何内置组件,README 明确说明不会和其他用量插件冲突。
结尾¶
dsh-cost-ledger 把一个容易出错的问题拆得很小:先记住每一笔 token 分项,再按「服务商 + 模型」框架计价,查不到就标「未定价」留给你填。它的价值不在把界面做得像官方控制台,而在让金额可追溯、可复算、不静默出错。
目录页:https://www.skillhub.cn/plugins/Looriann/dsh-cost-ledger
GitHub:https://github.com/Looriann/dsh-cost-ledger