news 2026/9/8 10:11:33

ccusage 使用指南:Claude Code 用户的 Token 用量与成本监控必备工具

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ccusage 使用指南:Claude Code 用户的 Token 用量与成本监控必备工具

1. 为什么每个 Claude Code 重度用户都需要 ccusage

先说说我自己的情况。大概从 Claude Code 正式对外开放后,我就把它接进了日常的编码流程里,写脚本、重构老项目、写测试用例,甚至排查线上问题都会丢给它。一开始用得确实爽,但两周后看到账单时,人直接麻了——我完全不知道这些 token 到底花在了哪里,哪些会话吃掉了大部分额度,是某个长时间挂着的重构任务,还是某次没注意上下文长度的闲聊式调试。

Claude Code 本身在终端里会展示单次请求的 token 用量,也会在会话结束时给一个大概的统计,但这些都是“当下”的、碎片化的。我想要的是一个能汇总、能按天/按会话/按项目维度查看全局消耗的工具,最好还能看到成本。这时候我找到了 ccusage,一个专门为 Claude Code 设计的 token 用量统计工具。它通过解析 Claude Code 在本地留下的会话日志文件,把所有请求的 token 消耗、成本、耗时、模型信息、会话标题全部整理成一张表,直接在终端里展示出来。

ccusage 对我这种需要控制预算、给团队做用量归因、又不想自己写脚本解析 jsonl 的人来说是刚需。它解决的问题很明确:你不知道自己的 Claude Code 额度花在哪、花了多少、什么时候花的。如果你是 Claude Code 的重度用户,或者你所在的小团队正在评估是否要批量使用 Claude Code,这个工具一定要先装一个。下面我会从安装、日常使用、核心原理、常见报错排查到进阶玩法完整过一遍,尽量把我踩过的坑也一起说清楚。

2. 安装与环境准备:三分钟跑起来

2.1 前提条件:Node.js 版本别太老

ccusage 是用 Node.js 写的命令行工具,通过 npm 分发,所以装它之前你得先确认本机有 Node.js 环境。我建议 Node.js 版本至少 18 以上,npm 9 以上,太低容易出现依赖安装失败或者某些语法不支持的情况。

node -v npm -v

如果你还没装 Node.js,去官网下载 LTS 版本装好就行,或者用 nvm 管理版本。这里有个小建议:如果你的机器上同时有好几个 Node.js 项目,尽量用 nvm,避免全局包权限和版本冲突的问题,后面装 ccusage 时能省不少麻烦。

2.2 全局安装 ccusage

ccusage 直接通过 npm 全局安装:

npm install -g ccusage

装完以后执行:

ccusage --version

如果能看到版本号,说明安装成功。如果你使用的是 macOS 或 Linux,npm 全局安装目录可能不在当前用户的 PATH 里,装了之后提示command not found,这时候需要把 npm 的全局 bin 目录加进 PATH。用下面的命令查看:

npm bin -g

把输出的目录加进 shell 配置文件里,比如~/.zshrc~/.bashrc

注意:如果你是用 sudo 安装的,文件权限可能会乱。我踩过这个坑:后面升级 ccusage 时总提示 EACCES 权限错误,后来干脆把全局 node_modules 目录的属主改回当前用户,才解决了。具体操作是用sudo chown -R $(whoami) $(npm prefix -g)修复。

2.3 确认 Claude Code 的日志目录存在

ccusage 的原理是解析 Claude Code 的会话日志,所以你的机器上必须先装好 Claude Code,并且至少跑过一次会话,让日志文件生成出来。Claude Code 的日志默认存放在:

  • Linux / macOS:~/.claude/projects/
  • Windows:%USERPROFILE%\.claude\projects\

你可以手动看一下:

ls ~/.claude/projects/

如果这个目录不存在,说明你还没有创建过任何会话,或者 Claude Code 版本太老,先跑一次对话再回来。

进入项目目录后,你会看到一堆以项目路径编码后的名称命名的文件夹,比如-Users-admin-test-project这样的名字。里面是*.jsonl文件,每个文件对应一个会话的全部消息记录。ccusage 就是靠读取这些 jsonl 里的 token 使用字段来统计的。

3. 日常使用与命令速查:终端里的用量报表

3.1 第一次运行

安装完成后,直接在任意目录下执行:

ccusage

它会扫描默认的~/.claude/projects目录,然后把最近一段时间的会话用量列出来,默认大概是最近 30 天(具体默认窗口看版本,建议用参数显式指定)。输出的每一行就是一个会话记录,包含会话标题、模型、日期、输入 token、输出 token、成本、耗时这些信息。

第一次看到这张表的时候,我最大的感受是“原来钱都花在这些地方了”。有一次我发现某个会话成本到了十几美元,点开一看是当时让 Claude Code 帮我重构一个 8000 多行的旧模块,中间连续对话了快一百轮,缓存没怎么利用起来,全在硬算。

