甚麼是 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 時:
文字會被拆分成 token。
模型會處理這些 token。
回應會以一連串 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 值:
在上面的第一個例子中,‘ red’ 的 token「2266」包含一個前導空格(注意,這些 token ID 只是用作示範的例子)。
‘ Red’ 的 token「2296」(帶前導空格,且以大寫字母開頭)與小寫 ‘ red’ 的 token「2266」不同。
當 ‘Red’ 用於句首時,生成的 token 不包括前導空格。token「7738」與前面兩個字詞例子不同。
觀察:
Token 越有可能/越常見,分配給它的 token 編號就越低:
句號所生成的 token 在 3 個句子中都相同(「13」)。這是因為從語境來看,句號在整個語料庫資料中的用法相當相似。
‘red’ 所生成的 token 會因它在句子中的位置而有所不同:
句子中間的小寫:‘ red’ - (token:「2266」)
句子中間的大寫:‘ Red’ - (token:「2297」)
句子開頭的大寫:‘Red’ - (token:「7738」)
