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

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

更新日期:25 days ago

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

  1. 文字會被切分成 tokens。

  2. 模型會處理這些 tokens。

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

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 越可能/越常見,分配給它的 token 編號就越小:

  • 句點的 token 在 3 句中都相同(「13」)。這是因為在語料庫資料中,句點在上下文上使用方式相當一致。

  • ‘red’ 的 token 會依其在句子中的位置而變化:

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

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

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

這篇文章有幫助嗎?