3.2 核心参数:按天、按会话、按成本

ccusage 的命令行参数不多,但每一个都好用,我整理了一张速查表:

命令/参数作用说明例子
/today只看当天的用量ccusage /today
/days N只看最近 N 天的用量ccusage /days 7
/all看全部历史会话ccusage /all
--limit N限制输出条数ccusage --limit 20
--cost显示会话对应成本ccusage /today --cost
--match 关键词筛选标题含关键词的会话ccusage --match "重构"
--sort按指定字段排序(如 cost)ccusage --sort cost
--json输出 JSON 格式,方便脚本处理ccusage /days 7 --json

其中--json是我最推荐重度用户研究的。因为纯看终端列表,你只能做“看”这个动作,但把数据导出成 JSON 后,你可以自己写脚本做每日推送、自动周报、甚至是异常预警——比如某天 token 用量突增,自动给你发个提醒。

3.3 一个完整的工作流示例

我每天下班前会跑这么一条命令:

ccusage /today --cost --sort cost

它会列出今天所有会话,成本最高的排在最前面。看到某条成本异常高的记录,我会当场点进去看看是不是有会话还在后台挂着没关,或者是不是某次任务上下文撑得太长。

每周五我再跑:

ccusage /days 7 --cost --json > ~/daily-notes/ccusage-weekly.json

把这个 JSON 当作原始数据,简单用脚本统计一下本周总成本、按项目路径聚合的成本,手动维护一份周度预算表。如果你的机器上有 crontab,甚至可以做成定时任务,每天自动生成用量快照。

4. 核心原理拆解:ccusage 是怎么算出 token 的

4.1 它的数据源:本地 jsonl 日志

很多人用 ccusage 时有个疑问:它自己并没有发起任何一次 API 请求,为什么能知道 token 用了多少?答案在前面提到过,它读取的是 Claude Code 的本地会话日志,这些 jsonl 文件里每一行是一条消息记录。在这个记录里,Claude Code 会附带模型返回的 usage 信息,结构类似这样:

{ "message": { "usage": { "input_tokens": 1520, "output_tokens": 643, "cache_creation_input_tokens": 0, "cache_read_input_tokens": 892 } } }

这几个字段在 Anthropic API 的官方文档里都有定义:

  • input_tokens:本次请求中输入给模型的 token 数量,包含系统提示词和对话历史。
  • output_tokens:模型本次生成的 token 数量。
  • cache_creation_input_tokens:本次请求中,用于写入/创建 prompt 缓存的 token 数量。
  • cache_read_input_tokens:本次请求中,直接从 prompt 缓存读取命中的 token 数量,这部分费用远低于普通输入。

ccusage 做的事情,就是把你可能已经忽略的这堆记录逐行读出来,把message.usage做累加,再根据模型类型和官方价格表换算成成本,最后在终端里渲染成表格。

4.2 成本计算的逻辑

ccusage 内置了一张模型价格表,会识别 jsonl 记录中的模型名称(比如claude-sonnet-4-20250514claude-opus-4-20250514),然后按对应的单价算成本。

这里我单独提醒一句:不同模型的输入输出单价差异非常大。如果你在同一个会话里切换过模型,成本统计会按每条消息各自的模型来算,不会算错。但如果 ccusage 版本落后于 Claude 新发布的模型,它可能不认识新的模型 ID,这时候成本会显示为 0 或者按默认模型估算,遇到这种情况升级 ccusage 到最新版基本都能解决。

4.3 为什么比聊天窗口里的数字更可靠

不知道你有没有注意过,在 Claude Code 的交互界面里,每次回复下面都会显示一个 token 和耗时统计。那个数字是当下这一轮的用量,但如果你想统计一次完整任务消耗了多少,对话窗口里没有直接汇总。此外,Claude Code 历史上曾经有过一些版本在 UI 统计上把缓存的 token 合并显示,导致用户在主观上低估了成本。

ccusage 因为是基于 jsonl 逐行计算的,所以在“完整”和“可回溯”这两个维度上比 UI 展示更可靠。它统计的是真实落盘的数据。对于要写报销明细、给团队做成本归因的人来说,这个差别很重要。

4.4 我实际验证过它的准确性

为了放心,我做过一次对比测试:开一个新会话,跟 Claude Code 连续对话 10 轮,期间记录界面给到每一轮的 token 数字,结束后手动累加,再和 ccusage 对这个会话的统计做对比。数字基本对得上,误差主要来自服务端和本地记录之间的编码方式差异,但也就在几十个 token 之内,对成本估算没有任何实际影响。

注意:ccusage 统计的是 token 用量,不是额度扣减量。如果你用的订阅套餐,费用不会因为本地统计的数值而改变,最终以官方账户后台为准。但对绝大多数人来说,ccusage 已经足够用来做预算控制和用量监控了。

