Claude Code 省 Token 實用指南
Claude Code 每次互動都會消耗 token,而成本主要取決於上下文大小 — 上下文越大,每則訊息的 token 消耗就越高。根據官方數據,平均每位開發者每天花費約 $6 美元,90% 的使用者日花費低於 $12。
但如果你不注意管理,token 很容易就被浪費掉了。以下整理了 9 個實用技巧,幫你把額度花在刀口上。
1. 選對模型:Sonnet 優先,Opus 留給難題
Opus 的 token 消耗大約是 Sonnet 的兩倍。大多數日常 coding 任務用 Sonnet 就夠了,只有複雜的架構設計或多步推理才需要切到 Opus。
Claude Code 提供以下模型選項:
| 模型別名 | 說明 |
|---|---|
sonnet | 使用最新的 Sonnet 模型,適合日常 coding 任務 |
opus | 使用最新的 Opus 模型,適合複雜推理任務 |
haiku | 快速且低成本,適合簡單任務 |
opusplan | 混合模式 — Plan Mode 用 Opus 推理規劃,切回執行模式自動換成 Sonnet 寫程式 |
opusplan 讓你同時擁有 Opus 的推理能力和 Sonnet 的執行效率。在 Plan Mode 中 Claude 用 Opus 分析架構、規劃方案,一旦切回正常模式開始寫程式碼,就自動切換為 Sonnet,省下大量 token。
在對話中隨時用 /model 切換模型,或在啟動時指定:
claude --model opusplan
如果有用到 subagent,簡單任務可以指定 model: haiku 進一步省成本。
2. 積極管理上下文:/clear 是你的好朋友
這是最重要的一點。Claude 的上下文視窗會累積所有對話、讀取的檔案、指令輸出。當上下文塞滿時,Claude 的表現會明顯下降,而且每則訊息的 token 成本也會飆升。
- 不同任務之間用
/clear重置 — 不相關的上下文只是在浪費 token - 糾正超過兩次就重開 — 如果同一個問題你已經修正 Claude 兩次以上,上下文已經被失敗的嘗試污染了,
/clear後用更精確的 prompt 重新開始 - 避免在一個 session 裡做不相關的事 — 典型的「廚房水槽 session」是最浪費 token 的模式
3. 善用 Auto Compact 自動壓縮
當對話接近上下文上限時,Claude Code 會自動壓縮歷史紀錄。你可以透過環境變數控制壓縮的觸發時機:
export CLAUDE_CODE_AUTO_COMPACT_WINDOW=200000
這會在上下文達到 200k token 時自動壓縮。你也可以手動執行 /compact 並給壓縮指示:
/compact 專注保留 API 變更與測試結果
在 CLAUDE.md 中也能設定壓縮偏好:
# 壓縮指示
壓縮時請專注保留測試輸出與程式碼變更
4. 調降延伸思考(Extended Thinking)
延伸思考預設是開啟的,對複雜的推理任務很有幫助,但每次請求可能消耗數萬個 thinking token。對於簡單任務,你可以:
- 用
/effort調低運算強度 - 在
/config中關閉延伸思考 - 設定環境變數限制 thinking token 上限:
export MAX_THINKING_TOKENS=8000
5. 寫精確的 Prompt,避免漫無目的的探索
模糊的請求會讓 Claude 大範圍掃描檔案,消耗大量 token。
| 不好的寫法 | 好的寫法 |
|---|---|
| 改善這段程式碼 | 在 auth.ts 的 login function 加上輸入驗證 |
| 修 bug | 使用者回報 session timeout 後登入失敗,檢查 src/auth/ 的 token refresh 邏輯 |
| 加測試 | 為 foo.py 寫一個測試,覆蓋使用者登出的 edge case,不要用 mock |
6. 用 Subagent 隔離大量讀取操作
當 Claude 需要研究 codebase 時,會讀取大量檔案,這些全部會進到你的上下文。改用 subagent 讓它在獨立的上下文中探索,只回傳摘要:
用 subagent 調查我們的認證系統如何處理 token refresh
Subagent 會在自己的上下文視窗中工作,完成後只回傳精簡的結果,不會污染你的主對話。
跑測試、讀 log 這類輸出很長的操作,也適合丟給 subagent 處理。
7. 精簡你的 CLAUDE.md
CLAUDE.md 在每次 session 開始時都會被載入上下文。如果塞了太多內容,不但浪費 token,Claude 反而可能會忽略你真正重要的規則。
建議做法:
- 控制在 200 行以內
- 只放 Claude 無法從程式碼自行推斷的資訊
- 把特定 workflow 的詳細說明搬到 Skills 裡,Skills 只在需要時才載入
對每一行問自己:「拿掉這行,Claude 會出錯嗎?」如果不會,就刪掉。
8. 用 Hooks 預處理資料,減少 Claude 需要消化的內容
與其讓 Claude 讀一個一萬行的 log 檔找錯誤,不如用 Hook 先 grep 出關鍵行再餵給它。上下文從數萬 token 降到幾百 token。
例如這個 PreToolUse Hook 會自動過濾測試輸出,只顯示失敗的部分:
#!/bin/bash
input=$(cat)
cmd=$(echo "$input" | jq -r '.tool_input.command')
if [[ "$cmd" =~ ^(npm test|pytest|go test) ]]; then
filtered_cmd="$cmd 2>&1 | grep -A 5 -E '(FAIL|ERROR|error:)' | head -100"
echo "{\"hookSpecificOutput\":{\"hookEventName\":\"PreToolUse\",\"permissionDecision\":\"allow\",\"updatedInput\":{\"command\":\"$filtered_cmd\"}}}"
else
echo "{}"
fi
9. 善用 Plan Mode 避免走錯路
對複雜任務,先按 Shift + Tab 進入 Plan Mode 讓 Claude 規劃再動手。這可以避免 Claude 一頭栽進去寫了一堆程式碼後發現方向錯了,再重寫又是一大筆 token。
流程建議:
- 探索 — 在 Plan Mode 讓 Claude 讀相關檔案、理解結構
- 規劃 — 讓 Claude 列出實作計畫,你確認後再開始
- 實作 — 切回 Normal Mode 開始寫程式碼
- 驗證 — 附上測試案例讓 Claude 自我驗證,減少來回修正
快速整理
| 技巧 | 省 Token 效果 |
|---|---|
| 改用 Sonnet | 消耗約 Opus 的一半 |
/clear 切換任務 | 避免不相關上下文累積 |
| Auto Compact | 自動壓縮過長對話 |
| 調降 Extended Thinking | 減少 thinking token |
| 精確 Prompt | 避免大範圍檔案掃描 |
| Subagent 隔離 | 長輸出不進主上下文 |
| 精簡 CLAUDE.md | 減少每次 session 的基礎消耗 |
| Hooks 預處理 | 過濾冗長輸出 |
| Plan Mode | 避免方向錯誤導致重工 |