dsh-model-cost
每一分花费,都算得清楚。
在 DSH 里随时看到:这次对话花了多少、现在是不是谷时、这个月不同模型各花了多少。
这是什么
DSH 会告诉你用掉了多少 token,但不会告诉你这些 token 值多少钱。模型按 token 计价,缓存读、缓存写、输入、输出各有各的单价,有的供应商还分峰时和谷时——聊得久了,花费就很难有直觉。
dsh-model-cost 读 DSH 自己的会话日志,把每次调用的用量按 LiteLLM Model Cost Map 折算成美元。这份价目表覆盖数千个模型条目,各家云厂商转售的也在里面。算好的数字会放到你本来就在看的地方:输入框下方的状态栏、新会话的模型选择器旁边、左侧栏的「模型成本」页。装完即用,通常不需要任何配置。
计算全部在本地完成,不联网、不上传;只有你主动点「更新价目表」时,才会去取一次 LiteLLM 的公开 JSON。价目与峰谷规则也来自这份公开数据,换模型、换供应商它大多能自己认出来,认不出的可以在价格映射里手动指定。
三个地方,各看什么
| 在哪 | 看到什么 |
|---|---|
| 输入框下方的状态栏 | 本会话累计花费,以及现在是峰时还是谷时 |
| 新会话的模型选择器旁 | 当前模型在当前时段的单价:缓读 · 缓写 · 入 · 出 |
| 左侧栏「模型成本」 | 所有会话的统计、走势、来源与价格映射 |
会话花了多少

- 就挂在输入框下方的状态栏里,和
22 轮 565 步 · 170 tok/s、121M tok · 缓存命中 99%排在同一行。 - 悬停看明细,点一下可以钉住,方便对着别处看。
- 图标颜色跟着当前时段走:峰时黄、谷时绿、该模型没有峰谷价时用普通文字色、还没认到价目表条目时是红色。
- 明细面板里有:
- 当前模型路由,以及它对应的价目表条目;
- 此刻是峰时还是谷时,还有多久切换;
- 输入、输出、缓存读、缓存写四项单价(每百万 token);
- 按本地时区画的「今天的时间条」,标出「现在」的位置;
- 本会话的 tokens、请求数、峰/谷花费拆分,多模型时还有分模型花费;
- 底部「查看完整计价规则」直达该模型的定价来源(没有来源时退到 LiteLLM 模型页)。
- 会话里还没有可计费调用时,它干脆不出现,不占位置。
现在问这一句,贵不贵

- 新会话的输入框底部,紧挨着模型选择器。
- 按
缓读 · 缓写 · 入 · 出的顺序列出当前时段下每百万 token 的单价,颜色同样跟着峰谷走。 - 缓存读、缓存写的价格为 0 或缺失时,对应项直接不显示,免得一串
$0占地方(明细面板里仍会列全四项)。 - 换模型,价格立刻跟着换,不用刷新页面。
- 点开是同一副明细面板,只是不含花费统计——这会儿还没有会话可算。
- 发出第一条消息后价签隐去,把位置让给上面的会话花费。
总共花了多少

左侧栏 →「模型成本」。右上角两个按钮:「更新价目表」拉取最新价格,「刷新」重新统计。页面自上而下:
- 时间范围与统计口径:全部 / 今天 / 近 7 天 / 近 30 天;按模型、Provider、会话、日期或峰谷分组。
- 来源:按 provider 列出该范围内的花费,点一下即从概览、走势和分组表里暂时剔除,再点恢复;选择记在浏览器里,下次打开仍然生效。价格映射表不受它影响,始终列出全部路由。
- 概览卡片:总成本、tokens、请求数、缓存命中率、峰/谷占比、未定价调用数。
- 用量走势:按天画出花费 / Tokens / 请求,可在三种指标间切换。没有记录的日子留成空位,时间轴按真实日期连续铺开;跨度超过 120 天自动按周、超过 540 天按月;范围内只有一天数据时(比如「今天」)自动展开成 24 小时。悬停任意柱子,卡片给出该时段的日期、峰谷花费拆分和四类 token 数量。 花费模式下柱子按峰(黄)/ 谷(绿)/ 无峰谷(蓝)堆叠;Tokens 模式下拆成缓存读、缓存写、未缓存输入、输出四段。
- 分组表:每组成本、占比条、调用数、输入 / 缓存读 / 输出 tokens,旁边注明扫描了多少个会话、其中多少来自本地缓存。
- 价格映射:会话里出现过的每一条
provider / model,当前认到了哪个价目表条目;「多义」或「未定价」的可以在这里手动指过去,保存后统计和价签立即生效。

