AI 互動教室 ‹ 個人地端大語言模型實作
下載 .py 單獨開啟實驗場 ↗ 留言回報
BILLING · 04 · 連續對話的帳單

Prompt Caching:
連續對話的錢怎麼算

上一課你看懂了 KV Cache:算過的前綴不用再算第二次。這一課換個角度看同一件事—— 那個「不用再算」,在帳單上長什麼樣子。

直覺會說:聊越久越貴,因為每一輪都要把越來越長的歷史整段送回去。 直覺只對了一半。真相是——那段越來越長的歷史,幾乎不要錢。 拉拉看下面兩根桿子:

不用快取
$0.7200
用快取
$0.4915
每一輪要付多少(兩排共用同一把尺)
上排紅=不用快取,越聊越貴  下排綠=用快取,趨於固定

每一輪固定問 1K、答 2K tokens。費率以官方公開定價的其中一組為例 (命中 $1、寫入 $12.5、輸出 $50,每百萬 tokens);價格會調整,實際以官方定價頁為準。

右邊的實驗場是真的 Python(在你的瀏覽器裡跑,不用安裝任何東西)。 首次載入約需 30–60 秒,正好夠你讀完第 1 節。這一課沒有任何網路呼叫—— 每一筆金額都是照費率一筆一筆算出來的,所以你可以把費率換成自己方案的數字重算。

01 · 從延遲到帳單

同一件事的兩張臉

上一課的重點是延遲:TTFT(第一個字多久蹦出來)大約等於「Prefill 時間 + 首 token 生成」。 prompt 越長,Prefill 越久,第一個字就越慢。開啟 Prefix Caching 之後, 相同前綴的 KV 直接重用、跳過重複的 Prefill,TTFT 因此大幅下降——共用前綴越長,效果越明顯。

這一課看的是同一個「跳過」的另一張臉:被跳過的那段 input,收費也跟著跳水。 供應商不必重算它,所以按更便宜的價目收——這就是連續對話能省錢的全部祕密。

但「相同前綴」四個字很嚴格:它是逐位元組比對,前面任何一個字元變了,後面全部作廢。 請求的組裝順序是工具定義 → 系統提示 → 對話訊息,越前面的東西一改,波及範圍越大。 最經典的反例:早年有服務把「今天日期」寫進系統提示的最前面—— 前綴每天(甚至每次請求)都不一樣,快取形同虛設,錢白白多付。 會變的東西(時間戳、隨機 ID、這次才問的問題)要排在後面,不是前面。

02 · 三種錢

連續對話,每一輪只付三種錢

先看價目。連續對話會用到的只有五種,而其中兩個比值決定一切

項目每百萬 tokens什麼時候付
Base Input$10沒被快取的一般輸入
Cache Write(5 分鐘)$12.50新內容第一次寫入快取
Cache Write(1 小時)$20改用長 TTL 時的寫入
Cache Hit$1重複讀取已快取的內容
Output$50模型產生的回答

命中只要一般輸入的 1/10;而寫入比一般輸入貴 25%——貴的那一次,會被之後每一次命中賺回來。

有了這張表,連續對話的規則只剩三行:

這一輪送出去的東西走哪一種價為什麼
舊內容:之前所有對話歷史$1上一輪已經寫進快取了,直接命中
新內容:這一輪新增的問題$12.50第一次出現,要付寫入
輸出:模型的回答$50跟快取無關,照常計費

關鍵在為什麼「舊內容一定命中」:對話歷史只增不改。 每一輪都是在上一輪後面接東西,前面那一大段一個字都沒動—— 這正好就是「共用前綴」的定義。所以連續對話天然吃得到快取,你什麼設定都不用做。

把教材裡的經典情境(系統提示 10K、每輪問 1K、答 2K)算三輪,會長這樣:

第 1 輪 寫入 11K → $0.1375 輸出 2K → $0.100 小計 $0.2375 ← 什麼都還沒快取 第 2 輪 命中 13K → $0.013 寫入 1K → $0.0125 輸出 2K → $0.100 小計 $0.1255 ← 歷史 13K 只花 1 分錢 第 3 輪 命中 16K → $0.016 寫入 1K → $0.0125 輸出 2K → $0.100 小計 $0.1285 ← 每輪成本趨於固定 三輪總計 $0.4915 同一段對話不用快取要 $0.7200 省 32%

第 2 輪和第 3 輪的小計幾乎一樣,這是快取最舒服的地方:聊得再久,下一輪要花多少你都猜得到。

03 · 越聊越省

省多少?拉三根桿子就知道

