Prompt caching 詳解

@akshay_pachaar
英語4 個月前 · 2026年3月09日
467K
1.1K
159
18
2.0K

TL;DR

深入探討 prompt caching 的運作機制,解析 KV caching 與架構規範如何協助 Claude 達到 92 % 的快取命中率,並實現顯著的成本節省。

一份關於 Claude 如何達到 92% 快取命中率的案例分析

每次 AI Agent 採取行動時,都必須付出代價。

它會從頭重新讀取所有內容。

系統指令、工具定義、專案上下文——這些它三輪前就已載入過的資料。全部重讀,每一輪都是如此。

這就是所謂的「上下文稅」。對於長時間運行的代理工作流程來說,這往往是你整個 AI 基礎設施中最昂貴的項目。

來算一筆帳:一個包含 20,000 個 token 的系統提示詞,運行了 50 輪,這意味著 100 萬個 token 的重複計算 以全價計費,卻沒有產生任何新的價值。

解決方法是提示詞快取(Prompt Caching)。但要善用它,你需要了解底層實際發生的情況。

從「什麼會改變」與「什麼不會改變」開始

在優化任何東西之前,你需要清楚地思考 Agent 提示詞(上下文)的結構。

你的 Agent 每次發送的請求都包含兩個根本不同的部分:

靜態前綴: 包含系統指令、工具定義、專案上下文、行為準則。這個內容在會話的每一輪中都是完全相同的。

動態尾部: 用戶訊息、工具輸出、終端機觀察結果。這部分是每個請求獨有的,並且會隨著對話進行而不斷增長。

Akshay 🚀 - inline image

這個區別至關重要。靜態前綴是你一直在無謂重複計算的昂貴部分。動態尾部才是唯一真正需要全新計算的部分。

提示詞快取的原理是儲存靜態前綴的數學狀態,以便未來的請求可以完全跳過重新計算。你支付一次處理該前綴的費用。之後的每一輪都從記憶體中讀取。

為什麼這樣有效:Transformer 實際做了什麼

要真正理解快取為何如此有效,你需要了解模型在讀取你的提示詞時內部發生的情況。

每個 LLM 推理請求都包含兩個階段:

第一階段:預填充(Prefill)

這是模型處理你完整輸入提示詞的階段。它屬於計算密集型,意味著它會對上下文中的每個 token 執行密集的矩陣乘法運算。模型會讀取所有內容,並建立一個表示。這是緩慢且昂貴的階段。

第二階段:解碼(Decode)

這是模型逐個產生輸出 token 的階段。它屬於記憶體密集型而非計算密集型,因為模型大部分時間花在讀取先前計算好的狀態,而不是執行繁重的計算。

Akshay 🚀 - inline image

在預填充階段,Transformer 會為每個 token 建立三個向量:查詢(Query)、鍵(Key)和值(Value)。注意力機制利用這些向量來計算每個 token 與序列中其他 token 的關係。

這裡是關鍵洞察:Key 和 Value 向量只取決於它們之前的 token。 一旦為給定的前綴計算完畢,它們就永遠不需要更改。

下圖直觀地解釋了我們剛才討論的內容:

Akshay 🚀 - inline image

如果沒有快取,這些 Key-Value 張量會在請求完成時被丟棄。下一個請求從頭開始,再次為所有 20,000 個 token 重新計算它們。

KV 快取透過儲存這些張量來解決這個問題。 基礎設施將它們保存在推理伺服器上,並以輸入文字的加密哈希值作為索引。當一個具有相同前綴的新請求到來時,哈希值匹配,張量立即被檢索出來,模型跳過所有這些計算。

這將每個產生 token 的計算複雜度從 O(n²) 降低到 O(n)。對於一個重複 50 輪的 20,000 個 token 前綴來說,這是一個巨大的減少。

經濟學

了解定價結構是讓這個架構決策如此重要的原因。

以下是 Anthropic 在其模型系列中為快取定價的方式:

Akshay 🚀 - inline image

需要內化的三個數字:

  • 快取讀取成本為基礎輸入價格的 10%,每個從快取讀取的 token 可享有 90% 的折扣
  • 快取寫入成本比基礎輸入價格高出 25%,這是儲存 KV 張量所需的小額溢價
  • 延長至 1 小時的快取成本為基礎價格的 2 倍

只有當你的快取命中率保持在高位時,這個數學公式才成立。這就引出了實踐中最好的實際案例。

Claude Code:30 分鐘會話逐步解析

Claude Code 的整個構建都圍繞一個目標:保持快取處於「熱」狀態。

為了具體理解這意味著什麼,讓我們逐步分析一個典型的 30 分鐘編碼會話如何進行,並追蹤哪些部分被計費,哪些沒有。

第 0 分鐘:會話開始

Claude Code 載入其系統提示詞和工具定義。它還會讀取你專案根目錄中的 CLAUDE.md 檔案,該檔案描述了程式碼庫和慣例。這個有效載荷通常超過 20,000 個 token。

這是整個會話中最昂貴的時刻。每個 token 都是全新的。但你只需要支付這個費用一次。

第 1 到 5 分鐘:第一批指令

你輸入第一個指令,例如「查看 auth 模組並提出改進建議」。

Claude Code 調度一個探索子 Agent(Explore Subagent)。它瀏覽程式碼庫、開啟檔案、執行 grep 指令,並建立相關程式碼的圖景。所有這些都被附加到動態尾部。

