Pick Model

框架

你打一句話,AI 讀的是 10 萬個 token:提示詞快取的原理

模型沒有記憶,所以每一輪都要把整份對話重送一次。快取讓那份重複內容只收一折,代價是它只認「從第一個字開始一模一樣」的那一段。這篇不談設定,只把觀念講到你能自己判斷任何一個動作會不會打斷它。

目錄(14 節)
  1. 模型沒有記憶,這是所有事情的源頭
  2. 快取存的不是答案,是讀完那疊資料之後的腦內狀態
  3. 為什麼只能從第一個字開始一模一樣
  4. 所以工具會把不常變的東西排在前面
  5. 用一場真實對話走一遍
  6. 每個動作實際上發生了什麼
  7. 快取活多久,是送請求那一方寫死的
  8. 各家都有一份作廢清單,但清單各家不同
  9. 改專案規則檔不會打斷快取,但也不會生效
  10. 想放棄一條路,/rewind 比 /compact 便宜
  11. 開新對話的判準不是快取
  12. 訂閱使用者真正只有兩個旋鈕
  13. 這篇的限制
  14. 資料來源

你在一個開了整個下午的對話裡打了一句話,大概 100 個 token。那一輪實際送出去的是 10 萬個,其中 99.9% 是一模一樣的重複內容。

這不是誇飾,也不是特例。這篇要講的「提示詞快取」,處理的就是這 10 萬個 token 的錢。它在每一家工具上都是預設開著的,沒有調得更好這個選項,所以真正該懂的不是怎麼設定,是它什麼時候會失效。

這篇只講觀念,不講設定,也盡量不出現價格。錢怎麼算、漏在哪、各家形態差在哪,在快取成本那篇。

三句話講完這篇

  • 模型沒有記憶,所以每一輪都要把整份對話從頭重送一次,那才是你真正付錢的量
  • 快取把「讀完那疊資料之後的狀態」凍結起來重用,但它只認從第一個字開始、連續一模一樣的那一段
  • 所以你唯一要判斷的是:這個動作是追加在後面,還是動到前面

模型沒有記憶,這是所有事情的源頭

每次按下 Enter,送出去的不是你那一句話,是整份對話從頭到現在的全部內容。

模型是無狀態的,它不記得上一輪講過什麼。是我們每一輪都把整本簿子重新遞給它,最後一頁寫著新問題。介面看起來像「對話」,實際上比較像:你每次都遞給一位失憶的顧問一整疊資料,他從第一頁讀到最後一頁,然後回答。

理解這一句,後面全部都是它的推論。所謂快取,就是想辦法讓這位顧問不用每次都重讀那一疊。

快取存的不是答案,是讀完那疊資料之後的腦內狀態

那位顧問讀完 300 頁卷宗,腦中會建立起對這份卷宗的理解狀態。快取做的事,是把那個腦內狀態凍結起來。

下次你遞給他同樣的 300 頁加上新的第 301 頁,他不用重讀前 300 頁,直接解凍、接著讀第 301 頁就好。技術上那個腦內狀態叫 KV 張量,但你不用管這個名字。

這個比喻能推導出兩件事,而且兩件都很重要:

  • 省的是重讀的力氣,所以輸入可以打到一折
  • 不省回答的力氣,所以輸出永遠全價,沒有任何折扣

第二條是整件事的天花板。輸入重、輸出輕的工作(agent 讀十萬行程式碼只回兩百字)快取是決定性的;輸出重的工作(一次生成三千字)快取幫不上什麼忙。

還有一條容易被誤會的:快取不會讓回答變差。 它存的是確定性的中間計算結果,不是答案。命中與否,模型看到的東西完全一樣。沒有「為了準確度關掉快取」這種取捨。

為什麼只能從第一個字開始一模一樣

因為顧問對第 300 頁的理解,是建立在前面 299 頁之上的。同一句話放在不同脈絡,意思不一樣。

那個腦內狀態是按順序一層層疊上去的。你要是回頭去改第 3 頁,第 4 頁之後的所有理解都可能不同了,凍結的狀態就不能用,只能整份重讀。

這就是「前綴」的意思:只有從第一個字開始、連續一模一樣的那一段能重用。中間插一個字,後面全毀。

沒有逐檔案或逐段落的局部快取這回事。Anthropic、OpenAI、Gemini 三家的官方文件描述的都是同一個機制,差別只在要不要你手動開、最短要多少 token 才值得快取。

供應商 要不要你手動開 最短要多少 token
Anthropic 預設關,要在請求裡標記 512 至 4,096,依模型
OpenAI 自動 1,024
Gemini implicit 自動,另有 explicit 2,048 至 4,096,依模型

第一列有個陷阱值得單獨記住:Anthropic 沒開快取的失敗是靜默的。 不會報錯,只是每一輪都以全價重讀。所以直接接 API、從來沒帶過那個欄位的人,從來沒命中過快取。用 Claude Code 或任何 agent 工具的人不受影響,工具都已經幫你開好了。

第二列的存在理由是:建立快取本身要收一筆費用,太短的對話賺不回來。那筆費用多少、什麼時候回本,在成本那篇。

