# AI 里的 token 是什么，模型又怎样计算它？

> token 是语言模型读写文字时用的单位，可能是一个完整的词、词的一部分、单个字符，也可能是一个字节。上下文窗口和费用都按 token 计，同一段文字切成多少 token，要看模型，也要看语言。按 OpenAI 的经验，英文大约每 4 个字符算 1 个 token。

Mindket 编辑部 · 发布于 2026-10-10 · 更新于 2026-11-03 · https://mindket.com/cn/blog/what-are-tokens-in-ai

## 要点

- 做预算之前，先拿你要用的模型，数一遍真实的请求。
- 每次请求的工具列表保持不变，否则提示缓存就得从头再来。
- 话题一换就开新会话，用不上的技能和 MCP 服务器也关掉。

## token 不是词，而是一段段文字

给 Claude 一句英文系统提示（意思是“你是一位科学家”），再发一条英文消息（意思是“你好，Claude”）。Anthropic 的 [token 计数文档](https://platform.claude.com/docs/en/build-with-claude/token-counting)给出的结果是 14 个输入 token，而这个请求只有 6 个英文单词。

模型看到文字之前，分词器（tokenizer）先把它切成一个个 token，也就是[语言模型处理的最小单位](https://platform.claude.com/docs/en/about-claude/glossary)。常见的短词通常一个词就是一个 token。英文里一个词的第一个 token，[一般带着它前面的空格](https://developers.openai.com/api/docs/concepts)。

英文那条估算比例，到中文或德文就不管用了，英文里各家也不一样。最新的 Claude 模型换了新的分词器，同样的文字，切出来的 token 比之前的 Claude 模型多约 30%。

| 模型 | 大约每个 token 对应 | 出处 |
| --- | --- | --- |
| OpenAI 的模型 | 4 个字符，或 0.75 个英文单词 | OpenAI API 概念页 |
| Claude 4.7 之前的模型 | 3.5 个英文字符 | Anthropic 术语表 |
| Claude 4.7 及之后的模型 | 同样的文字比旧模型多出约 30% 的 token | Anthropic 术语表和 token 计数文档 |

## 发送之前怎样数 token

这个数出自 Anthropic 的 [token 计数接口](https://platform.claude.com/docs/en/build-with-claude/token-counting)。它只告诉你这个请求会用掉多少输入 token，请求并不会真的发给模型。这个数是估算值，和实际请求可能有少许出入。Anthropic 为系统优化自动加入的 token 也可能算在里面，这部分不计费。Anthropic 写明，数 token 本身免费。它有单独的每分钟请求数上限，按你的使用等级设定，和创建消息的上限分开，不占发消息的额度。

````bash
curl https://api.anthropic.com/v1/messages/count_tokens \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "content-type: application/json" \
    -H "anthropic-version: 2023-06-01" \
    -d '{
      "model": "claude-opus-5-5",
      "system": "You are a scientist",
      "messages": [{
        "role": "user",
        "content": "Hello, Claude"
      }]
    }'
````

1. 按真正要发送的样子组好请求：模型 ID、系统提示、消息，以及全部工具定义。
2. 把它发到 `/v1/messages/count_tokens`，而不是 `/v1/messages`。返回只有一个数，上面这个请求是 `{ "input_tokens": 14 }`。
3. 图片和 PDF 用 base64 发送，因为这个接口不收指向网址或已上传文件的内容块。
4. 换模型之前再数一次：Anthropic 建议拿同一个请求在两个模型上各数一次，再比较两个 `input_tokens`。
5. 在 Claude Code 里，运行 `/context` 可以按类别实时查看会话占用。`/usage` 则列出本次会话里每个模型用掉的输入、输出和缓存 token。

## 输入 token、输出 token 和上下文窗口

在 Claude API 里，输入包括[系统提示、每一条消息（连同其中的工具结果、图片和文档），以及你的工具定义](https://platform.claude.com/docs/en/build-with-claude/context-windows)。扩展思考（extended thinking）按输出算，每次响应都会在 `usage` 字段里报告这两个数。

上下文窗口装着模型写回复时能参考的全部文字，输入和正在生成的回复都占用它。

对话越聊越长，是因为每一轮都要把历史重新发一遍。上一轮的回复变成下一轮的输入，[Claude Code 每次请求都会发送完整的对话](https://code.claude.com/docs/en/costs)。一个开了一整天的会话，到最后哪怕只问一句话，前面的全部内容也照样计入用量。

**Anthropic 给出的单次请求容量**

- **1M** 个 token 的上下文窗口，适用于 Claude Opus 5.5 和 Anthropic 列出的其他现行模型 (来源：[Claude 平台文档：上下文窗口](https://platform.claude.com/docs/en/build-with-claude/context-windows), 2026-11-03 查阅)
- **128k** 个输出 token，这些模型单次请求的上限 (来源：[Claude 平台文档：上下文窗口](https://platform.claude.com/docs/en/build-with-claude/context-windows), 2026-11-03 查阅)
- **200k** 个 token 的上下文窗口，适用于其他 Claude 模型 (来源：[Claude 平台文档：上下文窗口](https://platform.claude.com/docs/en/build-with-claude/context-windows), 2026-11-03 查阅)

> 上下文多并不自动等于好。token 数越多，准确率和召回率越会下降，这种现象叫上下文腐化（context rot）。所以管好上下文里放什么，和有多大空间一样要紧。原文为英文。
>
> Anthropic, 在它的文档里, [Claude 平台文档，上下文窗口](https://platform.claude.com/docs/en/build-with-claude/context-windows) (2026-11-03 查阅)

[![Claude 在 X 上的帖子：Claude Sonnet 4 在 Anthropic API 上支持 100 万 token 的上下文，是之前的 5 倍，足够处理超过 7.5 万行代码，发布于 2025 年 8 月 12 日](https://mindket.com/blog/shots/x-claudeai-sonnet-1m-context.webp?v=2c3ba5b35238)](https://x.com/claudeai/status/1955299573620261343)

Claude 在 X 上，2025 年 8 月 12 日

> 本页两张 X 截图都来自 X 官方嵌入组件，11 月 3 日截取，时间按美国太平洋时间显示。

## 提示缓存：重复的那部分不必每次重算

智能体每次请求的开头，大多一模一样：系统提示、工具定义、说明文件，还有对话的前半段。[提示缓存](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)让 API 从存好的前缀接着处理，不用每次从头再算，Anthropic 说这样能省下处理时间和费用。窗口并不会因此变大，缓存过的前缀照样占着位置，变的只是这些 token 的价格。

缓存的前缀按固定顺序拼成：先是工具，再是系统提示，然后是消息，而且必须完全一致。某一层一改，这一层和后面所有层的缓存都失效。工具排在最前，改一个工具定义，整个缓存就作废了。缓存条目默认保存 5 分钟，每次命中重新计时，另外还有 1 小时的选项。

那个“你是一位科学家”的请求太短，进不了缓存。短于模型门槛的请求，即使标了缓存，也会悄悄跳过缓存，不报任何错。Claude Haiku 4.5 的门槛在各模型里算高的。

[![Alex Albert 在 X 上的帖子：Anthropic API 推出提示缓存，并说明它能降低的输入成本和延迟，发布于 2024 年 8 月 14 日](https://mindket.com/blog/shots/x-alexalbert-prompt-caching.webp?v=1f8657e54cef)](https://x.com/alexalbert__/status/1823751966893465630)

Anthropic 的 Alex Albert 在 X 上，2024 年 8 月 14 日

> 在 Claude Code v2.1.251 或更高版本里，`/usage` 的 Session 区块会多出一行 Prompt cache，显示输入 token 中有多大比例来自缓存，以及未命中的次数。

## 装了技能和 MCP 服务器，也会占 token 吗？

会，哪怕整个会话一个都没用上。

每个已安装的 [Agent Skill](https://mindket.com/cn/blog/what-are-agent-skills) 从一开始就把名称和描述放进上下文，好让智能体知道有它。Agent Skills 规范估计每个技能约 100 个 token，正文要等任务对上了才加载。在 Claude Code 里，Claude 能自行调用的子智能体和命令，名称和描述每一轮也都留在上下文里。

Claude Code 给这份清单[设了上限](https://code.claude.com/docs/en/skills)。每个技能的描述连同 `when_to_use` 的文字，最多保留 1,536 个字符，整份清单的预算是模型上下文窗口的 1%。超出预算时，Claude Code 先拿掉你最少调用的那些技能的描述，能触发它们的关键词也跟着没了。少用的技能就这样明明还装着，却再也触发不了。`/doctor` 可以估算这份清单的开销，`/skill-doctor` 能找出值得关掉的技能。

每接一个 [MCP 服务器](https://mindket.com/cn/blog/what-is-mcp)，就多出一批工具。工具定义进了上下文，就和消息一样算输入。Claude Code 默认延迟加载这些定义，在 Claude 真正用到某个工具之前，进入上下文的只有工具名称和服务器说明。在 API 上，[工具搜索](https://platform.claude.com/docs/en/agents-and-tools/tool-use/manage-tool-context)起同样的作用：不用一开始就发 50 个工具的定义，只发一个 `tool_search` 工具，其余的由 Claude 按需查找。Anthropic 建议在工具超过 20 个左右时启用。

[CLAUDE.md](https://mindket.com/cn/blog/claude-md-file) 在每个 Claude Code 会话一开始就整个加载，Anthropic 建议它不超过 200 行。

**你还没开口，上下文里已经有什么**

| | CLAUDE.md | Agent Skill (我们的选择) | MCP 服务器 |
| --- | --- | --- | --- |
| 整个会话一个都没用上，也已在上下文里 | ✓ 是 | ✓ 是 | ✓ 是 |
| 放进去的是什么 | 整个文件，每个会话一开始就加载 | 每个技能的名称和描述，约 100 个 token | 工具名称和服务器说明（在 Claude Code 里） |
| 其余部分只在任务需要时加载 | ✗ 否 | ✓ 是 | Claude Code 默认如此，API 上要用工具搜索 |
| Anthropic 给的大小建议 | 控制在 200 行以内 | 描述最多保留 1,536 个字符 | 工具超过 20 个左右，就加上工具搜索 |

**我们的选择：Agent Skill。** Anthropic 建议把针对特定流程的说明挪出 CLAUDE.md，放进用到时才加载的技能。

来源：[Claude Code 文档：有效管理成本](https://code.claude.com/docs/en/costs) (2026-11-03 查阅)；[Claude Code 文档：技能](https://code.claude.com/docs/en/skills) (2026-11-03 查阅)；[Claude 平台文档：管理工具上下文](https://platform.claude.com/docs/en/agents-and-tools/tool-use/manage-tool-context) (2026-11-03 查阅)；[Agent Skills 规范](https://agentskills.io/specification) (2026-11-03 查阅)

## 从 token 数到每月估算

Anthropic 对输入、输出和缓存读取分别按每百万 token 定价，估月费要把这三项分别记下来。缓存第一次写入更贵，计算器页面也注明，实际省下的会略少一些。

| 字段 | 数字从哪里来 |
| --- | --- |
| 每天的 AI 会话数、每月天数 | 你自己的工作习惯 |
| 每次会话读取的 Token（千） | Claude Code 里的 `/usage` 或 `/context`，或 API 返回的 `input_tokens` |
| 每次会话写出的 Token（千） | `/usage` 里的输出数字，思考也算在内 |
| 读取内容里重复的比例（%） | `/usage` 里的 Prompt cache 一行 |
| 回答缩短后减少的输出（%） | 你自己定的目标，不是测量值 |
| 改用最便宜模型的会话（%） | 你估计能交给小模型的简单会话 |

## 参考：usage 里的缓存字段，以及各模型的缓存下限

每次响应的 `usage` 会把输入拆成三个数：

- `cache_read_input_tokens`：这次请求从缓存里读出的 token。
- `cache_creation_input_tokens`：新建缓存条目时写进去的 token。
- `input_tokens`：剩下的部分，也就是最后一个缓存断点之后的 token。

**各模型能进缓存的最短提示** 单位是 token。高亮的是正文点名的那个模型。

- Claude Opus 5.5: 512 个 token
- Claude Sonnet 5.5: 512 个 token
- Claude Haiku 5.5: 512 个 token
- Claude Sonnet 5: 1,024 个 token
- Claude Opus 4.8: 1,024 个 token
- Claude Opus 4.7: 2,048 个 token
- Claude Opus 4.6: 4,096 个 token
- Claude Haiku 4.5: **4,096 个 token**

来源：[Claude 平台文档：提示缓存](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) (2026-11-03 查阅)

> 下方来源列表里的页面，我们在 2026 年 11 月 2 日读过，其中四页第二天又读了一遍，没有上手实测。模型名称、上限和 Claude Code 的版本号变得很快。

## 常见问题

### 1,000 个 token 大约是多少个英文单词？

按 OpenAI 的经验估算，大约 750 个英文单词。

### 前几轮的思考 token，后面还会再算吗？

较新的模型会。前几轮的思考块留在对话里，后面每一轮都按输入计算。更早的模型会把它们去掉。思考按输出计费，也占用 `max_tokens` 的额度，并计入速率限制。

### 对话超出上下文窗口会怎样？

单是输入就超出窗口的请求，API 会直接拒绝，返回 400 错误，提示 `prompt is too long`。在 Claude 4.5 及更新的模型上，输入放得下、只是加上 `max_tokens` 才会超出的请求会被接受，生成到上限时以 `model_context_window_exceeded` 停下。Claude Code 则会在会话接近上限时，自动压缩较早的历史。

### 命令行工具比 MCP 服务器更省 token 吗？

通常是。Anthropic 的 Claude Code 成本指南认为，`gh`、`aws`、`gcloud` 这类命令行工具比 MCP 服务器更省上下文，它们不用逐个列出工具。Claude 可以直接在终端里运行它们，用不上的 MCP 服务器可以在 `/mcp` 里关掉。

## 资料来源

- [Claude 平台文档：术语表](https://platform.claude.com/docs/en/about-claude/glossary) (2026-11-02 查阅)
- [Claude 平台文档：token 计数](https://platform.claude.com/docs/en/build-with-claude/token-counting) (2026-11-02 查阅)
- [Claude 平台文档：上下文窗口](https://platform.claude.com/docs/en/build-with-claude/context-windows) (2026-11-03 查阅)
- [Claude 平台文档：提示缓存](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) (2026-11-03 查阅)
- [Claude 平台文档：管理工具上下文](https://platform.claude.com/docs/en/agents-and-tools/tool-use/manage-tool-context) (2026-11-03 查阅)
- [OpenAI API 文档：核心概念](https://developers.openai.com/api/docs/concepts) (2026-11-02 查阅)
- [Claude Code 文档：有效管理成本](https://code.claude.com/docs/en/costs) (2026-11-03 查阅)
- [Claude Code 文档：探索上下文窗口](https://code.claude.com/docs/en/context-window) (2026-11-02 查阅)
- [Claude Code 文档：技能](https://code.claude.com/docs/en/skills) (2026-11-03 查阅)
- [Claude Code 文档：插件概览](https://code.claude.com/docs/en/plugins) (2026-11-02 查阅)
- [Agent Skills 规范](https://agentskills.io/specification) (2026-11-03 查阅)

[打开计算器](https://mindket.com/cn/calculator)