那 20,000 個 token 的靜態基礎呢?已經在快取中了。以 $0.30/MTok 而非 $3.00/MTok 的價格讀取回來。你只需要為新的工具輸出和你的訊息付費。

第 6 到 15 分鐘:深度工作

規劃子 Agent(Plan Subagent)接收來自探索子 Agent 的發現。Claude Code 不會逐字傳遞原始結果(這會不必要地膨脹動態尾部),而是傳遞一個簡潔的摘要。這使得後綴部分保持可管理,並維持快取效率。

規劃器產生一個結構化的實作計劃。你審查它、批准它,然後 Claude Code 開始進行更改。這個循環中的每一輪都從快取讀取 20,000 個 token 的前綴。每次快取命中都會重置 TTL,使快取在未來的輪次中保持熱度。

第 16 到 25 分鐘:迭代

你要求調整。Claude Code 修改其方法。更多的工具調用,更多的終端機輸出。動態尾部在增長,但這只代表了這個會話中新的、獨特的內容。

此時,會話總共處理了數十萬個 token。但那 20,000 個 token 的基礎在每一輪都從快取中讀取。

第 28 分鐘:執行 /cost

如果沒有快取,像這樣的會話很容易超過 200 萬個 token。以 Sonnet 4.5 的費率計算,大約是 $6.00

如果快取以高效率運行:

  • 絕大多數 token 以 $0.30/MTok 的價格從快取讀取
  • 只有新的動態尾部 token 會進行全新計算

實際上,在單一任務上,你預計可以實現 80% 以上的成本降低。現在,再將這個數字乘以每個用戶、每一天。

總結一下,以下是會話進行過程中系統提示詞佈局的變化:

Akshay 🚀 - inline image

打破一切規則的規則

關於提示詞快取,最違反直覺的一點是:

1 + 2 = 3。但 2 + 1 會導致快取未命中。

基礎設施對提示詞進行哈希運算。哈希值是一個用於加密學的標識符。如果順序中的任何內容發生變化,即使只是兩個元素的順序不同,哈希值也會改變。快取是空的。整個前綴將以全價重新計算。

由此得出的三條規則:

  1. 不要在會話期間添加或移除工具。快取的前綴包含工具。更改工具會使之後的所有快取內容失效。
  2. 切勿在會話中途切換模型。快取是特定於模型的。在對話中途切換到更便宜的模型需要重建整個快取。
  3. 切勿更改前綴來改變狀態。相反,Claude Code 會在下一個用戶訊息中添加一個標籤來提醒系統。前綴永遠不會改變。

這對你意味著什麼

以上所有內容解釋了 Claude Code 如何處理快取。如果你正在構建自己的 Agent,同樣的規則也適用。

以下是組織提示詞的方法:

  • 最頂部是系統指令和規則。不要在過程中更改。
  • 提前載入你需要的所有工具。不要添加或移除它們。
  • 之後是檢索到的上下文和文件。在持續時間內保持靜態。
  • 最底部是對話歷史和工具輸出。

啟用自動快取後,斷點會隨著對話進行而自動向前移動。

Claude Code 負責管理自己的快取。Anthropic 剛剛在其 API 中加入了自動快取功能,因此你也可以為自己的 Agent 做同樣的事情。

如果沒有自動快取,你必須記住 token 邊界在哪裡。錯誤的邊界意味著無法命中快取。

Akshay 🚀 - inline image

使用快取安全的分叉(cache-safe forking)來壓縮以適應上下文限制。使用相同的系統提示詞、工具和對話,然後將壓縮指令作為新訊息添加進去。

Akshay 🚀 - inline image

壓縮調用看起來與上一次調用幾乎完全相同。快取的前綴再次被使用。唯一被視為新的並計費的內容是壓縮指令。

要檢查 API 是否正常運作,請密切關注每個回應中的這三個欄位:

  • cache_creation_input_tokens⁣: 存入記憶體的 token 數量
  • cache_read_input_tokens⁣: 從記憶體讀取的 token 數量
  • input_tokens⁣: 照常處理的 token 數量

你的快取效率得分是讀取 token 數量與建立 token 數量的比值。像關注系統正常運行時間一樣關注它。

關鍵 takeaways

提示詞快取不是一個你可以簡單「開啟」的功能。它是一種你需要圍繞它建立的架構紀律。

Claude Code 是最好的例子,展示了在大規模應用時該領域的樣貌。

92% 的快取命中率。81% 的成本削減。

如果你正在構建 Agent,這就是藍圖。你無法忽視那筆稅;它確實存在。唯一重要的是你是在為它付費,還是想辦法消除它。

參考資料:

一鍵儲存

使用 YouMind AI 深度閱讀爆款文章

保存原文、追問細節、總結觀點,並在一個 AI 工作空間裡把爆款文章沉澱成可複用筆記。

了解 YouMind
寫給創作者

把你的 Markdown 變成乾淨的 𝕏 文章

圖片上傳、表格、程式碼區塊,往 𝕏 上手動重排太痛苦。YouMind 把整篇 Markdown 一鍵轉成乾淨、可直接發佈的 𝕏 文章草稿。

試試 Markdown 轉 𝕏

更多可拆解樣本

近期爆款文章

探索更多爆款文章