Claude token 是什么?Claude Code 如何计算 token
Claude token 通常只有几个字符。了解为什么一次 Claude Code 交互可能计费 80,000 个 token,以及 API 密钥闲置 5 分钟后,下一次交互成本可能变为 5 倍。
Claude 中的 token 是什么?
token 是 Claude 读取和生成文本时使用的单位,相当于单词的一部分。在 Claude Opus 4.7 之前的模型中,Anthropic 自己的术语表将其定义为约 3.5 个英文字符。当前 tokenizer 中的比例更接近 2.5 个字符,因为 Anthropic 将 1M 个 token 约等同于 2.5M 个字符。无论采用哪种估算,计入空格和标点后,每个单词对应的 token 数都会明显超过 1 个,因此 1,000 个单词的正文通常会超过 1,300 个 token。代码的每行 token 数更高:大括号、运算符、下划线和缩进会使每个字符拆分成更多 token,英文则没有这么高的比例。几百行的源文件通常就有几千个 token。代理决定读取一个 2,000 行的文件时,在写入任何新代码之前,就可能已经消耗五位数的 token。
tokenizer 有两个容易引起误解的地方。第一,它们与模型相关。截至 2026 年 10 月,Claude Opus 4.7 及其之后的所有模型,包括当前的 Fable 5.1、Opus 5.5、Sonnet 5.5 和 Haiku 5.5,都使用更新的 tokenizer。对于相同文本,这种 tokenizer 生成的 token 数通常比 Haiku 4.5 等较早的 Claude 模型多约 30%(具体增幅取决于内容)。因此,即使每个 token 的价格没有随之上涨,按 token 制定的预算也会发生变化。第二,tiktoken 是每篇博客文章都会使用的库,但它是 OpenAI 的 tokenizer,不是 Claude 的 tokenizer,因此其统计结果不会与 Anthropic 的计费结果一致。唯一可信的统计方式是 count_tokens 端点,下面将介绍该端点。
代理编码会话的费用构成
每笔 Claude 账单,无论是 API 账单还是订阅限额,主要都由一个计量项决定:输入 token 和输出 token。少数 API 工具会单独计费。例如,截至 2026 年 10 月,网页搜索的费用为每 1,000 次搜索 $10,此外还要为搜索结果产生的 token 付费。但在编码会话中,真正持续变化的是 token 计量项。定价页面看起来很简单:每百万输入 token 收取一定费用,每百万输出 token 收取另一项费用。页面没有说明的是,在代理式编码会话中,输入侧的消耗远高于直觉预期,因为每一轮都会重新发送完整对话。我从事按量计费基础设施销售已有十五年,而 token 是我见过的第一个大多数客户确实无法说明其消耗来源的计量项。本节将说明如何读取这个计量项:代理式会话中的输入和输出分别包括什么,为什么重复发送循环如此昂贵,提示缓存如何改变计算方式,以及哪些调整确实能改变最终数字。
所有内容都是输入:计费系统实际统计的内容
人们通常以为,付费的是 Claude 编写的代码。在代理会话中,这只是很小的一项开销。输入 token 的单价更低,但数量大得多,主要包括:
- 系统提示词。 Claude Code 自身的运行框架指令,以及您的
CLAUDE.md和记忆文件。它们在会话开始时加载,之后的每个请求都会携带这些内容。 - 工具定义。 代理可以调用的每个工具架构。您连接的每个 MCP 服务器都会增加这项固定开销。不过,Claude Code 现在默认延迟加载完整的 MCP 工具定义,因此在首次使用某个工具前,上下文中只保留工具名称。这会降低开销,但不会消除开销。
- 代理读取的每个文件。 对源文件执行
Read会将整个文件载入上下文,而且内容会一直保留在上下文中。 - 每个工具结果。 测试运行结果、grep 输出、终端输出、构建日志,所有内容都会作为输入 token 返回。失败的测试套件如果输出 8,000 行,就相当于一本小书。截至 2026 年 10 月,Claude Code 默认会内联传递大约 30,000 个字符的命令输出。超过此长度的输出会以保存文件的形式返回,并附带最多 2,000 个字符的预览。但所有未超过此上限的输出,以及之后对保存文件的每次读取,都会完整计费。
- 到目前为止的完整对话,并在每轮请求中重新发送。 这一点值得单独说明。
没人为重发付费
Claude API 是无状态的。它不会在请求之间记住会话,任何内容都不会记住。因此在第 2 轮中,客户端会发送第 1 轮的内容、Claude 的响应以及您的新消息。在第 50 轮中,它会重新发送第 1 到第 49 轮中仍保留在上下文里的内容,包括尚未被压缩的每个文件读取结果、工具结果和差异,再加上第 50 轮的内容。(压缩会用摘要替换旧历史记录;子代理读取的文件仍保留在其自身的上下文中,只有其结果会返回。)模型每次都会重新读取整个保留的对话记录,而每个被重新读取的 token 都会按输入计费。
结果是:每轮成本大致会随会话长度线性增长,而整个会话的总成本大致呈二次增长。第 3 轮只需半美分的消息,到第 60 轮可能要贵 20 倍,即使问题仍然只有一行,因为它携带了 60 轮内容。这是解释大多数“为什么账单这么高”工单的关键事实。这并不是 Claude 的特殊问题;所有具有状态感的 LLM 产品,底层都是无状态 API 加上重发循环。
输出:您看到的内容,以及未显示的思考
输出 token 的费用更高。在当前产品线中,输出费率是输入费率的 5 倍(Fable 5.1 为 $10/$50,Opus 5.5 为 $4/$20,Sonnet 5.5 为 $2/$10,Haiku 5.5 为 $0.10/$0.50;截至 October 2026,适用于不超过 100,000 个 token 的提示)。输出包括 Claude 生成的文本和代码,以及思考 token:模型在回答前执行的内部推理。这里有两点需要注意。思考 token 按输出费率计费,并计入 max_tokens。如果 API 响应因 stop_reason: "max_tokens" 终止,而回答被截断,通常表示思考过程在生成回答前就耗尽了预算。当前模型可能完全不显示推理摘要。API 默认会在 Fable 5.1、Opus 5.5、Sonnet 5.5、Haiku 5.5,以及更早的 Opus 4.7 和更早模型中省略该摘要,但思考过程仍然执行,也仍然计费。不可见不等于免费。
Claude Code 默认启用扩展思考,因为它能显著改善多步骤任务的效果,默认预算每次请求可达到数万个 token。对于较简单的任务,您可以降低思考量:使用 /effort 或在 /model 中降低 effort level;在支持此功能的模型上,也可以在 /config 中关闭思考。截至 October 2026,Claude Code 无法在 Opus 5.5、Sonnet 5.5、Haiku 5.5 或 Fable 系列模型上关闭思考,因此只能调整 effort。API 在其中两个模型上提供了更多控制。Haiku 5.5 在 high 或更低 effort 下接受 thinking: {"type": "disabled"},较早的 Opus 5 也是如此;较早的 Sonnet 5 则在所有 effort level(包括 xhigh 和 max)下都接受该参数。Sonnet 5.5 拒绝 "disabled",改用 thinking: {"type": "between_tools"}。在 low、medium 或 high effort 下,该参数会减少预先执行的思考,因此不使用工具的请求会直接生成回答,不先执行思考。只有 Opus 5.5 和 Fable 系列模型会对您发送的任何内容保留思考过程。这是真正的成本控制选项,不是心理作用。
提示词缓存会改写成本计算
提示词缓存是重复发送循环不会让所有人破产的原因。API 可以缓存提示词、系统提示词、工具定义和对话历史中稳定的前缀,并在下一次请求中以很低的价格提供这些内容。截至 October 2026,费率倍率如下:缓存写入按基础输入费率的 1.25× 计费(1 小时版本为 2×);缓存读取在大多数模型上为 0.1×,Claude Opus 5.5 和 Claude Sonnet 5.5 上为 0.05×,Claude Fable 5.1 上为 0.025×。写入需要支付额外费用;读取在大多数模型上可享受 90% 折扣,在 Opus 5.5 和 Sonnet 5.5 上为 95%,在 Fable 5.1 上为 97.5%。单次读取节省的费用就已经足以抵消 5 分钟缓存写入的额外费用。
Claude Code 会自动管理缓存。在会话运行正常时,这次巨大的重复发送几乎全部来自缓存。但缓存会在一段时间无活动后过期。截至 October 2026,使用订阅且未超出套餐包含用量时,Claude Code 会为主对话提供1 小时缓存;使用 API key、云服务商,或开始消耗用量额度后,缓存有效期为最近一次使用后的5 分钟(此时可以通过 promptCacheTtl 设置请求 1 小时缓存,但写入费率为 2×)。使用 5 分钟缓存时,如果离开去喝咖啡且回来得较晚,发送消息时缓存已经过期,之前累积的整个前缀都会按 1.25× 重新写入,而不是按缓存读取费率读取。在 150K-token 会话中,这次缓存未命中会将全部 150K tokens 按 1.25× 写入;如果缓存仍然有效,本应按 0.1× 读取,因此前缀成本相差 12.5 倍(Opus 5.5 和 Sonnet 5.5 上为 25 倍,Fable 5.1 上为 50 倍)。这个反直觉的结果值得记住:先闲置再恢复的工作节奏可能比连续工作更贵,因为每次闲置时间超过 TTL,下一轮都会从低价读取变成高价重新写入。应按阶段集中工作;使用 5 分钟缓存时,不要每隔十分钟发送一条消息,逐步处理一个很大的会话。
如果你从 自己的 VPS 应用调用 API,这些操作不会自动发生:你需要通过 cache_control 启用缓存。最常见的自我破坏方式,是将时间戳或请求 ID 插入系统提示词,使每次请求的前缀字节都发生变化,从而静默禁用缓存。判断依据是:外观相同的请求中,usage.cache_read_input_tokens 始终为零。
公式与完整示例
不要相信“每个会话固定花费 $X”这种说法。会话成本可能相差两个数量级。真正适用的是下面这个公式:
turn cost = (uncached input x base input price)
+ (cache writes x 1.25 x base input price)
+ (cache reads x read multiplier x base input price)
+ (output incl. thinking x output price)
read multiplier = 0.10 on most models, 0.05 on Opus 5.5 and Sonnet 5.5, 0.025 on Fable 5.1
session cost = sum over all turns以下示例使用 Claude Opus 4.8。该模型目前已属于旧型号,但仍可用;截至 October 2026,其价格仍为每百万输入 token $5、每百万输出 token $25。某个会话中途的一轮请求包含 80,000 个累积上下文 token:其中 75,000 个从缓存读取,3,000 个新写入缓存,2,000 个为未缓存的新输入,输出为 1,500 个 token,其中包括思考过程。
- 缓存读取:75,000 × $0.50/M = $0.0375
- 缓存写入:3,000 × $6.25/M = $0.019
- 未缓存输入:2,000 × $5/M = $0.010
- 输出:1,500 × $25/M = $0.0375
这一轮约 $0.10;进行 50 轮类似请求,成本约为 $5。现在看缓存过期后的同一轮请求:78,000 个可缓存 token 需要按 $6.25/M 重新写入缓存,再加上 2,000 个按 $5/M 计费的未缓存 token,在计算输出前就约为 $0.50,约为缓存有效时整轮成本的 5 倍,但完成的是相同工作。这一差额用一个数字就说明了缓存的全部价值。对于当前的 Claude Opus 5.5(价格为 $4/$20,缓存读取价格为标准价格的 0.05×),同一轮缓存有效时约为 $0.07(读取 $0.015、写入 $0.015、未缓存输入 $0.008、输出 $0.030);缓存失效时,在计算输出前为 $0.40,接近缓存有效时的 6 倍。这 4 行计算也是比较不同供应商的唯一可靠方法,因为标价完全忽略缓存读取和思考过程;在 3 个真实作业中运行这些计算,可以看出 Claude 账单高于还是低于 OpenAI 账单。
如果你想了解的是计费单位本身,而不是单轮请求的成本,了解 1,000,000 个 token 相当于多少页面、文件和费用可以将同一套计算提升一个层级。以下数据适合用于校准,不适合用于预测:截至 October 2026,Anthropic 公布的企业 Claude Code 部署数据表明,平均每位开发者每个活跃日约 $13,每月 $150 至 $250;90% 的用户每天花费低于 $30。实际成本取决于模型选择、会话管理和代码库规模,这正是下面这些控制因素重要的原因。
查看您自己的用量
在 Claude Code 中,命令是 /usage(/cost 仍然有效,它是一个别名)。顶部的 Session 区块显示当前会话的 token 统计信息和本地计算的费用估算;在订阅计划中,同一界面还会显示计划限额进度条,并将近期用量归因到 skills、subagents、plugins 和各个 MCP server。近期版本的 Session 区块还包含 Prompt cache (main) 行,显示使用缓存提供的输入占比、未命中次数,以及当前缓存是否处于热状态。对于 API 账户,Claude Console 中的 usage 页面才是权威计费来源,CLI 中的数值只是估算值。/context 会绘制彩色网格,显示 哪些内容占用了上下文窗口,包括 system prompt、tools、MCP definitions、files 和 history。这是发现膨胀的 CLAUDE.md 或输出过多的 MCP server 的最快方式;在全屏模式下,它会折叠逐项明细,传入 all 可展开明细。
通过 API 时,每个响应都会准确说明发生了什么:
response = client.messages.create(model="claude-sonnet-5-5", max_tokens=2048,
messages=messages)
u = response.usage
total_prompt = u.input_tokens + u.cache_creation_input_tokens + u.cache_read_input_tokens
print(f"uncached={u.input_tokens} written={u.cache_creation_input_tokens} "
f"read={u.cache_read_input_tokens} output={u.output_tokens}")请注意,input_tokens 仅表示未缓存的剩余部分,真实提示大小是三个输入字段之和。一个运行了 1 小时、显示 input_tokens: 4000 的 agent 并不便宜;另外 200,000 个 token 是通过缓存提供的。发送请求前,可以使用 token-counting endpoint 进行估算。该 endpoint 可免费调用,使用独立的速率限制,并根据您指定的模型使用相应 tokenizer 进行计数(请将结果视为接近实际值的估算;计费以真实请求为准):
count = client.messages.count_tokens(model="claude-sonnet-5-5",
messages=[{"role": "user", "content": big_file}])
print(count.input_tokens)基于上述原因,绝不要 tiktoken。
订阅计划与按量付费
本指南中的操作机制完全相同,只有计费方式不同。使用 API key 时,Anthropic 按公开费率按 token 进行按量计费,上文的每个数字都代表实际费用。计费开始得比大多数人预期更早,因为没有可兜底的免费层级,只有注册时的一小笔额度,以及少数不产生费用的端点;新 API 账户在绑定银行卡前实际获得的内容就是这些。自 October 7, 2026 起,例外情况是 Max 或 Team 订阅:这些计划现在为您在 Claude Platform 上运行的应用和 agent 提供每月 API 额度。Max 5x 每月提供 $100,Max 20x 每月提供 $200;Team 方面,Standard seat 每月提供 $20,Premium seat 每月提供 $100,额度共享且上限为 $500。您需要关联 Console organization 才能领取这些额度。未使用的额度会在每个计费周期结束时过期,且不能用于交互式 Claude Code。
使用 Claude 订阅(Pro、Max、Team,以及旧版按 seat 计费的 Enterprise 计划)时,Claude Code 的用量改为从计划包含的额度中扣除。截至 October 2026,该额度由一个滚动的五小时会话窗口和一个每周窗口组成,在不同模型之间以及 claude.ai chat 之间共享。此处的 /usage 美元数值仅供参考,不代表账单金额。 截至 October 2026,还有两种例外情况:当前按用量计费的 Enterprise seat 完全不包含用量额度,因此每个 token 都按标准 API 费率计费;Fable 模型不计入 Pro、standard Team seat 或 standard legacy Enterprise seat 的额度,在这些计划中会使用按量付费的用量额度。
用尽某个窗口后,您会看到 "You've hit your session limit" 或 "You've hit your weekly limit",并显示重置时间。使用 /model 切换模型不会恢复访问权限,因为这些窗口在不同模型之间共享。这些窗口跟随账户,而不是跟随您当前使用的客户端。如果您还在了解哪些功能可在 Linux 上原生运行,以及每个界面由哪个计划覆盖,这一点尤其需要注意。
您实际用尽的是两个窗口中的哪一个,会决定需要等待多长时间,以及等待期间适合采取哪些措施。因此,了解在任务进行到一半时达到限制后的可选操作很有帮助。计划可以选择启用用量额度,并通过 /usage-credits 管理,用于购买超过上限的用量。
我不会在这里列出计划额度,因为它们是整个主题中变化最频繁的数字。请查看 claude.com/pricing 和您自己的 /usage 条形图。订阅用户仍然需要关注 token 的使用机制。低效的会话会像消耗费用一样消耗您的窗口额度。有关订阅计划,请参阅哪个 Claude 计划适合您的使用方式。
真正有效的杠杆
- 限定代理读取的范围。 “修复
auth.py中的验证错误”只需读取一个文件;“改进这个代码库”则会读取40个文件。保持CLAUDE.md精简,因为它会加载到每个会话中,只保留必要内容,并将特定工作流的说明移到按需加载的技能中。 - 清晰且紧凑。 在不相关的任务之间,
/clear会使过时的上下文在后续每条消息中重复发送并再次计费。在一个较长的任务中,/compact Focus on the failing tests and the diff会压缩历史记录,避免上下文开销按平方增长。 - 选择合适规模的模型。 Sonnet 可处理大多数编码任务截至2026年10月的价格为每百万 token $2/$10,目前已是标准价格,不再是促销价:Sonnet 5.5 的价格为 $2/$10;原定于9月1日上调至 $3/$15 的 Sonnet 5 取消了涨价,仍为 $2/$10。相比之下,Opus 5.5 的价格为 $4/$20;Haiku 5.5 的价格为 $0.10/$0.50(提示不超过100,000个 token 时,超过该数量后为 $0.50/$2.50),适合日志分类等机械性的子代理任务。Fable 5.1 的价格则为 $10/$50,与 Fable 5 相同;其输入和输出价格都是 Opus 5.5 的2.5倍。因此,在将其用于常规工作前,应先了解哪些任务确实值得这一价格。
/model可在会话中途切换模型。 - 预先过滤冗长输出。 在 Claude 看到测试结果前,使用一个 hook 将测试运行结果过滤为仅包含失败项,可将20,000个 token 的工具结果压缩为300个 token;此操作还会应用于该轮消息未来每次重新发送时。
- 批量处理非交互任务。 对于自有 API 流水线中的分类、批量审查和夜间任务,Batches API 可异步交付,并以半价运行相同的模型。
- 注意缓存时限。 连续工作,不要频繁中断。在 VPS 上通过 tmux 分离的 Claude Code 会话在空闲时不产生费用;只有运行一轮交互时才会消耗 token。但空闲时间超过缓存 TTL 后,热缓存会失效,下一轮交互需要重新支付上下文写入成本。
FAQ
编程会话在 Claude Code 中使用多少令牌?
没有固定数量。文件和历史记录累积后,单个会话中途的请求通常会包含数万个提示令牌,而完整工作会话可能达到数百万令牌。其中大多数会通过缓存提供,费用通常是基础费率的十分之一或更低,具体取决于模型。作为参考,截至 2026 年 10 月,Anthropic 发布的企业数据表明,每位开发者每天的平均活跃费用约为 $13,90% 的用户低于 $30。在自己的会话中运行 /usage;监控 5 分钟比参考任何已发布的平均值更有用。
即使我看不到思考令牌,也需要付费吗?
需要。思考令牌按输出令牌计费,使用较高的费率,并计入 max_tokens。当前模型即使界面不显示推理摘要,也会对这些令牌计费。如果响应在可见答案完成前以 stop_reason: "max_tokens" 截断,通常说明思考过程耗尽了预算。在 Claude Code 中,对于不需要深度推理的任务,可以使用 /effort 降低工作强度级别。
为什么 Claude Code 的长会话会导致每条消息的费用越来越高?
因为 API 是无状态的:每次交互都会重新发送仍在上下文中的对话、读取的每个文件、工具结果,以及尚未被压缩移除的历史交互,并按输入计费。因此,第 50 轮会携带第 1 到第 49 轮的内容。大多数模型会通过提示缓存提供重复前缀,价格是基础输入费率的十分之一(Opus 5.5 和 Sonnet 5.5 为 5%,Fable 5.1 为 2.5%),但前缀本身会持续增长。如果空闲时间超过缓存 TTL,下一轮就会变成按全价重新写入。/compact 可缩短历史记录;/clear 会重置历史记录。
如何查看 Claude 令牌用量和费用?
在 Claude Code 中,/usage 会显示会话令牌统计、本地费用估算,以及订阅计划的限额进度条(/cost 是其别名);/context 会显示哪些内容占用了上下文窗口。要查看权威的 API 账单,请使用 Claude Console 中的用量页面。在自己的代码中读取 response.usage;将 input_tokens、cache_creation_input_tokens 和 cache_read_input_tokens 相加即可得到真实的提示大小。需要提前估算时,使用 count_tokens endpoint,不要使用 tiktoken。