Token到底是个什么鬼:给程序员的AI计费扫盲

乐云一
  • 笔记
  • note
About 3178 wordsAbout 11 min

Token到底是个什么鬼:给程序员的AI计费扫盲

某天,你打开Claude CLI的账单页面,或者随手翻了翻OpenAI的用量统计,看到这么一行:

Input tokens: 52,318
Output tokens: 12,847
Cost: $0.38

你盯着这个页面看了三秒钟,脑子里冒出三个问号:Token是啥?5万多个?我干啥了就花了0.38刀?

so┭┮﹏┭┮,这篇文章就是来回答这些问题的。

Token到底是个什么

先说结论:Token是AI阅读和生成文本的最小单位。

我们人类读文字,是一个字一个字(或者一个词一个词)地看。但AI不一样,它不认识"字"这个概念。它会把一段文本先拆成一个个小片段,这些小片段就叫Token。

这个过程有个专门的名字——分词(Tokenization),流程大概是这样:

原始文本 → [Tokenizer分词器] → Token序列

举个实际的例子。

英文文本

"Hello, World!"

经过分词器处理后,大概是3-4个Token:

["Hello", ",", " World", "!"]

你看,一个常见的问候语,AI眼里就是4个小碎片。

中文文本

"你好,世界!"

看起来比英文短对吧?但经过分词器处理后,可能是6-8个Token:

["你", "好", ",", "世", "界", "!"]

没错,中文几乎每个字都单独算一个Token。这就意味着,表达同样的意思,中文消耗的Token数量通常比英文多。

这不是歧视中文,而是因为目前主流的大语言模型(GPT、Claude这些)的训练语料以英文为主,分词器对英文的压缩效率更高。一个英文单词经常就是一个Token,但一个中文字可能就需要一个Token甚至更多。

代码文本

一个50行左右的Java方法,大概消耗200-400个Token。一个完整的Controller文件(300行),可能就是2000-3000个Token。

一个好记的经验法则

  • 1个Token ≈ 4个英文字符,或者说≈ 0.75个英文单词
  • 1个Token ≈ 1-2个中文字
  • 1000个Token大概就是750个英文单词,或者300-500个中文字

不用精确到个位数,有个量级概念就行。

上下文窗口:AI的"内存"

知道了Token是什么,接下来聊一个和Token紧密绑定的概念——上下文窗口(Context Window)

你可以把上下文窗口理解为AI的"工作记忆",就像你电脑的内存条。内存有多大,AI一次性能"记住"的内容就有多少。

每个模型都有自己的上下文窗口上限:

模型上下文窗口大概能装多少东西
GPT-4128K tokens约96,000个英文单词,一部中等长度的小说
GPT-4o128K tokens同上
Claude 3.5 Sonnet200K tokens约150,000个英文单词,一部长篇小说
Claude 3 Opus200K tokens同上
GPT-3.516K tokens约12,000个英文单词,一篇长文
DeepSeek-V3128K tokens约96,000个英文单词

128K tokens听起来很多对吧?但关键在于——上下文窗口里装的不只是你当前这一条消息

一次对话里,以下所有东西都会占上下文窗口的空间:

  1. 系统提示词(System Prompt):比如"你是一个专业的Java开发助手"这种设定
  2. 你发的每一条消息
  3. AI回复的每一条消息
  4. 你粘贴的代码/文件内容
  5. 工具调用和返回结果(如果用了MCP、Function Calling等)

这些东西全部叠在一起,就这么一个池子。用满了怎么办?AI就开始"失忆"了——最早的消息会被截断或者遗忘。

这就像你在看一本很长的技术书,看到第10章的时候,第1章的内容已经记不太清了。AI也一样。

Token怎么影响你的日常工作

理解了Token和上下文窗口,很多日常使用AI时的"玄学"现象就说得通了。

为什么聊着聊着AI就变笨了

你跟AI来来回回聊了一个小时,让它帮你重构代码、写接口、调Bug。一开始它回答得又快又准,但聊到后面,你发现它开始"胡说八道"了——明明之前的逻辑是对的,现在又开始瞎改。

原因:上下文窗口满了。早期的对话被截断,AI已经不记得你最初说的需求和约束了。它只能根据剩下的最近的几轮对话来猜你要什么。

解法:开一个新的对话窗口,把关键上下文重新整理后发给它。

为什么粘贴整个文件是浪费

有时候为了让AI理解你的代码结构,你直接把一个2000行的Service实现类整个粘贴进去。

这一个文件可能就吃掉5000-10000个Token。加上之前的对话历史、系统提示词,你一下就用掉了上下文窗口的好几十分之一。

而且AI并不会因为你贴了更多代码就回答得更好。它真正需要的可能只是其中某几个方法。

解法:只贴相关的代码片段,而不是整个文件。或者像在之前的文章里说的,用锚点文件的方式让AI按需读取。

为什么Copilot/Claude有时候会"忘记"你说过的话

你告诉AI"用驼峰命名",它前几轮都记得,后面突然又开始用下划线了。

原因:还是上下文窗口的问题。包含你命名约定要求的那条消息已经被截断了。

解法:把关键约束写在System Prompt或者copilot-instructions.md里,这样每轮对话都会自动加载,不怕被截断。

计费模式:你的Token值多少钱

搞清楚Token是什么之后,终于可以聊钱了。

目前主流的AI工具/平台,计费模式主要分两种。

按Token计费

代表选手:Claude API、OpenAI API、各类CLI工具。

计算公式很简单:

