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

甚麼是 token,以及如何計算它們?

更新日期:16 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」)

這篇文章對你有幫助嗎?