先打破一個誤解: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 的三個核心認知

  1. Token ≠ 字元 ≠ 單字:它是 BPE 演算法切出來的語義單元,常見的短,罕見的長
  2. 中文比英文貴:同樣內容,中文 token 消耗約是英文的 2-3 倍,API 成本最佳化時要考慮這一點
  3. Token 決定兩件事:能放多少上下文(容量)+ 每次呼叫花多少錢(成本)

理解了 token,你才能真正讀懂 AI 產品的規格參數,做到心中有數——128K 上下文到底夠不夠用,換算一下就知道了。