在使用大模型(如 豆包、文心、千問、gpt、claude)API時候,就會有一個繞不開的核心概念:
Token
一般大模型廠商會告訴你1000個token多少錢,百萬個token多少錢?
那么
- Token到底什么意思呢?
- 如何估算大致自己要用多少Token呢?
一、Token 到底是什么?
一句話定義:
Token 是模型“能理解的最小文本單位”,簡稱** 最小意義單元或者詞元**
比如:今天/中午/吃/白菜 大概是包含了四個Token;你/吃/了/嗎/ 大概率是包含4個token。
這里需要注意:
- 每個大模型能夠理解的最小文本單元不一定完全一樣,同樣問題+答案不同大模型消耗的Token也可能不一樣。
- 各個大模型和人類能夠理解的最小意義單元有差異,但是不大。
所以
簡單估算Token量可以按照人類理解的文本最小意義單元進(jìn)行估算;精確估算要拿到具體大模型廠商提供的Token計算方法。
二、Token量怎么計算
2.1 簡單估算
英文示例
unbelievable → un / believe / able
?? 3 個 Token
?? 中文示例
今天天氣很好 → 今天 / 天氣 / 很好
?? 3 個 Token(也可能是 5 個)
Token 的切分是“統(tǒng)計結(jié)果”,不是固定規(guī)則
根據(jù)統(tǒng)計結(jié)果,我們有以下簡單快速估計方法:
? 英文
Token ≈ 字符數(shù) ÷ 4
這里的字符指,a、b、c+標(biāo)點符號。
? 中文
1 個字或者符號 ≈ 1 Token
? 中英混合
中文字?jǐn)?shù) ×1+英文字母數(shù) ÷4+標(biāo)點符號數(shù)×1
2.2 精確計算
部分大模型有公開它的Token計算公式
比如GPT的[Tokenizer](https://platform.openai.com/tokenizer)。因為很難精確計算加上Token計算考慮歷史,國內(nèi)大模型大多數(shù)并沒有提供類似工具。
聊到這里,我們知道一句話Token怎么計算,那我們跟大模型交互都是過程中,哪些會被計算到呢?
三、大模型使用的時候,Token 計費包含哪些?
總費用 = 輸入 Token + 輸出 Token
輸入包括:
- 問答系統(tǒng)預(yù)先設(shè)置提示詞;
- 歷史對話;
- 當(dāng)前問題;
輸出包括:
- 模型回答
?關(guān)鍵點
你每次請求,都會帶上“全部上下文”(因為大模型沒有記憶,記憶請求大模型的時候記憶模塊拼接上去的內(nèi)容)
?? 所以:
你以為你說了一句話,其實你在“復(fù)述整個歷史”
?? 示例
你說:
把我們討論的內(nèi)容概括總結(jié)下
但實際發(fā)送:
歷史1 + 歷史2 + 歷史3 + 概括總結(jié)
?? 結(jié)果:
?Token 是“累計”的
每一輪都會:
- 帶上之前所有內(nèi)容
- Token 持續(xù)變大
這也是很多人使用計算Token工具算出來和實際不一樣
這不是工具的問題,而是你算的不是“真實輸入”
真實請求包含:
System Prompt(可能隱藏)
+ 歷史對話
+ 當(dāng)前輸入
+ JSON結(jié)構(gòu) / role字段
?? 工具往往只算“你輸入的文本”
除此之外,平臺會“偷偷加內(nèi)容”
例如:
默認(rèn)系統(tǒng)提示詞
安全策略
工具描述(function calling)
注入內(nèi)容
自動裁剪歷史
自動做摘要
自動拼接
?? 這些你看不到,但都算 Token
?? 本質(zhì)總結(jié)
Token 計算不準(zhǔn),不是算法問題,而是“系統(tǒng)邊界問題”,當(dāng)然也涉及到成本問題。
那如何減少Token使用,降低成本呢,下面列舉下比較常見的幾種方法
- 歷史裁剪
比如:只保留最近3~5輪;
比如:語音輸入20s,就丟棄以前歷史
- 歷史摘要
500 Token → 30 Token
- 限制輸出
請用100字以內(nèi)回答
- Context Manager,參考【多輪對話系統(tǒng)是如何工作的?】中context設(shè)計
System Prompt
+ Recent Context
+ Summary
+ User Input
?? 核心思想:
保留最近細(xì)節(jié),壓縮歷史信息
四、最終總結(jié)
Token 是模型理解世界的最小單位,而你真正付費的,是“上下文 + 輸出”的總信息量。
優(yōu)秀的大模型使用者,本質(zhì)上是在做“Token預(yù)算管理”。