什麼是 Token?
Token 是 OpenAI 模型處理文字的基本單位。視語言和情境而定,它們可以短至單一字元,也可以長至完整單字。空格、標點符號和部分單字都會計入 Token 數。這就是 API 在產生回應前,於內部切分文字的方式。
英文的實用經驗法則:
1 個 Token ≈ 4 個字元
1 個 Token ≈ ¾ 個單字
100 個 Token ≈ 75 個單字
1–2 個句子 ≈ 30 個 Token
1 個段落 ≈ 100 個 Token
約 1,500 個單字 ≈ 2,048 個 Token
Token 化處理會因模型和編碼方式而異。使用 Tokenizer 工具或 tiktoken.encoding_for_model(model),即可取得目標模型的精確數量。
範例
以下是一些真實文字範例及其約略 Token 數:
Wayne Gretzky 的名言「你沒出手的球,100% 都不會進」= 11 個 Token
OpenAI Charter = 476 個 Token
美國《獨立宣言》= 1,695 個 Token
Token 數如何計算
當您將文字傳送至 API 時:
文字會被拆分成 Token。
模型會處理這些 Token。
回應會以一連串 Token 的形式產生,然後再轉換回文字。
Token 使用量會以幾種類別追蹤:
輸入 Token – 您請求中的 Token。
輸出 Token – 回應中產生的 Token。
快取 Token – 對話記錄中重複使用的 Token(通常以較低費率計費)。
推理 Token – 在某些進階模型中,產生最終輸出前,內部會包含額外的「思考步驟」。
這些計數會出現在您的 API 回應中繼資料中,並用於計費和使用量追蹤。
若要進一步探索 Token 化處理,您可以使用我們的互動式 Tokenizer 工具,它可讓您計算 Token 數,並查看文字如何被拆分成 Token。
或者,如果您想以程式方式將文字 Token 化,請使用 Tiktoken,這是一款專為 OpenAI 模型使用的快速 BPE Tokenizer。
Token 限制
每個模型都有合併後的最大 Token 限制(輸入 + 輸出)。目前的高容量模型在上下文中最多可支援數十萬個 Token,不過實際限制可能會因模型版本和您的使用層級而異。
如果超過限制,您可以:
縮短或改寫提示詞。
將大型文字拆成較小的區塊。
在傳送前先摘要或預先處理輸入。
Token 定價
API 使用量按 Token 計價,費率會依模型以及 Token 屬於輸入、輸出或快取而異。目前費率請參閱 OpenAI 的定價頁面。某些推理模型可能會在內部使用更多 Token,但目標是透過減少完成每項工作所需的 Token 數來提升效率。
探索 Token
API 會根據語料庫資料中的情境來處理單字。模型會接收提示詞,將輸入轉換為 Token 清單,處理提示詞,並將預測的 Token 轉換回我們在回應中看到的文字。
對我們來說看似兩個相同的單字,可能會依其在文字中的結構而產生為不同的 Token。請思考 API 如何根據單字「red」在文字中的情境產生 Token 值:
在上方第一個範例中,‘ red’ 的 Token「2266」包含尾隨空格(請注意,這些是示範用途的範例 Token ID)。
‘ Red’ 的 Token「2296」(前面有空格,且以大寫字母開頭)不同於小寫 ‘ red’ 的 Token「2266」。
當 ‘Red’ 用於句子開頭時,產生的 Token 不包含前導空格。Token「7738」不同於前兩個單字範例。
觀察:
Token 的可能性/頻率越高,分配給它的 Token 編號就越低:
在 3 個句子中,句點產生的 Token 都相同(「13」)。這是因為在語料庫資料中,句點在情境上的用法相當相似。
‘red’ 產生的 Token 會依其在句子中的位置而異:
句中小寫:‘ red’ -(Token:「2266」)
句中大寫:‘ Red’ -(Token:「2297」)
句首大寫:‘Red’ -(Token:「7738」)
