先打破一個誤解:Token ≠ 字數
很多人第一次看到「這個模型支援 128K token」時,直覺會換算成字數。128K token = 12.8 萬字?差不多夠一本小說了?
如果你這麼想,你已經踏入了一個超級常見的坑。
Token 不是字,不是詞,也不是句子。它是介於字元和詞語之間的某種切割單位,具體怎麼切,取決於模型用的是哪種 tokenizer(分詞器)。
Token 是什麼:從一個字母說起
讓我們從英文開始理解。
對於 GPT 系列模型來說,"hello" 是 1 個 token,"world" 是 1 個 token,"tokenization" 會被拆成 "token" + "ization" = 2 個 token。
為什麼?因為這些模型使用 BPE(Byte Pair Encoding,位元組對編碼)演算法。
BPE演算法:AI的「壓縮字典」
BPE 的核心思想很簡單:找到文字裡最常見的字元組合,給它一個編號。
訓練階段,演算法從單個字元開始,不斷合併最高頻的相鄰對:
- 第一輪:發現 "e" + "s" 出現最多次 → 合併成 "es",編號 #256
- 第二輪:發現 "t" + "h" 出現最多次 → 合併成 "th",編號 #257
- 第三輪:發現 "th" + "e" 出現最多次 → 合併成 "the",編號 #258
- ……持續合併,直到詞彙表達到目標大小(通常 5 萬~10 萬個 token)
結果:常見詞變成單個 token,罕見詞拆成多個 token。
這就解釋了為什麼 "tokenization" 會被拆:這個詞不夠常見,但 "token" 這個前綴很常見,所以保留為一個 token;"ization" 是個常見後綴,也保留為一個 token。
為什麼中文 Token 比英文「貴」?
這是很多人沒意識到但非常重要的事:用中文和AI對話,消耗的token通常是英文的2-4倍。
原因在於 BPE 的訓練資料。主流大模型(GPT-4、Claude、Gemini)的訓練語料以英文為主,英文的詞彙表最佳化得很好,常見英文詞往往是 1 個 token。
中文呢?每個漢字通常對應 1-2 個 token(具體取決於模型),而且很多中文詞語沒有對應的合併規則,會被拆得更碎。
實際測試資料:
- "Hello, how are you?" → 約 5 個 token
- 「你好,你怎麼樣?」→ 約 10-14 個 token
同樣的意思,中文消耗的 token 是英文的 2-3 倍。
對小火龍實驗室來說,這個差異非常真實。我們的科普文章用中文寫,翻譯成英文後,英文版反而更省 token。這也是為什麼在 API 呼叫成本最佳化上,有時候選擇英文提示詞是個實用策略。
Token 計算的實際規律
沒有精確工具的情況下,可以用這些經驗公式估算:
| 語言 | 估算規則 | 示例 |
|---|---|---|
| 英文 | 1 token ≈ 4個字元 / 約0.75個單字 | "Hello world" = 2 tokens |
| 中文 | 1 漢字 ≈ 1-2 tokens | 「你好世界」≈ 4-8 tokens |
| 程式碼 | 1 token ≈ 3-4個字元(標點多) | 程式碼通常比文字貴 |
| 數字 | 每個數字可能是單獨token | "1234567" ≈ 7 tokens |
Token 限制的實際影響
理解 token 的意義,在於它直接影響你使用 AI 的兩件事:
1. 上下文容量限制
每個模型的 Context Window 用 token 計量。Claude 3.5 Sonnet 的 200K token,換算成中文大概是 10-15 萬字。聽起來很多,但一旦你開始貼長文件、程式碼庫、對話歷史,很快就會觸頂。
觸頂之後,模型開始「遺忘」最早的內容——這就回到了上一篇文章說的記憶限制。
2. API 呼叫費用
商業 AI API 按 token 計費,分輸入 token 和輸出 token(輸出通常更貴)。
以 Claude 3.5 Sonnet 為例:
- 輸入:約 $3 / 百萬 token
- 輸出:約 $15 / 百萬 token
如果你讓 AI 處理 1 萬字的中文文件,大概消耗 1.5-2 萬 input tokens,約 $0.045-0.06。看起來不多,但如果你每天跑幾百次,成本就上來了。
小火龍實驗室有一條經驗:壓縮 System Prompt 比壓縮使用者輸入更有效。System Prompt 每次請求都會附帶,1000 token 的 System Prompt,每天 100 次呼叫 = 每天浪費 10 萬 input tokens。
如何精確計算 Token?
幾個實用工具:
- OpenAI Tokenizer(platform.openai.com/tokenizer):免費,支援 GPT 系列模型的 tokenization 視覺化
- tiktoken(Python 函式庫):OpenAI 開源,可以在程式碼裡精確計算 token 數
- Anthropic Console:Claude 的 API playground,顯示實際消耗的 token
- 經驗估算:英文 1 token ≈ 4 字元,中文 1 字 ≈ 1.5 tokens
一個經常被忽視的細節:特殊 Token
除了普通文字,tokenizer 還有一批特殊 token:
<|system|>、<|user|>、<|assistant|>:標記對話角色<|endoftext|>:文字結束標記<|pad|>:填充對齊用
這些特殊 token 也會被計入總 token 數。所以你實際使用的 token 數,往往比你以為的要多一點。
小結:Token 的三個核心認知
- Token ≠ 字元 ≠ 單字:它是 BPE 演算法切出來的語義單元,常見的短,罕見的長
- 中文比英文貴:同樣內容,中文 token 消耗約是英文的 2-3 倍,API 成本最佳化時要考慮這一點
- Token 決定兩件事:能放多少上下文(容量)+ 每次呼叫花多少錢(成本)
理解了 token,你才能真正讀懂 AI 產品的規格參數,做到心中有數——128K 上下文到底夠不夠用,換算一下就知道了。