跳至主要內容
技術

AI Coding 成本怎麼控:從 Token 用量到 Model Routing

AI Coding 成本怎麼控:從 Token 用量到 Model Routing
Agentic Engineering 實戰手冊 第 11 / 14 篇 ,前往系列總覽

這是「Agentic Engineering 實戰手冊」系列的第十一篇。上一篇:Multi-Agent 編排實戰

上個月帳單 $287,這個月 $148

上個月我的 AI coding 總帳單是 $287。嚇了一跳。

不是用太多,工作量其實差不多,問題出在使用方式:超長的 session 導致 context window 持續膨脹、探索性的 codebase 搜尋吃掉大量 token、該用便宜 model 的地方用了貴的。

花了一個週末分析之後,下一個帳期降到 $148。我的工作型態大致相近,但這不是控制實驗:任務難度、模型更新與快取命中都可能影響結果。能確定的是,我同時改了 context pruning、model routing 與 session management,帳單下降了 48%。

重點不是「少用」,是「聰明用」。如果你也有 token 燒光的焦慮,這篇從工程面給你具體的解法。

Token 成本解剖學

要省錢,先搞懂錢花在哪。

先看用量桶,不要假設三種價格

Token 類型什麼時候產生你能控制嗎
Input tokens你給 model 的一切:system prompt、CLAUDE.md、conversation history、code context是——context engineering 直接影響
Output tokensModel 回給你的一切:code、解釋、tool calls部分——精準的 spec 讓 agent 少寫廢話
Thinking / reasoning部分模型推理時產生的 token或用量視產品而定;有些會併入 output 計費,不是固定的第三種單價

真正隱藏的成本殺手是 input tokens

在我的長 session 裡,input tokens 常高於 output,因為每一輪都要帶上可用的 history、instructions 與 code context。但比例會受工具的 compaction、cache、deferred tool loading 和任務型態影響,不能把 3–5 倍當通則。

一個 session 跑了 50 輪對話,最後幾輪每次都要送入幾十萬 token 的 history——光是這些重複的 input 就占了帳單的大頭。

一次「幫我修這個 bug」的用量怎麼看

下面是我某次 session 的粗略拆分,用來說明觀念,不是 Claude Code 的正式 billing 明細:

System prompt + CLAUDE.md:     ~5,000 tokens
Conversation history (20 輪):  ~40,000 tokens
Agent 讀的 code files:         ~15,000 tokens
Agent 的 tool calls:            ~8,000 tokens
Agent 的 output (code + 說明):  ~3,000 tokens
Extended thinking:              ~5,000 tokens
─────────────────────────────────────────────
Total:                         ~76,000 tokens

這筆紀錄裡,最後產生的 code 只占很小一部分,history 才是主要來源。換一個 output-heavy 的文件任務,比例可能完全不同;所以第一步應該看自己的 usage report,不是套我的百分比。

別把任務類型換算成固定美元

模型價格、訂閱額度與 cache 折扣都會變,同一個「修 bug」也可能差兩個數量級。比較耐用的算法是:

單次 API 成本 ≈
  未快取 input tokens × input 單價
  + cache write / read tokens × 對應單價
  + billed output tokens × output 單價

實際欄位以供應商帳單為準;使用訂閱方案時,還要把 rate limit 與超額規則算進來。文章不寫死單價,請查 Claude API 官方 pricing 文件或你所用供應商的即時頁面。

Token 黑洞排行

  1. Refactor——agent 需要讀很多檔案,理解整體架構,然後做大量修改
  2. Codebase exploration——「幫我搞懂這個系統怎麼運作」類型的任務,agent 會讀幾十個檔案
  3. Long debugging sessions——history 本身通常是逐步累積,不是指數成長;但若每輪都重送愈來愈長的前文,整個 session 的累計 input 可能接近二次成長

優化策略一:Context Pruning

回到 Context Engineering 的核心觀念:context 不是越多越好,剛好夠就行。

精簡 CLAUDE.md

每多一行 CLAUDE.md,就多花幾個 token 在每一輪對話裡。乘以 session 裡的對話輪數,成本累積驚人。

Before(示意):400 行的 CLAUDE.md,假設每輪約 4,000 tokens;若完全未快取,30 輪的累計原始輸入約為 120,000 tokens

After:100 行的 CLAUDE.md,每輪 ~1000 tokens × 30 輪 = 30,000 tokens

原始輸入差 90K tokens,但實際帳單差額還要看 prompt caching、方案與模型價格,不能直接從這個示意推導每月省 $90。

Session 管理紀律

黃金法則就一句:一個 session 做一件事。

一個 session 跑太久,conversation history 會持續膨脹。若每輪都帶上前面內容,單輪 input 會變長,累計用量也會加速上升;工具的 compaction 與 caching 會改變實際成本。

改善做法

  • 一個 task 一個 session。task 做完就關,開新 session 做下一個。
  • 如果 task 需要多輪 iteration,中途做 checkpoint(更新 plan/TODO),然後開新 session 繼續。
  • 利用 Claude Code 的 context compaction,當 context 太大時它會自動壓縮舊的對話。但與其依賴自動壓縮,不如主動控制 session 長度。

Sub-Agent 模式

探索性的任務(「幫我搞懂這個模組的架構」)特別燒 token。解法是用 sub-agent:

主 agent: 「研究 auth 模組的架構」
  → 派出 sub-agent(cheap model、獨立 context)
  → sub-agent 讀 20 個檔案,消耗 200K tokens
  → 回報 2000 token 的摘要給主 agent

