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

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

更新日期:17 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 化處理會因語言而異。例如,「Cómo estás」(西班牙文,意思是「你好嗎」)有 10 個字元,卻包含 5 個 token。非英文文字通常會產生較高的 token 與字元比例,這可能會影響成本及限制。

例子

以下是一些真實文字範例及其約略 token 數:

  • Wayne Gretzky 的名言「You miss 100% of the shots you don’t take」= 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 編號就越低:

  • 句號所生成的 token 在 3 個句子中都相同(「13」)。這是因為從語境來看,句號在整個語料庫資料中的用法相當相似。

  • ‘red’ 所生成的 token 會因它在句子中的位置而有所不同:

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

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

    • 句子開頭的大寫:‘Red’ - (token:「7738」)

這篇文章對你有幫助嗎?