什麼是 Token?
Token 是 OpenAI 模型處理文字時的基本組成單位。依語言與語境而定,它們可能短至單一字元,也可能長至完整的單字。空格、標點符號與單字的一部分都會影響 Token 數量。這就是 API 在產生回應前,於內部如何切分你的文字。
對英文來說,一些實用的經驗法則:
1 token ≈ 4 個字元
1 token ≈ ¾ 個單字
100 tokens ≈ 75 個單字
1–2 句 ≈ 30 tokens
1 段落 ≈ 100 tokens
~1,500 個單字 ≈ 2,048 tokens
Tokenization 會因語言而異。例如,「Cómo estás」(西班牙文的「你好嗎」)10 個字元卻包含 5 個 token。非英文文本通常會產生較高的 token 對字元比例,這可能影響成本與限制。
範例
以下是一些真實世界的文字樣本及其約略 token 數:
Wayne Gretzky 的名言「You miss 100% of the shots you don’t take」= 11 tokens
OpenAI Charter = 476 tokens
美國《獨立宣言》= 1,695 tokens
Token 數量如何計算
當你把文字送到 API:
文字會被切分成 tokens。
模型會處理這些 tokens。
回應會以一串 tokens 生成,然後再轉回文字。
Token 使用量會在數個類別中追蹤:
輸入 tokens – 你請求中的 tokens。
輸出 tokens – 回應中生成的 tokens。
快取 tokens – 對話歷史中重複使用的 tokens(通常以較低費率計費)。
推理 tokens – 在某些進階模型中,於產生最終輸出前,內部會包含額外的「思考步驟」。
這些數量會出現在你的 API 回應中繼資料裡,並用於計費與使用量追蹤。
若要進一步探索 tokenization,你可以使用我們的互動式 Tokenizer 工具,它能讓你計算 token 數量,並查看文字如何被切分成 tokens。
或者,如果你想以程式方式進行 tokenization,可使用 Tiktoken,這是一個快速的 BPE tokenizer,專為 OpenAI 模型使用。
Token 上限
每個 模型 都有一個最大合計 token 上限(輸入 + 輸出)。目前高容量模型在上下文中可支援多達數十萬個 token,但實際限制可能會因模型版本與你的使用等級而有所不同。
若你超過上限,你可以:
縮短或改寫提示詞(prompt)。
把大量文字拆成較小區塊。
在送出前先摘要或前處理輸入內容。
Token 計價
API 使用量以每個 token 計費,並依模型以及 token 屬於輸入、輸出或快取而有所不同。請參閱 OpenAI 的 定價頁面 取得最新費率。有些推理模型可能會在內部使用更多 tokens,但其目標是藉由降低完成每項任務所需的 token 數來提升效率。
探索 tokens
API 會依語料庫資料中的上下文來處理詞彙。模型會取得提示詞(prompt),將輸入轉成 token 清單、處理提示詞,並把預測的 tokens 轉回我們在回應中看到的詞彙。
對我們來說看似相同的兩個單字,可能會因其在文字中的結構而被生成為不同的 tokens。請看看 API 如何依據上下文,為單字「red」生成 token 值:
在上方第一個例子中,‘ red’ 的 token「2266」包含了尾端空格(注意,這些是用於示範的 token ID)。
‘ Red’ 的 token「2296」(前面有空格,且以大寫開頭)不同於小寫 ‘ red’ 的 token「2266」。
當 ‘Red’ 用在句首時,生成的 token 不包含前置空格。token「7738」不同於前兩個例子中的單字 token。
觀察:
一個 token 越可能/越常見,分配給它的 token 編號就越小:
句點的 token 在 3 句中都相同(「13」)。這是因為在語料庫資料中,句點在上下文上使用方式相當一致。
‘red’ 的 token 會依其在句子中的位置而變化:
句中小寫:‘ red’ -(token:「2266」)
句中大寫:‘ Red’ - (token:「2297」)
句首大寫:‘Red’ -(token:「7738」)