所以工具會把不常變的東西排在前面

既然只有前綴能重用,那讓前綴盡量不變就是設計重點。coding agent 的 context 都長這個樣子:

層 內容 什麼時候會變
系統提示詞 核心指令、工具定義、沙箱設定 載入的工具定義變了,或工具本身升級
專案脈絡 專案規則檔、自動記憶、環境資訊 session 啟動時,或清空、壓縮之後
對話 你的訊息、回覆、工具結果 每一輪

順序是重點。動到對話層,前面兩層還是命中;動到系統提示詞,整份都要重算,因為後面所有內容都排在一個不同的前綴後面。

還有兩個東西不在提示詞文字裡,但同樣是快取的鍵:模型和 effort 等級。每個模型有自己的快取,同一個模型的每個 effort 等級也有自己的快取。

用一場真實對話走一遍

以我做這份研究時的那場 Claude Code 對話為例,數字是粗估,不是實測:

階段 這一輪新增什麼 累計要重送的量
還沒開始講話 系統提示詞、工具定義、專案規則檔、記憶索引 約 20,000
第一句話 那句話加上列目錄、讀檔的工具結果 約 24,000
做了 12 次網路查詢 每一份抓回來的網頁內容 約 38,000
寫了一篇 4,861 字的文章 整份 markdown 約 45,000
跑 build、看了一張圖 終端機輸出加上圖片轉成的 token 約 48,000
又做了 16 次研究 又一批網頁內容 約 74,000
寫了一份 HTML 報告 整份原始碼 約 88,000
再打一句約 100 token 的話 那句話 約 100,000

開頭那句 10 萬 token 就是這樣來的。而這個量級不是特例:華盛頓大學 SyFI Lab 的 TraceLab 收集了 43 位開發者八個月、約 4,300 個 session 的真實軌跡,量到 Claude Code 每一步的前綴中位數是 126,180 個 token,新增的只有 857 個。

前綴比新增內容大兩個數量級,這就是快取存在的理由,也是一次失效那麼痛的理由。

每個動作實際上發生了什麼

有了上面的模型,你可以自己判斷任何一個動作:它是追加在後面,還是動到前面?

動作 對快取的影響 為什麼
打一句話 全部命中,最便宜 追加在最後面,前面完全沒動
agent 跑指令、讀檔、搜尋 全部命中 工具結果也是追加在最後面
抓一個網頁回來 當下命中,但留下永久成本 抓回來的內容黏在對話裡,之後每一輪都要重送
讀一張圖 同上 圖片一樣會轉成 token 並黏著
中途換模型或換 effort 全部失效 這兩個是快取的鍵,換了就是另一份快取
離開座位超過 5 分鐘 最容易發生的一種失效 凍結狀態被清掉,回來的第一句話要重讀整份

倒數第二列跟最後一列的差別值得說清楚:換模型是你按的,離開座位不是。實測資料顯示後者才是主要的成本來源,這條在成本那篇有完整的數字。

還有一個表格裡看不出來的性質:對話裡的東西只進不出。 除非壓縮或倒帶,否則今天早上抓的那個網頁,到現在每一輪都還在被重送。這就是為什麼 agent 工具會有「工具延後載入」「大量輸出存成檔案」這些設計,不是為了整潔。

快取活多久,是送請求那一方寫死的

這是最常被誤會成「模型自己判斷」的一件事。

TTL(存活時間)是送請求的那一方在請求裡直接寫死的靜態參數,不是模型決定,也不是伺服器看情況判斷。不寫就是預設的 5 分鐘。在 coding agent 裡,是那個工具幫你決定,而且是固定設定,不是每一輪動態評估:

登入方式 Claude Code 送出的 TTL 為什麼是這個預設
訂閱(Pro、Max) 自動 1 小時 你不按 token 付錢,多留 55 分鐘的成本落在供應商身上
API key 預設 5 分鐘,可用環境變數改 1 小時的快取寫入更貴,而這筆錢你付
subagent 一律 5 分鐘 不管你怎麼登入都一樣

這張表的來源是 Claude Code 官方快取文件。訂閱和 API 的分界怎麼影響你選方案,在月費實算那篇算過。

最後一個關於 TTL 的關鍵性質:它算的是「多久沒被碰」,不是「存在多久」。 每一次讀取都會讓計時器重來。所以只要你持續對話,整份前綴會一路被保溫,不會因為已經存在兩小時就自己過期。

各家都有一份作廢清單,但清單各家不同

機制五家通用,暴露給你的細節不一樣。文件寫得最完整的是 Claude Code,官方直接列了八個會作廢快取的動作。這一節綁定單一工具,但判斷原則可以搬到別家。

動作 打斷範圍 避不避得掉
切換模型 全部 可以,session 開頭就定好
切換 effort 等級 全部 可以,同上
開啟 fast mode 全部 可以,開頭就開,這個成本一整段對話只發生一次
MCP 伺服器連上或斷開 看情況 標準環境不用擔心,走 gateway 才要
啟用或停用 plugin 只有帶 MCP 的會 可以
用 deny 規則擋掉整個工具 全部 可以,改用範圍規則
/compact 對話層 部分,挑時機
升級 Claude Code 全部 不行,但可以控制時機

