通用

什么是 AI Token?为什么写一行代码会烧掉几千个

一段简单的 Hello World 在 Claude Code 里能烧掉 3000 个 Token。这篇用最直白的方式讲清 AI Token 是什么、为什么 AI 编程工具的 Token 消耗远比你想象中多,以及怎么把账单看明白。

打开 Claude Code,让它写一个 Hello World,按下回车的瞬间——账单上就少了三四千个 Token。很多人第一次看到这个数字都懵了:我就敲了一行字,怎么扣掉这么多?

这篇文章不打算抄百度百科那套定义。我直接告诉你:Token 到底是什么、为什么 AI 编程工具特别能烧 Token、以及怎么用一个免费工具把自己的实际消耗看清楚。

Token 不是字,更不是单词

先把最常见的误解戳破:1 个 Token 不等于 1 个字,也不等于 1 个英文单词。它是一段被模型切碎之后的子词单元(subword)。

举几个真实例子(OpenAI 的 cl100k 切词器口径):

  • 英文 hello → 1 个 Token
  • 英文 helloworld → 3 个 Token(被切成 helloworld
  • 中文「你好」→ 2 个 Token(每个汉字往往单独算一个)
  • 中文「写一个 Hello World 程序」→ 大约 8 个 Token

中文比英文吃亏。同样意思的一句话,中文消耗的 Token 数大概是英文的 1.5 到 2 倍。这是模型词表的偏置——英文语料训练得多,词表里高频英文 subword 多,中文的字基本只能一字一个 Token。

为什么 AI 编程工具特别能烧

很多人来问「我就发了一句话,为什么扣几千 Token?」——因为你看到的只是「自己的话」,但模型实际收到的是一整团东西。

一次 Claude Code 调用包含的内容大概是这些:

  1. 系统提示词:Claude Code 自己塞进去的 instruction,几千 Token 起步
  2. 当前工作目录的文件树:让模型知道项目结构
  3. AGENTS.md 或 CLAUDE.md:项目的开发约定
  4. 最近的对话历史:上下文记忆
  5. 你刚发的那句话:可能就 30 个 Token
  6. 被模型读取过的文件内容:你让它读哪个文件,那个文件的内容会进上下文

所以"敲一行字烧 3000 Token"完全正常。它不是为你的字烧的,是为周围一整圈背景信息烧的。

而 Agent 类工具——比如 Codex CLI、OpenCode——情况更夸张。Agent 会循环调用模型多次(先想再读文件再写代码再验证),单次任务里模型上下文累计可能跑到几十万 Token。我自己跑一个比较大的重构任务,单次会话烧掉 200 万 Token 不是稀罕事。

输入、输出、缓存——三种 Token,价格差 10 倍

第二个常被忽略的事:Token 不止一种。模型 API 通常拆成至少三类计费:

  • 输入 Token(input):你发给模型的内容
  • 输出 Token(output):模型生成给你的回复
  • 缓存输入 Token(cached input):和上一次完全一样、被命中缓存的输入部分

输入便宜、缓存最便宜、输出最贵。以 Claude Sonnet 当前的定价为例,输出 Token 的价格大概是输入的 5 倍,是缓存输入的 30 倍以上。

这就是为什么 Claude Code 之类的工具拼命做提示词缓存——同一份系统提示重复发,缓存命中之后可以让账单降一个数量级。

怎么把自己的真实消耗看清楚

光知道这些没用,关键是你自己每天到底烧多少。Claude Code 自带的 /cost 命令只能看当前会话;想看跨工具、跨项目、跨天的统计,你需要一个聚合工具。

我自己用的就是 Vibe Usage——免费、本地、自动同步 Claude Code、Codex CLI、Gemini CLI、OpenCode 等主流工具的真实消耗,按天、按模型、按项目分组看一眼就懂。装好之后什么都不用配,它自己读各工具的本地日志。

我推荐每个写代码的人都装一下,哪怕只是图个心安——很多"账单焦虑"的人其实消耗远没他想象中夸张,看清楚反而踏实。

先去把数字看清楚再焦虑

「Token 消耗大」这件事,多数情况下是一种没有数字支撑的焦虑。你听别人说 Claude Code 一个月烧两千美金,就觉得自己也快烧爆了——但你的实际消耗可能差着两个数量级。

下次再看到 AI 工具账单上跳出几千 Token,别慌。先想想这次模型实际收到的是哪一坨上下文,再去 打开 Vibe Usage 看自己的 Token 消耗 趋势——你大概率会发现,自己以为是问题的地方根本不是问题。

相关阅读

相关阅读

什么是 AI Token?为什么写一行代码会烧掉几千个