今天只聚焦在 Token 怎麼計價、生成怎麼進行、模型怎麼選這三件事,會直接影響你系統設計與帳單,也可能導致容易做出錯誤架構決策的部分。
本篇不會重講 Transformer 的數學(網路上已有太多好文章)。加上前兩天說明了「工程」與「ML」,今天說明「LLM」進行打底。
一個假設但真實的對話:
主管:「我們的 AI 客服上個月花了多少?」
工程師:「大概……三萬多?」
主管:「為什麼比上個月多一倍,使用量只多了 20%?」
工程師:「……我查一下。」
查出來的原因通常是這幾個之一:有人把整份 FAQ 塞進系統提示、對話歷史沒有裁剪所以越滾越長、或是模型輸出沒有設上限,某些請求生成了兩千字的長篇大論。
這三個原因,都源自不理解 token 經濟。
📊 職缺訊號
「生成式 AI 部署與 LLMOps」出現在 38.7% 的生成式 AI 職缺中,而成本控制是其中最常被寫進 JD 的具體職責之一。原因很現實:LLM 應用的邊際成本不是零——這跟傳統軟體「寫完就幾乎免費複製」的直覺完全相反,也是最多團隊在 PoC 成功後、規模化時踩到的牆。

圖 7-1:token 經濟的兩個真相(依常見計價結構與單 token 產生時間推算的示範值)。左圖:一次請求的 token 組成,最貴的常是固定前綴與輸出。右圖:延遲結構中 prefill 幾乎固定、decode 隨輸出長度線性成長。
真相一:輸出比輸入貴,通常是 4~5 倍左右。 所以一段 400 token 的回答,成本相當於 2,000 token 的輸入。這代表「請用三句話回答」不只是體驗優化,也是成本優化。
真相二:你以為免費的固定前綴,是最大的支出。 上圖中 5,000 token 的系統提示與 few-shot 範例,每一次請求都要付一次錢。每天 5 萬次請求,就是 2.5 億 token——這通常比使用者實際輸入的部分貴上幾十倍。
好消息是:這一段正好是最容易優化的(Day 26 會談 prompt caching,可省下約 55%)。
Token 是模型的最小處理單位,透過 BPE(Byte Pair Encoding)之類的演算法切出來。粗略的直覺:
| 語言 | 大約換算 | 意義 |
|---|---|---|
| 英文 | 1 token ≈ 4 字元 ≈ 0.75 個單詞 | 最省 |
| 繁體中文 | 1 個字 ≈ 0.6–1.5 token(依模型而異) | 中文通常比英文貴 |
| 程式碼 | 縮排、符號都吃 token | 比想像中貴 |
| JSON | 大量括號與引號 | 結構化輸出的隱藏成本 |
這對台灣的實務有直接影響:同樣一份文件,中文版的 token 數常常比英文版多。做成本估算時,別直接套用英文的換算比例。