5. 常见报错与排查技巧实录

这部分我想重点讲一下,因为根据我看到的反馈,很多人在使用 Claude Code 过程中遇到的报错,都被误以为是 ccusage 引起的,其实 ccusage 本身几乎不太会触发认证相关的错误。但为了让大家少走弯路,我把常见的报错整理成了一张速查表,并附上我自己的排查过程。

5.1 报错速查表

报错信息常见原因解决办法
sign-in could not be completed token exchange failed: token endpoint returned登录时 OAuth token 交换失败,通常是网络环境或区域限制检查网络出口区域是否在官方支持范围内,校准系统时间,清理认证缓存后重新登录
token exchange failed: token endpoint returned status 403 forbidden: country官方对部分地区限制访问,当前网络出口区域不受支持确认网络环境是否满足官方要求,切换到官方支持的区域
your access token could not be refreshed. please log out and sign in againaccess token 刷新失败,可能是订阅过期或本地认证缓存损坏执行claude /logout,或手动删除~/.claude/.credentials.json后重新登录
login failed. check api token or gitlab version与 GitLab 相关,和 Claude Code 无关如果你在配置 GitLab 类工具时看到这个报错,去检查 GitLab 的 Access Token 和版本兼容性
已达到输出 token 上限回答被截断单次对话的输出 token 达到模型最大限制拆分子任务,或使用 summary 压缩上下文,或调整max_tokens参数
error code token_exchange_failed认证流程中 token 交换失败,和上面的原因类似和 5.1 第二/第三条相同,重置登录态后重试

5.2 登录态失效问题

我最常遇到的是第二种,也就是区域限制导致的 403。Claude Code 登录时会向认证服务器发起 token 交换请求,如果服务端判定你的请求来源区域不受支持,会直接返回 403。这个过程中最迷惑的地方在于,你第一次登录可能没问题,但过几天 access token 需要 refresh 时,同样的限制又会冒出来,表现形式就是那句your access token could not be refreshed

我试过的有效解决办法是:先确认当前网络环境在官方支持范围内,然后清掉本地认证缓存重新登录一次。具体操作如下:

claude /logout rm -f ~/.claude/.credentials.json claude

重新执行claude命令后,终端会引导你走一遍登录流程,新生成的凭证一般就正常了。

注意:删除.credentials.json会使本机所有 Claude Code 会话的登录状态失效,你需要重新登录,这是安全的,不会影响云端已保存的会话历史。但如果你有多个账号在同一机器上切换,删除前记得先确认当前账号名。

5.3 ccusage 自身可能出现的两个小问题

ccusage 本身的报错不多,但有两个我在使用中遇到过:

一是版本太旧导致 JSON 解析失败。Claude Code 更新后,jsonl 文件里的消息结构偶尔会加点新字段,老版本的 ccusage 读取时可能报错或统计不准。解决办法很简单:npm update -g ccusage

二是并发会话导致日志写入时序问题。如果你同时开多个 Claude Code 会话,某一个会话的日志可能还没 flush 到磁盘,这时候 ccusage 统计到的数字可能偏小。解决办法是等几秒再跑统计,或者用--json输出后重跑一次。

5.4 关于 credits 和 token 换算的常见疑问

很多人问“2500 credits 相当于多少 token”,这个问题没法直接回答,因为 credits 到 token 的兑换比例取决于模型和当前价格体系,而且不同档次的订阅计划计费逻辑也不一样。

但可以给大家一个粗略感受:如果你的订阅套餐附带一定量的 usage allowance,那么开通之后跑两三次ccusage --cost,对比官方后台显示的剩余额度变化,基本就能推算出自己一个请求大概的单价水平。我自己更建议的做法是:不必纠结单个 token 的单价,把它当成一个“总量/总成本”的黑盒,用 ccusage 看相对趋势和异常峰值,这才是统计工具的真正的价值。

6. 进阶玩法:把 ccusage 变成你的预算监控台

6.1 用 Bash 脚本生成每日用量日报

我写了一个简单的脚本,每天 22:00 自动汇总当天用量,并追加到一个 CSV 文件里:

#!/bin/bash cd ~/daily-notes date_str=$(date +%Y-%m-%d) ccusage /today --cost --json > "ccusage-${date_str}.json" # 用 jq 提取总成本 total_cost=$(jq '.total_cost // 0' "ccusage-${date_str}.json") session_count=$(jq '.sessions | length' "ccusage-${date_str}.json") echo "${date_str},${session_count},${total_cost}" >> ccusage-daily.csv

如果你还没装 jq,先装一下,这个小小的命令行 JSON 解析工具在写这种脚本时几乎是必需品。比如在 macOS 上:

brew install jq

这个脚本配合 crontab 每天自动执行,你就拥有了一份专属的 Claude Code 用量日历,月底做复盘时数据全在手边。

6.2 与 cc-switch 配合,实现多账号场景下的成本归因

如果你关注过 Claude Code 生态,应该知道 cc-switch 这个工具,它用来快速切换不同供应商或账号的配置。ccusage 和它其实不冲突,因为 ccusage 读的是日志目录,而 cc-switch 改的是配置文件。我个人的用法是:在切换账号后,用ccusage --json对比切换前后的用量变化,快速确认哪个账号、哪个配置在消耗额度。

6.3 异常用量检测的思路

另外一个进阶玩法是拿 ccusage 的输出来做异常检测。比如你给自己设定规则:单日成本超过 5 美元就算异常。那你完全可以写个脚本,定时调 ccusage 判断是否超过阈值,超过了就发个通知到手机。

daily_cost=$(ccusage /today --cost --json | jq '.total_cost') if (( $(echo "$daily_cost > 5.0" | bc -l) )); then # 触发你自己的通知逻辑 osascript -e 'display notification "今日 Claude Code 成本异常,请检查"' fi

这个能力对做 AI 编码工具落地的小团队特别有用。因为只要有人开着长时间任务、或者写了个死循环让 Agent 持续迭代,成本就可能悄悄飙升。有监控总比月底看账单吓一跳要好。

6.4 个人经验:我如何用它守住预算

最后分享一点个人经验。自从用了 ccusage,我给自己定了三条规矩:

  • 每周五查看一次周报(ccusage /days 7 --cost),把超预算的项目记下来。
  • 每个新任务开始前,先估一个预期的 token 量级,跑完后对比实际值。
  • 如果某个会话成本超过 3 美元,我会主动复盘一下是不是上下文没控制好、缓存没利用上,还是任务拆分有问题。

一段时间下来,我对 Claude Code 的成本感知能力提高了很多,现在基本能预估一个任务大概要花多少钱,而不是每次都凭感觉开干。这种“心里有数”的状态,是我愿意把 ccusage 推荐给所有人的核心原因。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 10:11:23

Python爬虫与pyecharts实战:BOSS直聘数据分析可视化全流程

简介:这是一份基于boss直聘网招聘数据的Python数据分析与可视化期末大作业,适合数据分析初学者、高校学生用于课程设计、毕业设计或项目实战参考。项目围绕职位、城市、公司、薪资、学历、工作经验等字段展开,完成数据清洗、重塑、统计和交互…

作者头像 李华
网站建设 2026/9/8 10:07:04

Ventoy多系统启动盘制作全攻略:原理、实战与排错

之前帮同事维护机房电脑时,最头疼的就是 U 盘里只能放一个系统镜像。每次装完 Windows 再想装 Ubuntu,得先把 U 盘格式化,重新制作启动盘,来回折腾大半天。后来接触了 Ventoy,才发现原来启动盘可以做得这么省心&#x…

作者头像 李华
网站建设 2026/9/8 10:05:33

华为交换机冗余链路VLAN配置实战:MSTP、Eth-Trunk与VRRP详解

就说最近在 eNSP 上练习双核心组网时,不少同学都会遇到一个尴尬的局面:VLAN 划分没问题、Trunk 也放行了,但只要把冗余链路接上去,广播风暴立刻爆发,交换机端口指示灯疯狂闪烁,PC 之间互相丢包,…

作者头像 李华
网站建设 2026/9/8 9:59:06

2026年车家互联技术落地全解析:从MQTT到场景引擎

车家互联这件事,2026年到底能做到什么程度? 在智能汽车圈子里泡久了,你会发现一个特别明显的趋势:前几年大家都在卷座舱大屏、卷辅助驾驶、卷算力芯片,但2025年之后,“车家互联”这个词的出现频率突然高了起…

作者头像 李华
网站建设 2026/9/8 9:58:03

STM32开发环境重构:VSCode + GCC + OpenOCD替代CubeIDE的完整指南

开头一段话先放这里。我大概是在用了半年 CubeIDE 之后,才彻底把主力编辑器切到 VSCode 的。先明确一个观点:我不是建议谁“抛弃 CubeIDE”,恰恰相反,现在这套开发环境里 CubeIDE 依然是地基,只不过我只让它干一件它最…

作者头像 李华
网站建设 2026/9/8 9:57:58

固件、配置与设备模型版本分离:IoT版本治理实战指南

1. 一次把版本混在一起引发的升级事故 1.1 事故还原 我见过最荒唐的一次线上故障,不是设备刷固件刷挂了,而是团队把 IoT 设备的固件版本、配置版本、设备模型版本全塞进了同一个 version 字段里。OTA 平台只认这个字段,结果一批网关同时拿…

作者头像 李华