token 是什麼?模型 (Model) 如何計量文字?
上一章看到,模型 (Model) 接收文字後會逐步產生回答。但它處理的單位不一定是一個字。文字會先經過 文字切分器 (Tokenizer),切成片段;這些片段叫做 token,每個片段再對應一個編號。
為什麼不能直接數字數? 先猜猜看:同樣是三個字,「我愛貓」和「我愛狗」一定各占三個 token 嗎?
同樣三個字,工具卻數出不同結果
這是本章的 Token 預算實驗室使用 o200k_base 編碼 (Encoding) 時,對兩句文字的實測結果:
| 原文 | 字數 | 工具顯示的片段 | token 數 |
|---|---|---|---|
| 我愛貓 | 3 | 我|愛|◌|貓 | 4 |
| 我愛狗 | 3 | 我|愛|狗 | 3 |
為什麼一個「貓」會占兩個 token? 電腦儲存文字時,會先把字變成位元組 (Byte)。切分器再依自己的詞彙表 (Vocabulary),把相鄰的位元組組成 token。詞彙表不可能收進所有文字組合;建立詞彙表時,常見的組合較可能被收成一個片段,其他內容就要用較小片段拼起來。它沒有規定「一個中文字一定要是一個 token」,也不是依字義切分。
貓 → 位元組 → token + token
狗 → 位元組 → token
這是上表採用 o200k_base 時的結果。切分器在這套編碼表裡能把「狗」組成一個 token,卻把「貓」留成兩段。「◌」不是原文多出一個字;它代表其中一段單獨轉回文字時,還湊不成完整的「貓」。切分邊界可以落在一個字裡面,也可以讓多個字元合成一個 token。
為什麼換「編碼模式」又變了?
工具的 o200k_base 和 cl100k_base 是兩套不同的編碼表:各自收錄不同片段,也用不同規則決定如何組合。就像拿兩份不同的拼圖零件盒拼同一張圖,分出的塊數可能不同。用本工具對同一段原文實測:
| 原文 | o200k_base | cl100k_base |
|---|---|---|
| 我愛貓 | 4 個 token | 5 個 token |
| 我愛狗 | 3 個 token | 6 個 token |
例如「狗」在前一套編碼表裡是一個 token,在後一套裡卻是三個。換的是計數所依據的切分器,不是原文,也不是模型突然改變了意思。 不同模型可能使用不同編碼表,因此估算時要選對應的編碼;名稱中的 200k 與 100k 大致表示詞彙表的規模,並不是這一頁的輸入上限。詞彙表較大也不保證每一句都用較少 token,仍要看它收錄了哪些片段。
編碼有好壞嗎?為什麼不都用「小的」?
先分清楚兩種「小」:cl100k_base 的詞彙表較小,意思是它能直接使用的 token 種類較少;但上表的「我愛狗」反而被它切成 6 個 token,比 o200k_base 的 3 個更多。詞彙表大小不等於這句話的 token 數。
設計模型時,較小的詞彙表讓模型需要對應的 token 種類較少,代價是某些文字可能被切成較長的序列;較大的詞彙表能收進更多片段,讓某些文字用較少 token 表示,卻也要為更多 token 種類保留模型空間。這是一種取捨,不能只看這兩句的數字就斷定哪套編碼讓模型「比較聰明」。
對已經訓練好的模型,還有一個更直接的限制:模型學的是它原本那套編碼產生的 token 編號。換編碼表可能改變片段與編號,不能只在工具裡選「較小的」就讓原模型照常理解。這裡切換選項,是為了比較計數結果;實際使用某個模型時,應選它對應的編碼。
上一章用「我愛貓」示範編號時,明說採用虛構的逐字切分;這裡展示的是工具的實際編碼結果。不能把「一個中文字=一個 token」當成固定換算式;英文片段、空白與標點也可能參與切分。
先選 `o200k_base`,貼入「我愛貓」並點選訊息看切分片段;再試「我愛狗」。接著保持原文不變,只把編碼切到 `cl100k_base`,對照上表的總數。這樣可以分別看出「換文字」與「換編碼表」如何影響切分;上限與裁切策略先保持不變。
回頭看工具結果:先找出它實際切在哪裡,再讀總數。換內容或換編碼表,邊界與總數可能改變,也可能不變;不要把這兩句的數字套到其他文字或編碼表。
模型生成文字時,也是逐步產生 token,再由程式轉成可閱讀的文字。token 是處理與計量的單位,不是字數,也不是意義分數。 需要知道某個服務實際使用多少 token,應依它對應的切分器或計數結果確認;本工具的編碼結果不能直接套到所有模型。
反例:只把「三點」改成「四點」,token 數可能完全相同,但意思已經變了。數量相同,不代表資訊相同,更不代表模型會回答相同內容。
下一章接著看「token 已經有編號,為什麼還要變成一串數字?」再往後才討論上下文容量。本工具量測的是貼入的文字內容;實際請求可能還包含格式、工具定義、其他輸入與模型輸出,不宜直接把顯示的數字當成最終帳單。
參考:Hugging Face 的切分演算法說明、OpenAI tiktoken 的編碼與模型對照、OpenAI tiktoken 的設計說明。查核日期:2026-09-23。表格是本工具兩套編碼的實測結果;工具計數依所選編碼,不代表所有模型。