安装
需要 Windows 上的 DeepSeek Harness Desktop(安装脚本借用 Desktop 自带的 Node 运行 dsh plugin)。
git clone https://github.com/SiskonEmilia/dsh-model-cost
cd dsh-model-cost
pwsh -File .\install-desktop.ps1
装完重启 Desktop,插件就生效了。之后:
- 改了
client.js(界面部分):刷新页面即可。 - 改了
index.js(后台服务):重启 Desktop,或到 Settings → Plugins 把dsh-model-cost关掉再打开。
插件界面中英文跟随 DSH 的语言设置。
隐私
- 只读本地会话日志里的 provider、model、usage 和完成时间,不读消息正文。
- 统计缓存、价格映射、更新过的价目表都写在本地
$DSH_HOME/model-cost/(默认~/.dsh/model-cost/),不上传。 - 唯一的联网动作是你点击「更新价目表」时拉取 LiteLLM 的公开 JSON;插件本身不会主动发起请求。
常见问题
装好了,输入框旁边却什么都没有?会话成本要等第一次调用完成才会出现;新会话里还没有花费,不显示是正常的。
新会话的单价价签则应该在模型选择器旁边。如果它也不见,先确认 Settings → Plugins 里 dsh-model-cost 已启用并重启过 Desktop;如果价签显示「未定价」,先用这个模型发一条消息,再到「模型成本 → 价格映射」里为它指定条目(映射表只列出真正调用过的路由)。
「未定价」表示这个 provider / model 没能在价目表里找到对应条目。到「模型成本 → 价格映射」,为它挑一个价目表 key 保存即可,统计和价签会立刻用上新映射。
数字有出入通常是两类原因:一是插件用 LiteLLM 的公开单价 × 实际用量估算,供应商自己的账单可能按别的口径结算;二是缓存写入价缺失时按输入价兜底(这是 LiteLLM 的口径),个别供应商并不这么计。此外,长上下文阶梯价、批量/优先档、图片和音频计费目前不参与计算。
峰时和谷时是怎么判定的?用价目表里每条模型自带的 off_peak_pricing 规则,按每次调用的完成时间落到峰时或谷时,和 LiteLLM 自身的计费口径一致;命中谷时段时,用该时段的单价替换标准单价。
面板里那条「今天的时间条」按你浏览器所在的时区画;完整的一周规则以供应商定价页为准,面板底部的「查看完整计价规则」可以直接跳过去。
fork 出来的对话,花费怎么算?fork 会把父会话的历史事件复制一份进新会话的日志,但这些调用已经记在父会话名下。插件会跳过这段继承的前缀,所以全局合计不会重复计费。
会话花费面板里写成 $0.238 (+fork $1.23):括号里是 fork 那一刻带过来的花费,方便对照,但不再计入。这份前缀是 fork 时的冻结副本,父会话之后继续产生的花费不会追加到子会话里。
全局统计一次最多扫描最新的 800 个会话,超出时会提示截断。第一次统计(或缓存被清空之后)需要完整读一遍日志,之后只读有变化的会话,所以后续打开会快很多。
想再深入一点
计价口径的每个细节、价格映射规则与配置文件格式、本地缓存的增量策略、内置价目表的更新与重新生成,以及代码结构和测试,都在这里:
No comments yet. Be the first to write one.