Prompt Caching:
連續對話的錢怎麼算
上一課你看懂了 KV Cache:算過的前綴不用再算第二次。這一課換個角度看同一件事—— 那個「不用再算」,在帳單上長什麼樣子。
直覺會說:聊越久越貴,因為每一輪都要把越來越長的歷史整段送回去。 直覺只對了一半。真相是——那段越來越長的歷史,幾乎不要錢。 拉拉看下面兩根桿子:
每一輪固定問 1K、答 2K tokens。費率以官方公開定價的其中一組為例 (命中 $1、寫入 $12.5、輸出 $50,每百萬 tokens);價格會調整,實際以官方定價頁為準。
右邊的實驗場是真的 Python(在你的瀏覽器裡跑,不用安裝任何東西)。 首次載入約需 30–60 秒,正好夠你讀完第 1 節。這一課沒有任何網路呼叫—— 每一筆金額都是照費率一筆一筆算出來的,所以你可以把費率換成自己方案的數字重算。
同一件事的兩張臉
上一課的重點是延遲:TTFT(第一個字多久蹦出來)大約等於「Prefill 時間 + 首 token 生成」。 prompt 越長,Prefill 越久,第一個字就越慢。開啟 Prefix Caching 之後, 相同前綴的 KV 直接重用、跳過重複的 Prefill,TTFT 因此大幅下降——共用前綴越長,效果越明顯。
這一課看的是同一個「跳過」的另一張臉:被跳過的那段 input,收費也跟著跳水。 供應商不必重算它,所以按更便宜的價目收——這就是連續對話能省錢的全部祕密。
但「相同前綴」四個字很嚴格:它是逐位元組比對,前面任何一個字元變了,後面全部作廢。 請求的組裝順序是工具定義 → 系統提示 → 對話訊息,越前面的東西一改,波及範圍越大。 最經典的反例:早年有服務把「今天日期」寫進系統提示的最前面—— 前綴每天(甚至每次請求)都不一樣,快取形同虛設,錢白白多付。 會變的東西(時間戳、隨機 ID、這次才問的問題)要排在後面,不是前面。
連續對話,每一輪只付三種錢
先看價目。連續對話會用到的只有五種,而其中兩個比值決定一切:
| 項目 | 每百萬 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)算三輪,會長這樣:
第 2 輪和第 3 輪的小計幾乎一樣,這是快取最舒服的地方:聊得再久,下一輪要花多少你都猜得到。
省多少?拉三根桿子就知道
三輪省 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% 的錢是付給輸出的。
真正貴的不是聊太久,是讓前綴改變
既然快取綁在「一模一樣的前綴」上,那麼會讓你痛的就只有一件事:前綴被改掉。 三種常見狀況會做到這件事,而它們在帳單上的效果完全一樣——整段歷史失效、下一輪重新寫入:
| 發生了什麼 | 為什麼前綴會變 |
|---|---|
| 中途切換模型 | 快取跟模型綁定,換一顆就是換一個快取空間,整段重讀 |
| 對話中增減工具 / MCP | 工具定義排在最前面(比系統提示還前面),一變後面全滅,而且內容還變長了 |
| 閒置超過 TTL | 沒人動它,快取自己過期了 |
差別不在單次代價,在你控不控制得了、會發生幾次:
- 只發生一次 → 一次性代價。在 12 輪的情境裡,第 4 輪過期一次多付 $0.218, 之後曲線的斜率就跟原本平行了。閒置過期沒那麼可怕。
- 反覆發生 → 比不用快取還貴。把右邊的選單切到「每輪都換模型比較答案」: 12 輪要 $5.325,而完全不用快取只要 $4.500——貴了 18%。 因為每輪都失效的話,你每一輪都在付比一般輸入貴 25% 的寫入價,卻一次命中都沒吃到。
這就是「換來換去比不切還貴」的算式版本。想比較兩顆模型的答案? 開兩個對話各問各的,而不是在同一個對話裡來回切。
帶得走的幾個習慣
這一課的算式適用於任何「輸入分成一般/寫入/命中三種價」的服務。落到日常:
| 情境 | 你該知道的 |
|---|---|
| 訂閱制方案 | 通常自動用長 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 等公開報導)。 當帳單大到公司得立規矩,「懂計費、讓前綴穩定」就不是零頭,是基本素養。
換你動手
挑戰在 notebook 的 6️⃣ 節,由淺到深:
把 my_write 改成 WRITE_1H(1 小時 TTL,$20/MTok), 看三輪總價變多少、還省不省。長 TTL 是免費的嗎?
把 my_sys 從 10K 改成 2K,再改成 40K,各跑 3 輪與 20 輪。 「省的比例」對哪個參數比較敏感——系統提示長度,還是輪數?
估一次你自己的用量:平常一個工作階段大概聊幾輪、系統提示(含工具說明)多長? 用 breaks= 算出「乖乖聊完」與「中間換兩次模型」的差額, 並且說得出那筆差額是怎麼來的。
卡住了?每一題在 notebook 末節都有折疊解答——先自己做,再打開對照。
情境測驗
離開前試試看:下面的情境都真的會遇到。每題選一個你認為的最佳做法,選了馬上看得到解釋。
Q1 情境題
你要拿一份 30K tokens 的規格文件做問答,估計會問十幾個問題。哪種做法最省?
同一個對話 = 同一段共用前綴。文件只在第一輪付一次寫入,之後每一輪都以命中價(一般輸入的 1/10)重複使用——輪數越多省越兇,十幾輪的量級落在省六成以上。A 是最貴的做法:每次都是全額 input,等於把 30K 付十幾遍。C 直覺上省 token,但每次貼的段落不同 = 前綴每次都不一樣,一次命中都吃不到,還可能漏掉關鍵資訊。D 最糟:快取跟模型綁定,換一次就整段重讀,這正是本課算過「比不用快取還貴」的那條路。
Q2 錯誤診斷
你把 notebook 的「對話輪數」拉到 1,其他不變,結果它說用快取反而比較貴。最可能的原因是?
快取的收支是「先付溢價、再靠命中回本」:第一輪要把 11K 以 $12.50/MTok 寫進去(不用快取只要 $10),多付的部分要等第 2 輪的命中才賺得回來。把輪數改成 2,同一組參數立刻轉為省 19%。C 剛好說反了——寫入就發生在第一輪,只是那一輪還沒人來讀它;D 不成立,兩邊的輸出費用完全一樣,不會造成差異;A 是常見誤解,這裡的差異純粹來自寫入與一般輸入的價差。結論:一次性的問答用不到快取,它是為連續對話設計的。
Q3 錯誤診斷
你習慣在同一個對話裡每輪都換一顆模型比較答案。notebook 跑出這個結果——為什麼會比「完全不用快取」還貴?
關鍵是單價不是數量。A 說的「token 變多」其實沒發生——不用快取時,每一輪本來就要把整段歷史送回去,兩邊送的 token 一樣多;差別在於那些 token 被算成 $12.50/MTok 的寫入,而不是 $10/MTok 的一般輸入,貴 25%,而且因為下一輪又換模型,這筆寫入永遠等不到人來讀。B 在這個模擬裡不成立(全程同一組費率);D 跟快取無關。修法:想比較模型就開兩個獨立對話各問各的,讓每個對話各自維持自己的前綴。
Q4 情境題
你發現午休離開 40 分鐘後回來,接著問的那一輪特別貴(帳單上多了一大筆寫入)。最合理的處置是?
過期的代價是一次性的:多付那一筆之後,累計成本曲線的斜率就跟原本平行了(本課的 12 輪情境裡是 $0.218)。真正會不斷失血的是反覆改前綴——每改一次就多付一筆「當下歷史 × 價差」,而歷史只會越來越長。A 反而更糟:清掉對話等於主動把前綴丟掉,下一輪從零重寫;C 只在「常常離開超過 5 分鐘還會回來」時划算,寫入價變兩倍,要多命中幾次才回本,一律開反而可能虧;D 治標而且傷害教學品質——本課的數字說得很清楚,省的比例主要由輪數決定,不是系統提示長度。