用 Claude Code 做了个 Claude Code 的成本计算器

58 天前
 keakon
开发成本将近 $100 ,虽然都是白嫖的……
https://github.com/keakon/claude-code-cost
1295 次点击
所在节点    Claude
13 条回复
mogutouer
57 天前
不是有 ccusage 么
keakon
57 天前
@mogutouer 慢,维度少,不好看
mogutouer
57 天前
@keakon #2 ccusage 少的是每一天里显示某个模型用量多少,他 json 里可以显示但 10 天列表里没有显示,你这个也没有
keakon
57 天前
@mogutouer 它没有项目维度,没有排除 0 token 的天数,没有消息数,不能进行汇率转换,不支持中英文自动检测,不能自定义模型的单价,日期不是按用户的时区……总之相差很多。

不做每天里分模型的用量是感觉没必要,维度太多了会乱
mogutouer
57 天前
@keakon #4 有啊,在 json 里都有,每天的分模型非常重要,claude code 默认的模式就是 Default (Opus 4 for up to 50% of usage limits, then use Sonnet 4),至少今天这个时候看看 opus 和 sonnet 分别用了多少,好对接下来的 5 消失的 block 做规划,ccusage 虽然 json 里显示出来了,但看的很累,算起来也很累。
keakon
57 天前
@mogutouer 你要的不是今天的模型统计,而是剩余用量。因为 5 小时就重置了,你看之前的消耗也没用。

不过 Claude Code 的定价里并没有明确说明 usage limits ,这 2 篇文章有提到三档分别是至少保证 45 、225 和 900 条消息,但也和消息长度之类的相关。不知道显示过去 5 小时的用量(或剩余用量)是否才是你的需求?
https://support.anthropic.com/en/articles/8324991-about-claude-pro-usage
https://support.anthropic.com/en/articles/11014257-about-claude-s-max-plan-usage
mogutouer
57 天前
@keakon #6 我的需求就是你的日期+日期的模型消耗,就是我要看 opus 用了多少了,差不多的话,任务又不重要我就切到 sonnet 了,5 小时剩余时间如果有重要任务我再选择性的使用 opus ,无论是 ccusage 还是你这个项目,我都无法快捷的看到我这 5 个小时,opus 和 sonnet 分别用了多少,尤其是 opus ,你们都是混在一起显示计费的。
mogutouer
57 天前
ccusage 目前有这个,但无法看到具体模型的消耗,是合并的总值。至于今天用了多少昨天用了多少无所谓,重要的就是这 5 个小时的 block 用了多少。

keakon
56 天前
@mogutouer 刚研究了一下 ccusage ,有几个发现:
1. 遇到配额用完时,Claude 会记录一条类似这样的消息:Claude AI usage limit reached. Your usage will reset at |1705334400|
这是我猜测的,不一定是这样的文本,最好你能在 ~/.claude/projects 里搜索下,给我一条 JSON 作为例子。
2. 剩余用量的计算是基于历史统计的。它把历史所有的 session blocks 的开销都统计出来,计算一个最大成本。然后计算当前 session block 的成本,来估算百分比。
这个算法可能会出现误差:
1. 轻度使用,一直没遇到 "Claude AI usage limit reached",导致可能统计了很长的一个 session block 。
2. 更换了套餐,和历史数据不一致。
3. Claude 官方也没说它们是这样限额的,并且 Claude 和 Claude Code 是共用配额的,计算会遗漏。
我感觉既然都是估算的,不如直接参数里设置一个消息数上限,这才是 Claude 官方承认的。
mogutouer
56 天前
@keakon #9
Claude AI usage limit reached. Your usage will reset at 这个消息我知道,但当我看到的时候已经用完了,另一个提示是 Claude Opus 4 limit reached, now using Sonnet ,表示 opus 额度用了此次 block 的 50%了。
我就想在 opus 用量 50%之前做一些规划,但现在当前的 tokens 消耗都是合并的,但其实里面有分开每个模型用了多少,我希望能把这个信息显示出来,让我可以在这 5 小时的 block 里在额度之前做一些规划。