清單本身不用背,八條全部都是同一句話的推論:動到前面就是全部,追加在後面就沒事。 有兩條例外值得單獨講,因為它們的行為跟直覺相反。

改專案規則檔不會打斷快取,但也不會生效

專案根目錄與使用者層級的 CLAUDE.md 是在 session 啟動時讀一次,然後留在記憶體裡。你在 session 中途改它,會同時得到一個好消息跟一個壞消息:快取不會失效,但改動也不會套用。

Claude 會繼續用 session 啟動時載入的那個版本工作,新內容要等下一次 /clear、/compact 或重啟才會載入。輸出風格(output style)也是同一個模式。

兩個例外會即時生效:子目錄裡的 CLAUDE.md,以及帶 paths: frontmatter 的規則。這兩種是等 Claude 第一次讀到符合的檔案時才載入,所以在載入之前改是有效的;載入之後就變成對話歷史的一部分,中途再改一樣不會回溯。

如果你曾經改完規則檔覺得「怎麼沒反應」,答案就在這裡。

想放棄一條路,/rewind 比 /compact 便宜

兩個都能讓對話變短,成本結構卻完全相反。

/rewind 是把對話截斷回較早的一輪。剩下的歷史就是當初建立快取用的同一份內容,前面兩層也沒動,所以下一輪直接命中那個較早的條目。而且中間每一輪都讀過那個前綴,等於一路把它保溫著。

/compact 是把歷史換成一份摘要。新的歷史比較短,但跟舊的不共用前綴,所以對話層整份重建。更關鍵的是產生摘要這件事本身要另外送一次請求,帶著跟你對話一樣的系統提示詞、工具和完整歷史。

快取還熱的時候,那次請求讀的是快取,所以中途壓縮沒有 context 大小看起來的那麼貴。但放久了再壓縮,就沒有快取可以讀,整份歷史要以未快取價重新處理。這是為什麼恢復一個放了很久的 session 特別貴。

判斷方式:想保留脈絡繼續做就 /compact,挑任務之間的自然斷點;想整個放棄一條路就 /rewind。

開新對話的判準不是快取

最常見的誤解,是把「開新 session」當成快取問題的解法。它不是解決快取,它是放棄快取。

要分清楚兩件不同的成本:前綴太長,是每一輪都要重送 10 萬 token,就算只收一折也是錢;快取沒命中,是那 10 萬 token 這一輪收全價。開新對話解決的是第一個,代價是必然發生第二個。

關鍵在這句:失效的成本等於前綴大小乘以全價,所以小前綴失效很便宜,大前綴失效很貴。

情況 該怎麼做 為什麼
任務換了,舊內容用不到 開新的 不然每一輪都在付錢重送廢話
同一任務、馬上回來 繼續用 快取還熱,這是最便宜的狀態
同一任務、要離開很久 可以開新的 反正回來一定失效,小的失效比大的划算

一句話:判準是「舊的內容對接下來還有沒有用」,不是快取。 快取只是讓「有用」的那個情況變便宜而已。

訂閱使用者真正只有兩個旋鈕

如果你是買訂閱在用,前面那些細節有一半不歸你管:快取設定沒有旋鈕可調,命中率你看不到也影響不了,各家 TTL 與寫入成本要做 API 選型時才用得上。

剩下的兩個旋鈕就是這篇的全部結論:任務結束就開新對話,要離開很久之前先把手上的收個尾。

按 token 付錢的人要管的事比較多,那些在快取成本那篇。至於這些習慣值多少錢,我們在另一篇實測裡量過一個極端例子:一句過時的規則檔指令讓同一個任務從 3 輪變成 9.7 輪,成本 2.26 倍,品質完全一樣。

這篇的限制

  • 那張 10 萬 token 的對話推演是粗估,不是逐輪實測。 它示範的是量級與累積形態,不能當成你自己 session 的預測
  • 底層機制的描述做了簡化。 實際上快取的是注意力算出來的 KV 張量,以區塊雜湊鏈的形式串起來,本文用「凍結腦內狀態」代替。想看實作層細節請直接讀各家官方文件
  • 八項清單是 Claude Code 官方目前列出的範圍,不保證窮盡,且版本更新頻繁,舊版本行為不同
  • 各家對快取行為的揭露程度差很多。 消費端的聊天介面(網頁版、App)三家都沒有公開快取行為,本文不涵蓋那一層
  • 前沿的位置無關快取技術不在本文範圍。 目前商用 API 買得到的仍然是純前綴精確比對
  • 本文機制描述實查於 2026 年 8 月 8 日

資料來源

  1. Anthropic 官方 API 提示詞快取機制
  2. Anthropic 官方 Claude Code 提示詞快取文件
  3. OpenAI 官方提示詞快取文件
  4. Google 官方 Gemini 快取文件
  5. TraceLab:43 位開發者八個月的 coding agent 真實軌跡(arXiv:2606.30560)