
OpenUsage如何把Token日志算成美元模型定价引擎深度解析【免费下载链接】openusageBurning through your subscriptions too fast? Paying for stuff you never use? Stop guessing. OpenUsage is free and open source.项目地址: https://gitcode.com/gh_mirrors/op/openusageOpenUsage 是一款免费开源的 macOS 菜单栏应用它能扫描 Claude、Codex、Cursor、Grok 等 AI 工具的本地 Token 日志并通过内置的模型定价引擎把每一次请求的 Token 消耗折算成美元成本让你清楚知道订阅额度值多少钱。本文带你完整走一遍这套定价引擎的工作流程价格从哪来、模型名如何匹配、美元如何计算、以及离线时如何保证估算不中断。三层价格数据源定价数据从哪里来OpenUsage 的价格数据采用三层叠加策略同一模型出现在多个来源时上层优先OpenUsage 定价补充表supplement覆盖公共目录里没有的模型如 Cursor 原生的auto、composer-*系列、快速变体倍率、以及日志模型名到目录键的别名规则。LiteLLM社区维护的model_prices_and_context_window.json覆盖绝大多数 API 计费的模型。models.dev兜底来源补充 LiteLLM 遗漏的新模型或小众模型。应用安装包内自带这三份数据的离线快照pricing_supplement.json 等所以首次启动、断网状态下都能正常计价。运行时每个来源约每小时刷新一次带 ETag 校验缓存存放在~/Library/Application Support/OpenUsage/pricing/目录刷新永远不阻塞用量扫描。补充表还支持热更新合并进主分支后约一小时即可被所有已安装应用拉取无需发新版本。详细说明见官方文档 pricing.md。模型名解析从日志字符串到价格表的 6 步日志里的模型名很少与价格表键完全一致比如grok-4.3vsgrok-4-3OpenUsage 按固定顺序逐级尝试匹配补充表别名规则把日志 slug 改写成标准键例如 Cursor Router 选出的Opus 5 (Auto Balanced)这种文字描述也能映射到对应模型的价格补充表精确匹配LiteLLM 精确匹配-fast快速变体处理去掉-fast后缀按基础模型计价再乘以快速倍率没有已知倍率时宁可标记为未定价也不静默套用标准速度价格LiteLLM 模糊匹配边界感知的子串匹配容忍厂商前缀xai/、分隔符差异.vs-、日期后缀claude-sonnet-4↔claude-sonnet-4-20250514同时避免把claude-sonnet-4误配到claude-sonnet-4-5models.dev 精确匹配仅作 id 级兜底。匹配逻辑的核心实现在 ModelPricing.swift 和 PricingCatalog.swift并对每个模型名做了内存缓存memoize整个解析过程同步完成不会拖慢扫描。美元计算公式四类 Token 桶分别计价每次请求的成本按4 类 Token 桶分别计算定义见 ModelRates.swiftToken 桶计价方式普通输入input按模型输入单价5 分钟缓存写入cache write按缓存写入单价无单独定价时等同输入价缓存读取cache read按缓存读取单价通常仅为输入的 1/10 左右输出output按模型输出单价在此基础上还有两个加价规则长上下文档位提示词超过阈值多数模型 20 万 Token部分 GPT-5.x 系列为 27.2 万时整个请求按高档费率计价快速模式倍率会话标记了 fast 变体时全部费用乘以倍率Claude 快速模式为 2 倍。单请求费用 Σ(各桶 Token 数 × 每百万 Token 单价)最终按天聚合再由 SpendTileMapper.swift 汇总成面板上今日 / 昨日 / 近 30 天三张花费卡显示为$4.08 · 1.2M tokens的样式并带 ⓘ 标记表示这是本地估算值。无价模型怎么办宁缺毋滥的估算原则定价引擎有一条铁律任何来源都无法定价的模型会被整体排除出美元统计并在面板上显示黄色警告三角列出未定价的模型名整天无价可算时则显示 No data。这避免了Token 数旁边挂着一个漏算了部分的美元数字这种误导。针对 Codex 的本地日志OpenUsage 还提供了可选的Fallback Model兜底定价模型在自定义 → Codex → 成本估算中指定一个公开模型后原本无法定价的用量会按该模型的费率估算已知价格仍然优先并会重新计算历史数据。相关实现在 PricingFallbackOptions.swift。离线优先的缓存策略ModelPricingStore.swift 实现了陈旧数据可先服务后台再校验stale-while-revalidate策略启动时用捆绑快照 磁盘缓存合并重建价格表缓存条目覆盖快照条目但快照独有的模型在实时源下线时依然可用刷新请求携带If-None-Match收到 304 即不重复下载补充表带 ISO-8601updated_at时间戳应用自动取缓存版与捆绑版中较新者避免旧缓存遮蔽新发货的价格拉取的远端数据只获取三份公开价格表不携带任何用量或日志数据你的使用记录不会离开本机。维护者可用 update_pricing_snapshots.sh 脚本定期重新生成捆绑快照例如发版前陈旧无害——运行时拉取会始终覆盖它们。小结这套引擎设计在哪如果你想在源码层面继续深挖建议按以下路径阅读模块文件定价快照与解析顺序ModelPricing.swift费率结构与计费公式ModelRates.swift模糊匹配算法PricingCatalog.swift刷新与缓存管理ModelPricingStore.swift花费卡片汇总SpendTileMapper.swift架构总览architecture.md一句话总结三层数据源 六级名称解析 四桶计价 离线缓存让 OpenUsage 的美元估算既快速又诚实——宁可标注无法计价也不给你一个可能偏低的数字。【免费下载链接】openusageBurning through your subscriptions too fast? Paying for stuff you never use? Stop guessing. OpenUsage is free and open source.项目地址: https://gitcode.com/gh_mirrors/op/openusage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考