Hermes 说这次运行花了 $0.00,到底该信吗


跑完一个长任务,你瞄一眼状态栏的 Cost 一行:$0.00。或者干脆是 n/a。可你全程用的是自己的 OpenAI key,这次运行明明白白烧掉了几万 token,屏幕上却告诉你“这次没花钱”。要么它真的免费,要么 Hermes 根本不知道花了多少——而在不久前,这两种情况你分不出来。

现在这个模糊地带堵上了。直连第一方 API 的会话(OpenAI、xAI、Anthropic、Google、DeepSeek),即使模型不在 Hermes 自带的价目表里,也会被计价,不再把真实的支出显示成零(#120441,salvage 自 #56625;Anthropic 部分见 #120517)。

一个价格可能来自三个地方

Hermes 打印出来的每一个成本数字,都要经过同一个解析函数 get_pricing_entry。它沿着一条很短的阶梯往下走,取第一个能回答的台阶:

  1. 订阅制路由不计价。如果计费路由判定该模型包含在套餐里(openai-codex、xai-oauth),返回的是一个“已包含”标记。既然不按 token 收费,也就没什么可估的。
  2. OpenRouter 走自己的通道,因为路由器会把带价目的实时目录一起发过来。
  3. 内置价目表——随 Hermes 一起发布的快照——负责主流模型。
  4. 厂商自己的 /models 接口:当你配置的 base URL 会返回价格元数据时,下一步问它。
  5. 新增的一跳:通过 models.dev 取厂商官方牌价,用于前四步都答不上来的情况。

第五跳是这次的重点,而且被刻意收得很窄。只有在你的计费路由指向厂商本尊时才会触发:

计费路由 受信域名
openai openai.com
xai x.ai
anthropic anthropic.com
google googleapis.com
deepseek deepseek.com
xiaomi xiaomimimo.com

完全没设 base URL 也算受信——那意味着走的就是厂商的默认端点。

为什么中转和代理依然不给价

这一点在信任何成本数字之前值得先记住:同一个模型 id,交给不同的人来提供服务,账单可能完全不一样。

代理、中转或自定义端点完全可能加价、打折,或者干脆包月。这时候套用厂商牌价,就是一本正经地说假话。所以这一跳会先看自己要定价的那个来源:必须是 443 端口的 https,并且主机名要么正好是那个厂商的域名,要么是它的子域。其余情况一律返回空,会话保持诚实的 unknown。

它在状态栏上显示为 n/a,而不是编一个美元数字。CLI 文档现在也把这一行的来源写清楚了:先内置官方价目表,再厂商的 /models 列表,只有在直连第一方 API 时才由 models.dev 补最后一跳。

怎么看这次到底花了多少

  • 状态栏的 Cost 行是随手一眼的估算(未知或真的零价模型显示 n/a)。
  • /usage 打开明细,包含输入与输出 token,以及缓存读写的分类成本。
  • hermes insights 跨会话汇总 token 和成本,判断“这个模型值不值得用在这个任务上”时最好用。

有两个状态词是有实际含义的,值得分清。estimated 意味着 Hermes 找到了价目表,并乘以它数出来的 token 数;unknown 意味着没有它愿意套用的价目表——并不代表这次免费。

估算本身靠的是 Hermes 手里已有的数字做乘法。这一跳读的是进程内或磁盘上的模型元数据缓存,不会在一轮对话中间去发起网络请求,所以直连会话不会为了知道自己的价格而多付一个往返。

便宜模型的零不再含糊

同一个显示里还藏着第二个更老的坑:便宜模型。小模型跑一个短任务,成本确实可能只有不到一美分,而两位小数的格式会把它显示成 $0.00——跟“没定价”长得一模一样。现在低于一美分的成本按四位小数渲染,你会看到 $0.0046,而不是一个平白的零。

它始终是估算

有一点要讲清楚:这是牌价乘以数出来的 token,不是你的账单。如果你的账号有协议价、承诺用量折扣,或者缓存计费策略不同,厂商那边的账单会对不上。这些估算擅长回答的是“这个模型是不是比那个贵十倍”,而不是精确预测你月底要付多少钱。

原修复给出的实测数字:直连 openai-api 跑 gpt-5-nano(19,750 输入 / 109 输出 token)过去记录为 cost_status=unknown, estimated_cost_usd=0.0,现在记录 $0.0010266;直连 xai 跑 grok-4.3(21,157 输入 / 156 输出)从 unknown, 0.0 变成 $0.02637205。两个数字手算一遍都和厂商公布的价格对得上。

后续那轮改动还顺手把 Anthropic 的 fast mode 对齐了当前 Claude 文档——你选的模式,就是你看到的模式。

什么时候能用上

两处改动都在 v0.21.4 打标签之后才进 main,所以还没进正式版本;一次拉取 main 的 hermes update,或者下一个正式版本,就能用上。不需要任何配置:只要你是直连第一方 API,兜底计价自动生效,CLI 文档里 Cost 那一行现在也明说了它的三个来源,你可以自己核对。

如果你出于成本考虑故意走中转,那要留意:中转上的 n/a 是故意的,也是 Hermes 宁愿不说话也不瞎猜的唯一情况。想看状态栏每一行都跟踪了什么,可以读我们的状态栏指标指南;同一份元数据缓存还会把每个模型的能力数据暴露给插件,细节在提供商插件钩子指南里。订阅制用户建议先看Claude 订阅接入指南——那类路由是故意不报价的。