iT邦幫忙

0

圖解 Token vs 字節:AI 大模型到底怎麼讀懂你的文字?從底層原理到省錢實戰 🚀

  • 分享至 

  • xImage
  •  

圖解 Token vs 字節:AI 大模型到底怎麼讀懂你的文字?從底層原理到省錢實戰 🚀

你丟了一句「你好 Hello」給 GPT-5——7 個字元。但模型實際處理的是 2 個 Token,而你的帳單也是按 Token 收費的。

與此同時,你的電腦把這句話存成 12 個位元組(Byte)

等等,所以位元組、字元、單詞和 Token 到底差在哪?為什麼 AI 不直接讀位元組?為什麼同樣一句話,中文比英文更貴?

這篇文章會從最底層開始,一步步帶你搞懂:從硬碟上的位元組,到 AI 實際在處理的 Token,整條路到底發生了什麼事。


📦 先從最底層聊起:什麼是位元組(Byte)

位元組(Byte) 是電腦儲存資料的最小單位。1 個位元組 = 8 個位元(bit)= 一個 0 到 255 之間的數字。

當你把文字存檔的時候,電腦會依照 UTF-8 編碼標準,把每個字元轉換成位元組:

字元 UTF-8 位元組 位元組數 十六進位
H 72 1 48
e 101 1 65
228, 189, 160 3 e4 bd a0
229, 165, 189 3 e5 a5 bd
🚀 240, 159, 154, 128 4 f0 9f 9a 80

規律很清楚:

  • 英文字母:1 個位元組
  • 中日韓字元:3 個位元組
  • Emoji:4 個位元組

所以「你好 Hello」存起來就是 12 個位元組:

你       好       空格  H   e   l   l   o
e4 bd a0  e5 a5 bd  20   48  65  6c  6c  6f
(3 Bytes)(3 Bytes)(1)  (1) (1) (1) (1) (1) = 12 Bytes

位元組是電腦儲存文字的方式。但 AI 模型並不會直接讀位元組喔。


🪜 四級階梯:Byte → 字元 → 單詞 → Token

同一段文字,其實有四種不同粒度的拆法:

英文範例:"Hello, World"

層級 拆分結果 數量 說明
Byte 48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 12 原始儲存單位
字元 H e l l o , ␣ W o r l d 12 人類看得懂的字母
單詞 Hello, World 2 用空格切
Token Hello , World 3 AI 實際處理的單位

中文範例:「你好世界」

層級 拆分結果 數量 說明
Byte e4 bd a0 e5 a5 bd e4 b8 96 e7 95 8c 12 每個漢字 3 Bytes
字元 你 好 世 界 4 一個字就是一個字元
單詞 你好 世界 2 依語意切詞
Token 你好 世界 2 取決於 tokenizer

從位元組到字元到單詞到Token的四級文本表示層次圖

核心重點:Token 不是位元組,不是字元,也不是單詞。 它是一種介於字元和單詞之間的「子詞」單位,是效率和覆蓋率的最佳平衡點。


🤔 為什麼不直接用 Byte 或單詞就好?

既然位元組和單詞比較簡單直覺,為什麼 AI 偏偏要搞出 Token 這個東西?因為兩個極端都有嚴重的問題。

Byte 的問題:序列太長了

「Hello」是 5 個位元組,一篇 1000 字的文章大約 5000 個位元組,一本小說就是 50 萬個位元組。

AI 模型需要計算序列中每個位置之間的關係(就是大家常聽到的 Attention 注意力機制),計算量隨序列長度呈平方成長(O(n²))。序列長度變 2 倍 → 計算量變 4 倍。

如果直接用位元組,序列會比 Token 長 3~4 倍,AI 跑起來的成本會貴到爆。

單詞的問題:詞彙表炸裂

光是英語常用詞就超過 17 萬個,再加上技術名詞、人名、URL、程式碼和其他語言的詞彙,詞彙表可能膨脹到數百萬。

超大的詞彙表代表:

  • Embedding table 佔用超多記憶體
  • 大多數詞出現頻率極低,模型根本學不好
  • 任何不在詞彙表裡的詞完全無法處理(OOV 問題)

Token:就是那個最佳平衡點 ⚖️

Token 把文字拆分成子詞單元(subword units)——比位元組大,比單詞小:

"unbelievable" → ["un", "bel", "ievable"]    (3 個 Token)
"tokenization" → ["Token", "ization"]         (2 個 Token)
"Hello"        → ["Hello"]                    (1 個 Token —— 夠常見,保留完整)
"你好"         → ["你好"]                      (1 個 Token —— 高頻詞組合在一起)

