Token 在程式設計中有多重含義,是最常見卻最容易混淆的術語之一。主要指詞法分析的最小語法單位、認證授權憑證與AI 模型的文字處理單位,根據上下文有完全不同的技術意義與應用場景。
Token 的三種主要定義
1. 詞法分析 Token(編譯器理論)
Token 是程式語言詞法分析器(Lexer)將原始碼分解後的最小語法單位,供語法分析器(Parser)進一步處理:
原始碼:int main() { return 0; }
Token 序列:
[關鍵字:int] [識別符:main] [符號:(] [符號:)] [符號:{] [關鍵字:return] [整數:0] [符號:;] [符號:}]
Token 類型:
- 關鍵字(keyword):int、if、while、return
- 識別符(identifier):變數名、函式名 main、userName
- 運算子(operator):+、-、=、==
- 分隔符(delimiter):(){}[];,.
- 字面量(literal):"hello"、123、true
範例(Python):
def calculate(a, b):
return a + b
Token 分解:
關鍵字: def, return
識別符: calculate, a, b
符號: (, ), :, +
2. 認證 Token(Web 安全)
Token 是伺服器發放的身分憑證,替代 Session Cookie,用於無狀態認證:
流程:
1. 使用者登入 → 伺服器驗證 → 返回 JWT Token
2. 後續請求 → Authorization: Bearer
3. 伺服器驗證 Token → 授權存取
JWT Token 結構:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. ← Header
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ. ← Payload
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c ← Signature
HTTP 使用:
GET /api/profile
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
程式實作:
// 登入取得 Token
const response = await fetch('/api/login', {
method: 'POST',
body: JSON.stringify({ username, password })
});
const { token } = await response.json();
// 儲存並使用
localStorage.setItem('token', token);
fetch('/api/profile', {
headers: {
'Authorization': `Bearer ${token}`
}
});
3. AI Token(大型語言模型)
Token 是語言模型處理文字的最小單位,由 Tokenizer 將文字分解:
英文:1 token ≈ 0.75 單字 ≈ 4 字元
中文:1 token ≈ 1 字元(含標點)
混合:依 Tokenizer 規則(如 BPE、WordPiece)
範例:
"Hello World" → [31373, 995] (2 tokens)
"你好世界" → [2664, 6230] (2 tokens)
計費影響:
GPT-4o:
輸入:$5/百萬 tokens
輸出:$15/百萬 tokens
"Hello World".length = 11 字元
但占用 2 tokens → 計費依 tokens
Token 在不同場景的應用比較
| 場景 | Token 定義 | 範例 | 用途 |
|---|---|---|---|
| 編譯器 | 語法單位 | int, main, + |
程式碼解析 |
| Web API | 認證憑證 | eyJhbGciOiJIUzI1NiIs... |
身分驗證 |
| AI 模型 | 文字單位 | [31373, 995] |
計費、上下文限制 |
| 區塊鏈 | 數位資產 | ERC-20 Token | 價值轉移 |
實際程式範例
1. 詞法分析器 Token
# 簡易 Python Tokenizer
def tokenize(code):
tokens = []
i = 0
while i < len(code):
if code[i].isspace():
i += 1
continue
if code[i].isalpha():
word = ''
while i < len(code) and code[i].isalnum():
word += code[i]
i += 1
tokens.append(('KEYWORD' if word in ['int', 'if', 'return'] else 'ID', word))
elif code[i].isdigit():
num = ''
while i < len(code) and code[i].isdigit():
num += code[i]
i += 1
tokens.append(('NUMBER', num))
else:
tokens.append(('SYMBOL', code[i]))
i += 1
return tokens
print(tokenize("int main() { return 0; }"))
# [('KEYWORD', 'int'), ('ID', 'main'), ('SYMBOL', '('), ...]
2. JWT Token 驗證
import jwt
from datetime import datetime, timedelta
# 生成 Token
payload = {
'user_id': 123,
'username': 'alice',
'exp': datetime.utcnow() + timedelta(hours=24)
}
token = jwt.encode(payload, 'secret_key', algorithm='HS256')
# 驗證 Token
decoded = jwt.decode(token, 'secret_key', algorithms=['HS256'])
print(decoded) # {'user_id': 123, 'username': 'alice', ...}
3. AI Token 計算
import tiktoken
enc = tiktoken.get_encoding("cl100k_base") # GPT-4 使用的 tokenizer
text = "Hello World! 你好世界"
tokens = enc.encode(text)
print(f"原始文字:{len(text)} 字元")
print(f"Token 數量:{len(tokens)}")
print(f"Token ID:{tokens}")
# 還原
print(f"還原文字:{enc.decode(tokens)}")
Token 安全最佳實務
認證 Token:
- HTTP-only Cookie(防 XSS)
- 短暫有效期(15分鐘 Refresh Token)
- 後端驗證,不信任客戶端
- CSRF 防護(雙 Token)
❌ localStorage(XSS 風險)
AI Token 優化:
- Prompt 精簡(刪除冗餘說明)
- 使用摘要而非完整歷史
- 結構化輸入(JSON Schema)
- Tokenizer 預測工具
Token 常見陷阱
- Token 洩漏到 URL(瀏覽紀錄)
- 無效期檢查(永久 Token)
- 前端自行驗證(繞過檢查)
- Token 重用(Session Fixed Attack)
Token 是程式設計的「原子單位」概念,不同領域有不同實作,但核心都是最小不可分割的處理單位。理解詞法 Token 助你掌握編譯原理,認證 Token 打造安全 API,AI Token 優化成本與效能。三種 Token 思維相通,掌握本質就能跨領域應用!