Token 是什麼,為什麼 AI 收費要用這個單位算
Token 不是固定等於一個字或一個單字。搞懂文字怎麼被 tokenizer 切開,才能理解上下文限制與 API 帳單。
本篇內容
模型先看到的是 token,不是你眼中的字數
送進語言模型之前,文字通常會先經 tokenizer 轉成 token id。Token 可以是一個完整單字、單字的一部分、標點、空白,或某些語言中的一個或多個字元;實際切法取決於那個模型使用的 tokenizer。
為什麼同一句話換模型,token 數可能不同
Tokenizer 的詞彙表與切分演算法是模型系統的一部分。常見片段可能被合併成一個 token,少見字串則可能拆成很多個。程式碼、URL、特殊符號、混合語言與罕見專有名詞尤其容易出現和肉眼字數差很多的結果。
因此不要把「一個 token 大約等於幾個字」當成精確換算公式。估算內容長度可以用經驗值,但真正做成本控制或避免超出上下文時,最好用該模型對應的 tokenizer 或供應商回傳的 usage。
上下文視窗到底在裝什麼
一次請求裡常見的 token 來源
| 來源 | 會不會吃上下文 | 容易被忽略的地方 |
|---|---|---|
| System / developer 指令 | 會 | 每輪都可能跟著請求送出 |
| 使用者訊息 | 會 | 長文件與附件轉成文字後可能很大 |
| 歷史對話 | 會 | 對話愈長,重送的歷史愈多 |
| 工具結果/檢索內容 | 會 | 搜尋摘要、RAG 片段也會佔空間 |
| 模型輸出 | 通常計入總上下文限制 | 回答愈長,就留給輸入的空間愈少 |
所以「模型支援很長上下文」不代表你可以把整個資料庫每次都塞進去。可用容量還要留給系統指令、歷史對話、工具結果與最終輸出,而且長上下文本身也會增加延遲與成本。
帳單為什麼常常不是你以為的字數
API 常把輸入與輸出 token 分開計價,價格也可能不同。真正容易讓成本增加的情況,不只是一段回答太長,而是每次請求都重複帶著大量不必要的歷史、文件或工具結果。
先從這些地方找不必要的 token
| 症狀 | 可能原因 | 可以先做什麼 |
|---|---|---|
| 對話越聊越慢 | 每輪都帶完整歷史 | 摘要舊內容或只保留必要狀態 |
| RAG 成本突然變高 | 取回片段太多或太長 | 調整 top-k、chunk 與重排策略 |
| 固定模板很長 | 大量不變文字反覆傳送 | 縮短指令;若供應商支援再評估快取機制 |
| 輸出費用高 | 回答沒有長度界線 | 明確設定輸出格式與合理長度 |
實際做產品時,我會怎麼看 token
- 先記錄每個 route 的 input / output usage,不要只看整月總帳單。
- 把長 prompt 拆開看:哪些是固定指令、哪些是歷史、哪些是檢索結果。
- 對不同模型不要直接沿用同一個 token 換算假設,實際跑 tokenizer 或看 usage。
- 成本優化最後才考慮換便宜模型;先清掉不必要的上下文,通常比較不傷品質。