主 agent 的 context 可能只增加一份摘要,但整體系統仍然付了 sub-agent 的探索成本,還多了摘要與協調開銷。這招主要是保護主 context、隔離雜訊,不保證總 token 更少;只有換用較便宜模型、避免重複探索時才可能省錢。

優化策略二:Model Routing

不是所有任務都需要最貴的模型。

我的 Model 選擇框架

任務類型先選的能力層級原因
簡單問答、分類快速/低成本先用最便宜、能穩定達標的模型
日常 coding、bug fix中階通用用測試結果決定是否升級
複雜架構決策高推理同時保留人類評估與第二意見
Code review中階起跑高風險 diff 再升級
Commit message快速/低成本任務短、格式容易驗收
長篇寫作依品質評測長度不等於一定要最貴模型
Codebase exploration中階或較便宜 sub-agent先限制範圍,避免重複讀檔

實際省下多少?

別先套一張看似精準的模型價目表。價格、快取折扣與可用模型都會變,任務的 token 分布也不一樣。比較可靠的做法,是從自己的帳單與 eval 開始:

  1. 把常見任務分成簡單、標準與高推理三組。
  2. 各組挑一批真實案例,記錄成功率、review 時間、返工與缺陷。
  3. 先用較便宜的可用模型跑,再把失敗或高風險案例升級。
  4. 用同一時期的官方單價與實際 billed tokens 計算差額。

這樣算出的才是你的節省,不是別人的模型組合在理想條件下推導出的數字。

怎麼切換

Claude Code 可以用 /model 切換當前可用模型;確切 alias 會隨產品更新。我的 commit skill 只要求「使用能穩定產生正確格式的最低成本層級」,不把某個家族名稱永久寫死。

優化策略三:Prompt Caching & Batching

Prompt Caching

Anthropic 的 prompt caching 會對符合條件的相同 prefix 重用快取,降低後續 input 成本。Claude Code 或 API 是否自動啟用、最小長度、TTL 與單價都可能變,應看當前 usage 欄位,不要只憑 session 看起來一樣就假設命中。

怎麼提高 cache hit rate

  • CLAUDE.md 保持穩定——頻繁修改 CLAUDE.md 會導致 cache miss
  • 把穩定內容放前面、動態內容放後面(cache 是 prefix-based)
  • 避免在穩定 prefix 中插入 timestamp、random ID 等每次變動的資料

Batching 策略

把相似的小任務合成一個 request:

Before(5 個獨立 request):

1. "修正 Button component 的 hover color"
2. "修正 Card component 的 border radius"
3. "修正 Input component 的 focus style"
4. "修正 Modal component 的 backdrop color"
5. "修正 Toast component 的 animation"

5 次 system prompt 載入 + 5 次 CLAUDE.md 載入 = 大量重複的 input tokens。

After(1 個 batch request):

修正以下 5 個 component 的 CSS 問題:
1. Button: hover color
2. Card: border radius
3. Input: focus style
4. Modal: backdrop color
5. Toast: animation

這樣可以減少重複探索與請求 overhead,但不保證省 60%。Batch 太大也會擴張 scope、增加 review 難度,甚至讓其中一個錯誤拖累全部;只有彼此相關、能一起驗收的小修改才適合合併。

預算不要從別人的級距抄

我以前把每月 $20–300 分成 Light、Medium、Heavy,後來覺得這種表沒有決策價值。同樣 $150,對個人 side project 可能太高,對能縮短事故時間的團隊工具可能很便宜。更實用的是先設定三個欄位:

欄位怎麼定
成本上限你願意為這類工作承擔的月費、API 與維運成本
成功指標lead time、review 時間、返工率、缺陷或事故時間
停損條件連續幾週沒有改善,或品質/安全指標惡化就降級或停用

ROI 計算

不要拿一個沒有來源的「台灣工程師平均時薪」去替自己算 ROI。用你的實際成本:

月收益 ≈ 可重新利用的淨節省時數 × 你的機會成本
          + 減少缺陷/事故的預期價值

月總成本 = 訂閱 + API + review/返工 + 維運與安全成本

只有「省下來的時間真的被重新利用」,才能全額算收益。第 7 篇的單一案例也不能當成每天固定省兩小時的證據。

我具體做了什麼把帳單從 $287 降到 $148

  1. Session 拆分:從平均 45 分鐘/session 降到 20 分鐘/session。對話輪數從 30 降到 12。
  2. Model routing:約 70% 任務改用較低成本層級(之前大多用最高階層級)。
  3. Sub-agent 探索:邊界清楚的 codebase exploration 改由 sub-agent 執行,保護主 context;它不一定降低總用量。
  4. CLAUDE.md 瘦身:從 400 行精簡到 100 行。任務特定的指令移到 rules files 和 skills。
  5. Batch 處理:小任務合併。一天 15 個 request 降到 8 個。

每一項單獨看都不是巨大的改變;同一個帳期間合計看到 48% 降幅。因為同時改了多個變數,我不能把比例精確歸因到某一招。

Takeaway

  1. 先看自己的 usage,再找最大的用量來源。我的長 session 主要花在 history,但別人的工作可能是 output 或工具結果。縮短 session 與精簡常駐 context 常有效;sub-agent 主要隔離 context,不保證省總 token。

  2. Model routing 要用 eval 守住品質。從最低成本、能達標的模型開始;成功率、review 時間或缺陷惡化就升級。不能先承諾一定省 40–50% 且品質不變。

  3. 沒有適用所有人的月費甜蜜點。用成本上限、成功指標與停損條件管理,比抄別人的 $100–200 或 5–10x ROI 更可靠。


上一篇:Multi-Agent 編排實戰 下一篇:Agent 安全網設計

留言討論

esc
輸入關鍵字搜尋文章...
查看收藏 →