這樣既能保證短序列(處理效率高),又能維持小詞彙表(大約 10~20 萬條就夠),而且不會碰到未知詞(任何文字都能拆成已知的子詞片段)。


🔧 BPE 分詞演算法:Token 到底怎麼生出來的

幾乎所有主流大模型都用 BPE(Byte Pair Encoding,字節對編碼) 演算法來建立 tokenizer。原理其實沒有想像中複雜:

Step 1:拆成單一字元

把訓練語料中的所有文字拆成最小單位:

"low"    → ["l", "o", "w"]
"lower"  → ["l", "o", "w", "e", "r"]
"newest" → ["n", "e", "w", "e", "s", "t"]

Step 2:統計最高頻的相鄰配對

掃描所有相鄰字元對,找出出現次數最多的:

("l", "o") 出現 2 次  ← 最高頻!
("o", "w") 出現 2 次
("e", "w") 出現 1 次
...

Step 3:合併最高頻的配對

把所有 ("l", "o") 替換為新的 Token "lo":

"low"   → ["lo", "w"]
"lower" → ["lo", "w", "e", "r"]

Step 4:重複數萬次

不斷統計、合併,直到詞彙表達到目標大小(通常 5~20 萬)。

經過大量合併後,「the」、「Hello」、「你好」這些高頻詞會變成單一的 Token,而罕見詞則會被拆成多個子詞片段。

BPE 字節對編碼分詞過程的逐步視覺化,展示字元拆分、頻率統計和合併步驟

用 tiktoken 自己動手驗證 👨‍💻

你可以用 OpenAI 的 tiktoken 套件來看 GPT-5 實際的分詞結果:

import tiktoken

# o200k_base 是 GPT-4o / GPT-5 使用的 tokenizer
enc = tiktoken.get_encoding("o200k_base")

text = "你好 Hello"
tokens = enc.encode(text)
token_strings = [enc.decode([t]) for t in tokens]

print(f"原文: {text}")
print(f"UTF-8 位元組數: {len(text.encode('utf-8'))}")
print(f"Token 數 ({len(tokens)}): {token_strings}")
print(f"Token ID: {tokens}")

實測輸出:

原文: 你好 Hello
UTF-8 位元組數: 12
Token 數 (2): ['你好', ' Hello']
Token ID: [177519, 32949]

12 個位元組壓縮成了 2 個 Token!這就是 BPE 的威力——高頻詞組會被合併成單一 Token,大幅縮短序列長度。


🔄 不同模型,不同 Tokenizer

每個 AI 模型家族都有自己的 tokenizer 和詞彙表。同一段文字在不同模型上的 Token 數可能不同:

文字 cl100k_base (GPT-4) o200k_base (GPT-4o/5) UTF-8 Bytes
Hello, how are you today? 7 7 25
Explain quantum computing 7 6 41
你好,請用中文解釋一下什麼是token 15 9 47
こんにちは、トークンとは何ですか? 12 10 51
Python fibonacci 函式(5行) 28 28 92

關鍵發現:GPT-5 的 tokenizer(o200k_base)對中文和日文的效率有顯著提升 🎉——同一句中文,GPT-4 要 15 個 Token,GPT-5 只需要 9 個,省了 40%。

Claude 用的是自家研發的 tokenizer,Gemini 則用 SentencePiece。不同模型處理同一段文字的 Token 數不一樣,這代表同樣的 prompt 在不同模型上花的錢也不同


💰 Token 數量怎麼影響你的帳單

AI API 是按 Token 計費的,不是按位元組也不是按字數。而且不同語言的 Token 效率差異很大:

各語言 Token 效率比較(o200k_base)

語言 文字 Token 數 Bytes 數 Bytes/Token
英文 "Hello, how are you today?" 7 25 3.6
中文 "你好,今天怎麼樣?" 5 27 5.4
日文 "こんにちは" 1 15 15.0
韓文 "안녕하세요" 2 15 7.5
程式碼 def fibonacci(n): (5行) 28 92 3.3

在 GPT-5 的 tokenizer 下,日文其實是 Token 效率最高的語言——「こんにちは」把 15 個位元組壓縮成了 1 個 Token,超猛。

實際成本比較

假設你用 GPT-5(輸入 $1.25/百萬 Token)處理 100 萬字元的文字:

語言 約 Token 數 費用
英文 ~33 萬 $0.41
中文 ~50 萬 $0.63
中英混合 ~40 萬 $0.50

中文文字比英文貴大約 50%——因為平均每個漢字消耗的 Token 比較多。

💡 省錢建議:先比較再決定用哪個模型

不同模型有不同的 tokenizer、不同的價格、不同的能力。最划算的選擇可能跟你想的不一樣。