ccusage daily --json 里有他解析之后汇总的详细的数据

因为我没办法很容易的看到每个模型用了多少,都是今天汇总显示的,所以没办法估多少才是 opus ,或者一个 block 的限额是多少,如果可以看到的话,我可以进行统计真实具体的数字给你。
keakon
56 天前
@mogutouer 我大概想了一下方案:
1. 从当前时间往前推,一直找到以下三种情况:
1. 出现 Claude AI usage limit reached
2. 出现 5 小时的 gap
3. 找到第一条消息
后两种情况从这条消息开始,每隔 5 小时切一次 block
2. 根据用户传入的最大 block 消息数来计算用量,并以 5:1 的额度计算当前 block 各模型的剩余消息数
3. 如果当前 block 内还有 Claude Opus 4 limit reached ,则将该消息之前的消息数( opus 算 5 条)的两倍当成最大 block 消息数来计算

如果这个方案没问题的话,还需要你提供一下包含 Claude AI usage limit reached 和 Claude Opus 4 limit reached 的 jsonl 文件中的 2 条 JSON 示例,以便更好地进行匹配
mogutouer
55 天前
@keakon #11

以下是出现 Claude Opus 4 limit reached, now using Sonnet 4 时的 json 数据

```
{
"date": "2025-07-29",
"inputTokens": 3234,
"outputTokens": 21535,
"cacheCreationTokens": 2557523,
"cacheReadTokens": 27695237,
"totalTokens": 30277529,
"totalCost": 70.92085875000001,
"modelsUsed": [
"claude-sonnet-4-20250514",
"claude-opus-4-20250514"
],
"modelBreakdowns": [
{
"modelName": "claude-opus-4-20250514",
"inputTokens": 2425,
"outputTokens": 7478,
"cacheCreationTokens": 1887563,
"cacheReadTokens": 19914687,
"cost": 65.86106175000003
},
{
"modelName": "claude-sonnet-4-20250514",
"inputTokens": 809,
"outputTokens": 14057,
"cacheCreationTokens": 669960,
"cacheReadTokens": 7780550,
"cost": 5.059796999999999
}
]
}
```
keakon
55 天前
这里面没有消息,但是带了 modelBreakdowns 字段?
而且格式好像完全不一样,正常的类似于:
```
{
"parentUuid": "5bc1ef43-d2fe-414e-8861-5f7a54baf34e",
"isSidechain": false,
"userType": "external",
"cwd": "xxx",
"sessionId": "11037184-db0d-49b3-a7d0-543313ada073",
"version": "1.0.60",
"gitBranch": "main",
"type": "assistant",
"timestamp": "2025-07-25T17:14:43.936Z",
"message": {
"id": "msg_01B4usYpDjtc2jurnoKfJbo7",
"type": "message",
"role": "assistant",
"model": "claude-sonnet-4-20250514",
"content": [
{
"type": "tool_use",
"id": "toolu_01CeTbAM3nqq4d5xJLrDiNRR",
"name": "TodoWrite",
"input": {
"todos": [
{
"content": "检查 main.py 中的时间处理逻辑",
"id": "1",
"priority": "high",
"status": "completed"
},
{
"content": "运行程序查看当前的时间显示和成本计算",
"id": "2",
"priority": "high",
"status": "in_progress"
},
{
"content": "分析时区转换是否正确处理了日期边界",
"id": "3",
"priority": "medium",
"status": "pending"
}
]
}
}
],
"stop_reason": null,
"stop_sequence": null,
"usage": {
"input_tokens": 5,
"cache_creation_input_tokens": 14959,
"cache_read_input_tokens": 18127,
"output_tokens": 331,
"service_tier": "standard"
}
},
"requestId": "req_011CRU62x5fSHHj7NnnQV4Ng",
"uuid": "84514a0c-f6de-4ec8-a1dc-6d60c1a001d3"
}
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1147922

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX