Claude API token 计数(count tokens)怎么用:发请求前先量,再估算费用

发请求前想知道会花多少 token?官方有免费的 /v1/messages/count_tokens 接口,支持系统提示、工具、图片和 PDF。本文给 Python 和 TypeScript 示例,讲哪些输入不支持、为什么只是估算、新分词器多约 30%、各档位每分钟请求数,以及怎么从返回的 usage 里核对实际用量。

NNathaniel bigo··原创首发·AI 辅助撰写
9 分钟读完
资料核对于 2026-11-05 · 依据官方文档与公开资料整理 其他 账号
本文根据 Claude 官方《Token counting》整理,资料核对于 2026-11-05。配图为本站整理的示意图,不是界面截图。代码里的模型名取自官方当天示例,请以官方模型页为准。本站(bigolab.com)不是 Anthropic 官方网站。API 是按用量计费的独立服务,与 Claude 订阅分开计算,Key 的获取见 /guides/claude-api-key-console。

适用于谁

  • 想在正式调用前估算一次请求、一批文件会花多少钱的开发者;
  • 提示词越写越长,担心塞不进上下文窗口的人;
  • 想按长度把请求分给不同模型,做“路由”的人;
  • 从旧模型迁移到新模型,发现 token 数变了的人。

结论先说

  1. 官方提供免费的计数接口 /v1/messages/count_tokens,参数和创建消息几乎一样,返回 input_tokens。
  2. 它只数输入,数的是你发出去会占多少 token,不会真的生成回答。
  3. 结果是估算,和实际用量可能有小幅差异;系统自动添加的 token 不向你收费。
  4. 有些输入不能数:服务器工具、MCP 连接器、url 或 file 来源的图片和 PDF。图片和 PDF 要用 base64。
  5. 新模型的分词器不同:Claude 4.7 及之后的模型,同样的文字大约多出 30% 的 token,换模型要重新数。

计数接口能数什么、不能数什么

图:本站根据 Claude 官方《Token counting》 整理的示意图

一、最小示例

Python:

python
import anthropic

client = anthropic.Anthropic()

count = client.messages.count_tokens(
    model="claude-opus-5-5",  # 以官方模型页当天为准
    system="你是一位科学家",
    messages=[{"role": "user", "content": "你好,Claude"}],
)

print(count.input_tokens)

TypeScript:

typescript
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic();

const count = await client.messages.countTokens({
  model: "claude-opus-5-5",
  system: "你是一位科学家",
  messages: [{ role: "user", content: "你好,Claude" }],
});

console.log(count.input_tokens);

响应形如 { "input_tokens": 14 }。注意:请求里要写 model,因为不同模型的分词器不一样,数出来的数不同。

二、带工具、图片、PDF 的计数

计数接口接受与创建消息相同的结构,所以可以把你真正要发的请求原样拿来数:

  • 带工具:把 tools 一起传进去,工具定义也占 token。官方示例里一个 get_weather 工具加一句提问,计数是几百个 token,远多于单独一句话;
  • 带图片:用 base64 来源的 image 块,规则见 /guides/claude-api-image-input;
  • 带 PDF:用 base64 来源的 document 块,规则见 /guides/claude-api-pdf-support;
  • 带思考:官方写明当前轮的思考计入输入 token;之前轮次的思考块是否计入,取决于模型是保留全部历史思考,还是只保留最近一轮。

工具的写法见 /guides/claude-tool-use-basics。

三、哪些输入不能数

官方列出,下面这些输入对 Messages API 是合法的,但计数接口会返回 invalid_request_error:

  • 服务器工具,比如网页搜索、网页抓取、代码执行、工具搜索(顾问工具除外);
  • MCP 连接器;
  • 来源为 url 或 file 的 image 或 document 块。

做法:图片和 PDF 先下载读成 base64 再数;用了服务器工具或 MCP 服务器的请求,实际用量只能在真实请求返回的 usage 里看。

四、为什么是估算,换模型为什么不一样

官方明确说这是估算值:有时实际输入 token 与计数相差很少。计数可能包含 Anthropic 为系统优化自动添加的 token,但这部分不向你收费,账单只算你自己的内容。

另一个容易踩的地方:Claude 4.7 及之后的模型、以及 Fable 和 Mythos 系列使用新分词器,同样的文字大约多出 30% 的 token,具体看内容类型。官方因此要求,从旧模型迁移时,不要拿旧模型的计数去估新模型的费用或上下文占用,而是用要用的那个 model 重新数一遍。想知道差别有多大,就把同一份请求用旧模型和新模型各数一次,对比两个 input_tokens。

五、限额:免费,但有每分钟请求数

计数接口的限额与规则

图:本站根据 Claude 官方《Token counting》 整理的示意图

官方写明计数接口免费,但受每分钟请求数限制,按你的用量档位:

档位每分钟请求数
Start5,000
Build10,000
Scale20,000

计数和创建消息的限额各算各的,互不占用。需要更高限额,官方说可以在 Claude Console 的限额(Rate limits)页面用“Request tier increase”申请提升档位;限流报错 429 的排查见 /guides/claude-api-error-429-rate-limit。还有一点:计数不使用提示词缓存,即使传了 cache_control,缓存也只在真正创建消息时才发生,所以它数出来的是“不命中缓存”的输入量,缓存的省钱原理见 /guides/claude-prompt-caching。

六、发完请求后,用 usage 核对

每次真正的调用,响应里都有 usage,这是账单的依据。TypeScript SDK 页的示例输出是 { input_tokens: 25, output_tokens: 13 }。用了提示词缓存时,还会多出缓存写入和缓存读取的字段。开启思考时,usage.output_tokens_details.thinking_tokens 会告诉你输出里有多少是思考(流式时这个明细只出现在最后一个 message_delta 事件里,事件顺序见 /guides/claude-api-streaming)。

七、一个估算费用的小函数

下面是本站写的示意,把官方价格页当天的单价填进去(单位通常是每百万 token 多少钱,以官方为准):

python
def estimate_cost(input_tokens, expected_output_tokens, in_price_per_mtok, out_price_per_mtok):
    return (input_tokens * in_price_per_mtok + expected_output_tokens * out_price_per_mtok) / 1_000_000

count = client.messages.count_tokens(model="claude-opus-5-5", messages=[...])
# 单价请自行从官方价格页填写,这里不写具体数字
# cost = estimate_cost(count.input_tokens, 800, 单价_输入, 单价_输出)

输出 token 无法事先数出来,只能按你预期的回答长度和 max_tokens 来估一个范围。批量请求可以按官方的批量折扣再估一次,见 /guides/claude-api-message-batches。

常见问题

Q:计数接口会产生费用吗?

官方写明免费,受每分钟请求数限制。

Q:数出来的和账单不一样?

这是估算,加上系统添加的 token 不收费、缓存命中会改变实际计费,所以会有差别;以真实请求返回的 usage 为准。

Q:换了新模型,token 数怎么变多了?

Claude 4.7 及之后的模型分词器不同,同样内容大约多约 30%,需要用新模型重新数。

Q:想数带网页搜索工具的请求?

计数接口不支持服务器工具,只能发真实请求后看 usage。

参考资料

  • Claude 官方:Token counting — https://platform.claude.com/docs/en/build-with-claude/token-counting
  • Claude 官方:TypeScript SDK — https://platform.claude.com/docs/en/cli-sdks-libraries/sdks/typescript
  • Claude 官方:Extended thinking — https://platform.claude.com/docs/en/build-with-claude/extended-thinking

Nathaniel 的更多内容

  1. 01

    Claude Code 处理大仓库:怎么让它只看需要的目录(子目录 CLAUDE.md、claudeMdExcludes、deny 规则)

    仓库太大,Claude Code 总在读无关文件、读进别的包的规则?本文按官方大仓库指南讲:从哪个目录启动、子目录 CLAUDE.md、claudeMdExcludes、Read 的 deny 规则、worktree.sparsePaths、additionalDirectories,以及一份合并后的配置示例。

    Claude0
  2. 02

    Claude Code 在 CI 里跑:从本机 claude -p 到 GitHub Actions 的完整例子(自动审 PR、控成本)

    一条线走完 Claude Code 的 CI 用法:先在本机用 claude --bare -p 配 --json-schema 跑通,再写进 GitHub Actions 用 claude-code-action@v1 自动审 PR,最后加上 --max-turns、超时、并发限制来控成本,并附上常见故障的排查顺序。

    Claude0
  3. 03

    Claude Code 自定义 subagent 实例:测试员、调试员、只读调研员、只读数据库员怎么写

    四个可直接改的 subagent 实例:跑测试的 test-runner、找根因的 debugger、只读调研员、用 PreToolUse hook 限成只读 SQL 的 db-reader;讲 tools、disallowedTools、model、maxTurns 怎么配,怎么点名调用。

    Claude0
  4. 04

    Claude Code 的 CLAUDE.md 模板:前端、后端、数据分析各一份,附拆分与自检方法

    直接拿去改的三份 CLAUDE.md 模板(前端、后端、数据分析),每份都控制在官方建议的 200 行以内;再讲怎么用 .claude/rules 的 paths 拆出专属规则、用 @ 导入长文档,以及用 /context all 和 /doctor prompt-audit 检查是否生效。

    Claude0
  5. 05

    Claude Code 自己写一个插件并发布到 marketplace:plugin.json、marketplace.json、validate 到团队安装的完整流程

    想把自己写的 Skill、Hook 打包给团队用?按 Claude Code 官方 Plugins 文档,从目录结构、plugin.json、claude plugin validate,到写 marketplace.json、推到 Git、让同事一条命令安装,再到版本更新,走完一遍完整流程。

    Claude0
  6. 06

    Claude Code 写一个会自动触发的 Skill:从需求到触发,用 description、when_to_use 和 paths 控制它什么时候出场

    写好的 Skill 总是不触发,或者什么都触发?本文按 Claude Code 官方「Extend Claude with skills」走一遍完整实例:把「改数据库迁移前先检查」写成一个会自动出场的 Skill,包含 description、when_to_use、paths、附带脚本、触发测试和评估。

    Claude0

同产品的其他教程

  1. 01

    Claude Code 配 Sentry MCP 排查线上报错:添加命令、浏览器授权、贴 issue 链接修 bug 和插件子智能体

    线上报错只能手动复制堆栈给 Claude Code?Sentry 官方提供 MCP 服务,可以让它直接读 issue、堆栈和 trace。本文按 Claude Code 官方 MCP 文档和 Sentry MCP 官方说明,讲添加命令、/mcp 授权、典型排查流程、插件方式和自托管注意事项。

    Claude0
  2. 02

    Claude Code 配 Context7 MCP 查最新文档:两种安装方式、use context7 怎么写、指定库和版本

    Claude Code 写出来的代码用了旧版 API?Context7 是一个把库的最新文档喂给编程助手的 MCP 服务。本文按 Context7 官方仓库和文档,讲两种安装方式、在 Claude Code 里的添加命令、use context7 与 library ID 的写法,以及使用时的注意事项。

    Claude0
  3. 03

    Claude API 用量层级与速率限制:Evaluation / Start / Build / Scale 怎么分、月度花费上限、自设上限和怎么申请提额

    Claude API 的限额到底按什么算?按官方《Rate limits》讲清用量层级、RPM / ITPM / OTPM、缓存读取为何不占 ITPM、各层级月度花费上限、自设花费上限的 400、工作区限额、响应头,以及在 Console 里 Request tier increase 提额。

    Claude0
  4. 04

    Claude API 模型 ID 怎么写、怎么查可用模型:dateless 命名、别名区别、Models API 的 lifecycle 和 capabilities

    model 参数该填什么?按官方《Models overview》《Model IDs and versioning》《List Models》讲清 Claude 模型 ID 的格式、4.6 之前带日期与之后不带日期的区别、别名是什么,以及用 GET /v1/models 查可用模型、生命周期和能力字段。

    Claude0
  5. 05

    Claude API 代码执行工具(code execution)怎么用:tools 写法、上传文件分析、取回生成文件、容器限制和计费

    想让 Claude API 真的跑代码做数据分析、生成图表和文件?按官方《Code execution tool》讲清三个工具版本、最小请求、上传 CSV 分析、$OUTPUT_DIR 取回文件、容器内存与联网限制、错误码、容器复用和计费规则。

    Claude0
  6. 06

    Claude API 联网搜索工具(web search tool)怎么用:tools 写法、max_uses、域名过滤、引用字段和计费

    想让 Claude API 回答带最新信息?按官方《Web search tool》讲清 web_search 工具的三个版本、请求写法、max_uses、域名过滤、引用字段、错误码和计费,附排查表。

    Claude0

0 条评论

登录 后参与评论

还没有评论,来抢沙发~