用統一的 API 閘道(Gateway),你可以用同一把 Key 測試多個模型,同時比較品質和成本:

from openai import OpenAI

client = OpenAI(
    api_key="your-crazyrouter-key",
    base_url="https://crazyrouter.com/v1"
)

# 同一個 prompt 測試多個模型
for model in ["gpt-5", "gpt-5-mini", "deepseek-v3.2", "claude-sonnet-4"]:
    response = client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": "用兩句話解釋什麼是 tokenization"}],
        max_tokens=100
    )
    usage = response.usage
    print(f"{model}: {usage.prompt_tokens} 輸入 / {usage.completion_tokens} 輸出")

透過 Crazyrouter 一把 API Key 就能呼叫 627+ 模型,輕鬆找到最適合你的語言和使用場景的高 CP 值模型。


🔮 前沿趨勢:Byte 級模型會取代 Token 嗎?

2024 年底,Meta 發表了 BLT(Byte Latent Transformer)——一種直接處理原始位元組的模型架構,完全跳過了 tokenizer。

Byte 級模型的優勢:

  • 真正語言無關——不存在 tokenizer 偏好英文的問題
  • 沒有未知詞問題——任何位元組序列都是合法輸入
  • 沒有 tokenizer-模型不匹配——模型看到的就是你輸入的原文

為什麼 2026 年仍然是 Token 的天下:

  • Byte 序列長 3~4 倍——處理成本高很多
  • 所有主流商用模型(GPT-5、Claude、Gemini)都還是用 Token 架構
  • BLT 還在研究階段——沒有商用 API 可以呼叫

現實狀況:Token 至少還會稱霸 3~5 年。搞懂它的運作原理,是每個 AI 開發者的必備技能。


📋 速查表:Token vs Byte vs 字元 vs 單詞

屬性 Byte 字元 單詞 Token
是什麼 儲存最小單位 人類可讀符號 按空格/語意分割 AI 處理的子詞單位
大小 固定 1 Byte 1-4 Bytes (UTF-8) 不固定 不固定
"Hello" 5 5 1 1
"你好" 6 2 1 1
"unbelievable" 12 12 1 3
用在哪 電腦儲存 人類閱讀 搜尋引擎 AI 模型
API 計費?

換算關係:

  • 1 個英文 Token ≈ 4 個字元 ≈ 4 Bytes ≈ 0.75 個單詞
  • 1 個中文 Token ≈ 1~3 個漢字 ≈ 3~9 Bytes
  • 1000 個 Token ≈ 750 個英文單詞 ≈ 4000 個字元

實用工具:


❓ 常見問題 FAQ

Token 和 Byte 是同一個東西嗎?

不是喔。Byte 是電腦的原始儲存單位(1 Byte = 8 bits),Token 是 AI 模型處理的最小文字單位。「Hello」是 5 個 Bytes 但只有 1 個 Token;「你好」是 6 個 Bytes 也只有 1 個 Token。Byte 和 Token 之間的對應關係取決於語言和具體的 tokenizer。

為什麼 AI 不直接處理 Byte?

效率問題。「Hello」用 Byte 表示是長度 5 的序列,用 Token 表示只有長度 1。一篇千字文章的 Byte 級序列會長 3~4 倍。Transformer 的注意力機制計算量是 O(n²),序列越長成本爆得越兇。

同一段文字在不同模型上的 Token 數會一樣嗎?

不會。GPT-5 用 o200k_base tokenizer,GPT-4 用 cl100k_base,Claude 用自家的 tokenizer。同一句中文可能在 GPT-4 上是 15 個 Token,在 GPT-5 上只要 9 個。這代表同一個 prompt 在不同模型上的費用也會不同。

為什麼中文比英文更貴?

兩個原因:第一,中文字元在 UTF-8 裡每個佔 3 Bytes(英文只有 1 Byte);第二,就算用了最新的 tokenizer,中文字元的壓縮效率還是不如英文。同樣語意的一句話,中文通常比英文多消耗大約 50% 的 Token。

怎麼降低 Token 成本?

五個實戰技巧:

  1. 精簡 prompt——每多一個字就多一分錢
  2. 設定 max_tokens 限制輸出長度
  3. 選「夠用」的最便宜模型——不一定要用最貴的
  4. 快取重複查詢——別每次都重新問
  5. Crazyrouter 這類 API 閘道,一把 Key 橫向比較 627+ 模型的價格和效果

📚 延伸閱讀


搞懂 Byte 與 Token 的差別,是控制 AI 成本的第一步。更多開發者指南和最新模型定價資料,歡迎逛逛 Crazyrouter 部落格


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言