三輪省 32% 只是一個點。右邊的三根拉桿(系統提示長度、輪數、回答長度)會把兩條累計成本曲線畫出來, 先猜再拉,看你的直覺準不準。三個方向的答案是:

  • 輪數是最猛的變數:3 輪省 32%、10 輪省 57%、20 輪省 68%。 因為每多一輪,就多一份「被重複計價的歷史」被快取吃掉。
  • 系統提示越長越省,但影響小得多:聊 3 輪時,2K 的系統提示省 22%、40K 省 43%; 可是只要聊到 20 輪,2K 和 40K 都落在 65–74% 之間。它畢竟只是一段固定長度的前綴。
  • 回答拉長反而讓比例縮水:輸出那 $50/MTok 不受快取影響。 快取省的是 input,不是 output。

還有一個反直覺的角落值得你親手拉一次:把輪數拉到 1。 畫面會告訴你「反而貴 13%」——問一句就走人,寫入的溢價還沒有任何一次命中把它賺回來。 快取是為連續對話設計的,一次性的問答用不到它。第 2 輪就轉正(省 19%),之後一路擴大。

第 4️⃣ 節把總額拆開,是本課最值得盯著看的一張圖:左邊是每輪的 input token 數量、 右邊是每輪的花費。同一段對話,兩張圖的形狀完全不一樣—— 左邊那塊代表歷史的綠色越疊越高,右邊卻幾乎貼在地上。 聊到第 10 輪時,37K 的歷史只花 $0.037(同樣這些 token 走一般輸入要 $0.37), 而那一輪有 67% 的錢是付給輸出的。

04 · 前綴一改就作廢

真正貴的不是聊太久,是讓前綴改變

既然快取綁在「一模一樣的前綴」上,那麼會讓你痛的就只有一件事:前綴被改掉。 三種常見狀況會做到這件事,而它們在帳單上的效果完全一樣——整段歷史失效、下一輪重新寫入:

發生了什麼為什麼前綴會變
中途切換模型快取跟模型綁定,換一顆就是換一個快取空間,整段重讀
對話中增減工具 / MCP工具定義排在最前面(比系統提示還前面),一變後面全滅,而且內容還變長了
閒置超過 TTL沒人動它,快取自己過期了

差別不在單次代價,在你控不控制得了、會發生幾次

  • 只發生一次 → 一次性代價。在 12 輪的情境裡,第 4 輪過期一次多付 $0.218, 之後曲線的斜率就跟原本平行了。閒置過期沒那麼可怕。
  • 反覆發生 → 比不用快取還貴。把右邊的選單切到「每輪都換模型比較答案」: 12 輪要 $5.325,而完全不用快取只要 $4.500——貴了 18%。 因為每輪都失效的話,你每一輪都在付比一般輸入貴 25% 的寫入價,卻一次命中都沒吃到。

這就是「換來換去比不切還貴」的算式版本。想比較兩顆模型的答案? 開兩個對話各問各的,而不是在同一個對話裡來回切。

05 · 日常怎麼用

帶得走的幾個習慣

這一課的算式適用於任何「輸入分成一般/寫入/命中三種價」的服務。落到日常:

情境你該知道的
訂閱制方案通常自動用長 TTL(1 小時),用量含在方案內。離開一小時內回來,快取都還在——基本上不用管。
API 按量計費預設 5 分鐘 TTL。只要下一次請求在 5 分鐘內開始,計時器就重新開始——連續聊天基本上不會過期,會過期的是你離開太久。常常離開比較久的話可以改用 1 小時 TTL,代價是寫入價變兩倍,要多命中幾次才回本。
怎麼知道有沒有命中回應的 usage 裡有 cache_read_input_tokens(命中)與 cache_creation_input_tokens(寫入)。連續幾次請求都是 0 命中,就代表前綴每次都被改掉了——回頭找那個會變的東西。
其他計費工具邏輯一模一樣:cached input 都比一般 input 便宜。三個習慣通吃——同一個 session 聊到底、別中途換模型、去帳務頁盯 cached tokens 的佔比。

兩則冷知識收尾。第一,助理工具內建的系統提示動輒數千行, 但那是平台注入的,不會出現在你的 input 帳單上——你付的是自己訊息的 token。 第二,想知道自己的訊息到底幾個 token,別用第三方分詞器猜: 官方有 count-tokens 端點,把訊息原封不動傳進去就回你 token 數。

最後一個尺度感:快取省的是零頭,選對模型省的是大頭—— 同一個工作流換一顆模型,成本可能差一個數量級。但零頭是你不用動腦就能省下來的, 而且它同時買到更快的 TTFT。