总费用 = 输入Token数 × 输入单价 + 输出Token数 × 输出单价

注意,输入和输出的单价不一样,而且输出通常比输入贵好几倍。

以2025年的价格为例(仅供参考,实际价格以官网为准):

模型输入价格(每百万Token)输出价格(每百万Token)
GPT-4o$2.50$10.00
Claude 3.5 Sonnet$3.00$15.00
DeepSeek-V3$0.27$1.10

为什么输出比输入贵?因为生成文本(输出)比理解文本(输入)需要更多的计算资源。输入是"读",输出是"写"加"思考",后者更费脑。

这种模式的特点

  • 用多少算多少,很公平
  • 对于短查询特别划算(问个正则表达式,可能就花0.001刀)
  • 但如果你天天让AI帮你读整本代码库,费用会积少成多

按订阅/请求计费

代表选手:GitHub Copilot($10/月或$19/月)、Cursor Pro($20/月)。

这种模式你交一个固定的月费,然后用多少Token都行(当然会有fair use限制)。

听起来很划算?但要注意,平台后台依然在按Token计费,只不过这个费用由平台替你承担了。他们赌的就是:大多数用户的平均用量,低于他们收的月费。

这种模式的特点

  • 费用可预测,每月固定支出
  • 重度用户薅到就是赚到
  • 轻度用户可能反而不划算(一个月就用几次,10刀的月费和直接买Token比反而贵了)

两种模式怎么选

简单粗暴的建议:

你的使用场景推荐模式
每天都在用AI写代码订阅制(Copilot/Cursor Pro)
偶尔用用,或者只是做自动化脚本按Token计费(API)
需要处理大量文本(代码审查、文档分析)看情况,量特别大的话API可能更可控
团队统一采购订阅制,管理方便

说实话,如果你是全职写代码的程序员,Copilot的月费是最省心的选择。一个月10-20刀,比你每天花时间算Token费用要划算得多。

省Token的实操技巧

不管你是按Token付费还是用订阅制,省Token都是好习惯。按Token付费的省钱,用订阅的能让AI的回答更准确(因为上下文窗口不会被垃圾信息占满)。

1. 提示词精简,去掉废话

❌ "你好,我想请问一下,能不能帮我写一个用于用户注册的正则表达式?需要验证邮箱格式的那种,谢谢!"
✅ "写一个邮箱格式验证的正则表达式"

两句话要的结果完全一样,但Token消耗差了好几倍。AI不需要你的礼貌用语,它只需要明确的指令。

2. 只给相关代码,别贴整个文件

❌ [粘贴整个UserService.java,2000行]
   "帮我看看register方法有什么问题"
✅ [只粘贴register方法,30行]
   "这段注册方法有什么问题"

效果一样,Token消耗差了几十倍。

3. 用代码引用代替粘贴

如果你的工具支持(比如Copilot、Cursor),直接用@文件名或者#行号引用代码,让AI自己去读,而不是手动粘贴。这样工具会自动按需读取,不会一股脑全塞进上下文。

4. 上下文太长就开新对话

当你感觉到AI的回答质量开始下降,或者对话已经进行了很长时间,别犹豫,直接开一个新的对话窗口。把关键信息重新整理后告诉AI,比在一个已经"臃肿"的对话里继续纠缠要高效得多。

5. 英文提示词更省Token

同一个意思,英文表达通常比中文少用30%-50%的Token。如果你的英文还行,可以试试用英文写提示词,让AI用中文回复。

❌ "请帮我分析一下这段代码的性能问题,并给出优化建议"  (约25个Token)
✅ "Analyze performance issues and suggest optimizations"  (约8个Token)

当然这个技巧在实际使用中看个人,如果英文表达不够精确反而影响效果,那就别勉强。

程序员的Token心算手册

最后,给各位开发者一个实用的Token心算参考表。不需要精确计算,有个直觉就够了。

对象大概Token数
1行Java代码10-20个Token
1行Python代码8-15个Token
1行SQL15-25个Token
1页A4文本(约500字)500-800个Token
一个典型的CRUD接口方法50-100个Token
一个完整Controller类(200行)2,000-3,000个Token
一个Service实现类(500行)5,000-8,000个Token
一次典型的API请求(提示词+上下文)2,000-10,000个Token
一次代码审查(带上下文)10,000-50,000个Token
整个项目扫描(100个文件)200,000+个Token

几个关键数字记一下:

  • 200K tokens:Claude的上下文上限。100个Java文件就能塞满,更别提还带着对话历史了。想用AI"读整个项目"?醒醒,装不下。
  • 128K tokens:GPT-4的上限。大约一个中等规模的模块(30-50个文件)加对话历史就满了。
  • 1个Token ≈ 0.001个人民币(按GPT-4o的输入价格算)。一个复杂任务跑下来可能也就几毛钱。

写在最后

Token这个东西,说白了就是AI世界的"流量计"。你跟AI说的每句话、贴的每段代码、AI回你的每个字,都在这个流量计上跑。

理解了Token,你就理解了:

  • 为什么AI有时候会"忘记"你说过的话——上下文窗口满了
  • 为什么账单上会有这么多Token——中文本身就费Token,代码也不便宜
  • 为什么要精简提示词——省Token就是省钱,也是给AI减负
  • 为什么不同模型收费差这么多——上下文窗口大小、输出质量、推理能力都是定价因素

以后再看到账单上的Token数,应该不会慌了吧。

如果这篇文章对你有帮助,那这2000多个Token就算没白花。

Last update:
Contributors: LeYunone
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.14.7