圖 7-2:LLM 推論的兩階段結構(示意流程)。Prefill 決定「等多久才看到第一個字」,Decode 決定「字出得快不快」。
這個區分很重要,因為它解釋了兩件事:
Decode 時每產生一個 token 都要參考前面所有 token,為了不重算,模型把中間狀態存起來,這就是 KV cache。它的大小是:
KV cache = 2 × 層數 × KV head 數 × head_dim × 位元組數 × 序列長度 × 批次大小
以 8B 級模型(32 層、8 個 KV head、head_dim 128、fp16)計算,每個 token 每條序列約 128 KiB。看起來很小,但乘上長度與併發就很可觀:批次 16、序列 8,192,KV cache 就要約 17 GB——加上 16 GB 的權重,一張 80GB 的卡也只是剛好夠用。
這就是「為什麼我的 GPU 明明還有記憶體,併發卻上不去」的答案。Day 26 會完整處理。
與其看別人的估算,不如算你自己的。這段程式碼不需要 GPU:
"""估算 LLM 應用的成本結構——把假設攤開來,才知道要優化哪裡。"""
# 以「每百萬 token」為單位的相對單價(用相對值,避免綁定特定供應商報價)
PRICE_IN, PRICE_OUT, PRICE_CACHED = 1.0, 5.0, 0.1
req = {
"系統提示+few-shot": 5000, # 固定前綴,每次都送
"檢索脈絡": 3000, # RAG 取回的內容
"對話歷史": 1500,
"使用者輸入": 100,
}
output_tokens = 400
daily_requests = 50_000
in_tokens = sum(req.values())
cost_in = in_tokens * daily_requests / 1e6 * PRICE_IN
cost_out = output_tokens * daily_requests / 1e6 * PRICE_OUT
print(f"每日輸入成本:{cost_in:>8.1f}({in_tokens} token/次)")
print(f"每日輸出成本:{cost_out:>8.1f}({output_tokens} token/次)")
# 優化一:固定前綴命中 prompt caching
cached = req["系統提示+few-shot"]
cost_in_cached = ((in_tokens - cached) * PRICE_IN + cached * PRICE_CACHED) \
* daily_requests / 1e6
print(f"啟用前綴快取後:{cost_in_cached:>6.1f}"
f"(省 {(1 - cost_in_cached / cost_in):.1%})")
# 優化二:輸出長度砍半
print(f"輸出減半後:{cost_out / 2:>10.1f}(省 {cost_out / 2:.1f})")
執行結果會告訴你一件事:在多數 RAG 應用中,「固定前綴」與「輸出長度」這兩個旋鈕的效果,遠大於換一個便宜模型。 先轉這兩個旋鈕,再考慮換模型。
2026 年的模型地景大致分兩個陣營,選擇時看四個維度:
| 維度 | 閉源 API(如 Claude、GPT、Gemini) | 開放權重自建(如 Llama、Qwen、Mistral) |
|---|---|---|
| 起步成本 | 幾乎為零,當天就能上線 | 需要 GPU 與工程投入 |
| 邊際成本 | 隨用量線性成長 | 前期固定成本高,量大後單位成本低 |
| 資料主權 | 資料離開組織(需檢視供應商條款) | 完全自控,適合金融、醫療、半導體內網 |
| 客製深度 | 受限於供應商提供的微調介面 | 可完整微調、量化、改推論引擎 |
既然要做應用,就必須理解為什麼 LLM 會一本正經地胡說。
原因藏在訓練目標裡:語言模型被訓練來預測「下一個最合理的 token」,而不是「說真話」。當模型對某個事實沒有足夠的訓練訊號時,它不會停下來說「我不知道」——它會產生一個在語言上最通順的答案。通順與正確是兩件事,而模型只被獎勵了前者。
這個認知會直接改變你的架構決策:
| 錯誤的期待 | 正確的做法 |
|---|---|
| 「換更強的模型就不會胡說了」 | 更強的模型幻覺較少,但不會歸零;架構上必須假設它會錯 |
| 「在提示裡寫『不要編造』就好」 | 有幫助但不可靠;要給它可依據的來源(RAG,Day 18–20) |
| 「使用者自己會判斷」 | 流暢的錯誤答案最難被察覺;要強制引用來源讓使用者可驗證 |
| 「上線後再看看」 | 要先建評測集量化幻覺率,才知道能不能上線(Day 24) |
換句話說:幻覺不是靠「調教」解決的,是靠系統設計解決的——給依據、要引用、能拒答、有評測。這四件事分別對應本系列的 Day 18、20、20、24。
💡 一個務實的起手式
先用 API 把產品做對,再談要不要自建。 理由是:多數專案在做對之前就死了,而自建的工程成本會拖慢你驗證產品的速度。等到用量穩定、且能算出「自建的損益平衡點」(Day 15、26 會給算法)再說。
唯一的例外是資料主權——如果法規或客戶合約明確不允許資料外流,那從第一天就要走自建路線,沒有折衷。