覺得算這些錢小家子氣?2026 年上半年,矽谷掀起一波「Token 退燒潮」: 特斯拉把員工每週 AI 支出上限設在 200 美元(此前有工程師一週燒掉數千美元); Uber 的年度 AI 預算 4 月就見底,6 月起每人每工具每月上限 1,500 美元; Meta 發現員工為了內部用量排行榜競相衝 token、成本指數成長,乾脆撤下排行榜; Amazon 警告工程師別「為用而用」,Walmart 給自家開發平台設了 token 上限 (2026 年 5–7 月 Financial Times、The Information、CNBC 等公開報導)。 當帳單大到公司得立規矩,「懂計費、讓前綴穩定」就不是零頭,是基本素養。

06 · 實戰

換你動手

挑戰在 notebook 的 6️⃣ 節,由淺到深:

LEVEL 1

my_write 改成 WRITE_1H(1 小時 TTL,$20/MTok), 看三輪總價變多少、還省不省。長 TTL 是免費的嗎?

LEVEL 2

my_sys 從 10K 改成 2K,再改成 40K,各跑 3 輪與 20 輪。 「省的比例」對哪個參數比較敏感——系統提示長度,還是輪數?

LEVEL 3

估一次你自己的用量:平常一個工作階段大概聊幾輪、系統提示(含工具說明)多長? 用 breaks= 算出「乖乖聊完」與「中間換兩次模型」的差額, 並且說得出那筆差額是怎麼來的。

卡住了?每一題在 notebook 末節都有折疊解答——先自己做,再打開對照。

07 · 驗收

情境測驗

離開前試試看:下面的情境都真的會遇到。每題選一個你認為的最佳做法,選了馬上看得到解釋。

Q1 情境題

你要拿一份 30K tokens 的規格文件做問答,估計會問十幾個問題。哪種做法最省?

同一個對話 = 同一段共用前綴。文件只在第一輪付一次寫入,之後每一輪都以命中價(一般輸入的 1/10)重複使用——輪數越多省越兇,十幾輪的量級落在省六成以上。A 是最貴的做法:每次都是全額 input,等於把 30K 付十幾遍。C 直覺上省 token,但每次貼的段落不同 = 前綴每次都不一樣,一次命中都吃不到,還可能漏掉關鍵資訊。D 最糟:快取跟模型綁定,換一次就整段重讀,這正是本課算過「比不用快取還貴」的那條路。

Q2 錯誤診斷

你把 notebook 的「對話輪數」拉到 1,其他不變,結果它說用快取反而比較貴。最可能的原因是?

系統提示 10K、聊 1 輪:不用快取 $0.210、用快取 $0.237 → 反而貴 13%

快取的收支是「先付溢價、再靠命中回本」:第一輪要把 11K 以 $12.50/MTok 寫進去(不用快取只要 $10),多付的部分要等第 2 輪的命中才賺得回來。把輪數改成 2,同一組參數立刻轉為省 19%。C 剛好說反了——寫入就發生在第一輪,只是那一輪還沒人來讀它;D 不成立,兩邊的輸出費用完全一樣,不會造成差異;A 是常見誤解,這裡的差異純粹來自寫入與一般輸入的價差。結論:一次性的問答用不到快取,它是為連續對話設計的。

Q3 錯誤診斷

你習慣在同一個對話裡每輪都換一顆模型比較答案。notebook 跑出這個結果——為什麼會比「完全不用快取」還貴?

乖乖聊到底 $1.783 → 每輪都換模型 $5.325(多付 $3.542) 比完全不用快取($4.500)還貴 18%

關鍵是單價不是數量。A 說的「token 變多」其實沒發生——不用快取時,每一輪本來就要把整段歷史送回去,兩邊送的 token 一樣多;差別在於那些 token 被算成 $12.50/MTok 的寫入,而不是 $10/MTok 的一般輸入,貴 25%,而且因為下一輪又換模型,這筆寫入永遠等不到人來讀。B 在這個模擬裡不成立(全程同一組費率);D 跟快取無關。修法:想比較模型就開兩個獨立對話各問各的,讓每個對話各自維持自己的前綴。

Q4 情境題

你發現午休離開 40 分鐘後回來,接著問的那一輪特別貴(帳單上多了一大筆寫入)。最合理的處置是?

過期的代價是一次性的:多付那一筆之後,累計成本曲線的斜率就跟原本平行了(本課的 12 輪情境裡是 $0.218)。真正會不斷失血的是反覆改前綴——每改一次就多付一筆「當下歷史 × 價差」,而歷史只會越來越長。A 反而更糟:清掉對話等於主動把前綴丟掉,下一輪從零重寫;C 只在「常常離開超過 5 分鐘還會回來」時划算,寫入價變兩倍,要多命中幾次才回本,一律開反而可能虧;D 治標而且傷害教學品質——本課的數字說得很清楚,省的比例主要由輪數決定,不是系統提示長度。

Python 環境載入中(首次約 30–60 秒)…讀完第 1 節它就好了