OpenAI
此頁面由機器翻譯。查看原始英文文章

什麼是 Token,以及如何計算?

更新日期:20 days ago

什麼是 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 時:

  1. 文字會被拆分成 Token。

  2. 模型會處理這些 Token。

  3. 回應會以一連串 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 值:

Sentence split into color-coded tokens with Text selected over Token IDs
Token ID output as a list of integers with the Token IDs tab selected

在上方第一個範例中,‘ red’ 的 Token「2266」包含尾隨空格(請注意,這些是示範用途的範例 Token ID)。

Sentence split into color-coded token blocks: My favorite color is Red.
Tokenizer output with Token IDs selected and a list of numeric token IDs

‘ Red’ 的 Token「2296」(前面有空格,且以大寫字母開頭)不同於小寫 ‘ red’ 的 Token「2266」。

Tokenizer example splitting “Red is my favorite color.” into color-coded tokens
Tokenizer output with Token IDs selected and a list of token ID numbers

當 ‘Red’ 用於句子開頭時,產生的 Token 不包含前導空格。Token「7738」不同於前兩個單字範例。

觀察:

Token 的可能性/頻率越高,分配給它的 Token 編號就越低:

  • 在 3 個句子中,句點產生的 Token 都相同(「13」)。這是因為在語料庫資料中,句點在情境上的用法相當相似。

  • ‘red’ 產生的 Token 會依其在句子中的位置而異:

    • 句中小寫:‘ red’ -(Token:「2266」)

    • 句中大寫:‘ Red’ -(Token:「2297」)

    • 句首大寫:‘Red’ -(Token:「7738」)

這篇文章有幫助嗎?