cache_control
區塊實現提示快取的範例:
cache_control
參數進行快取。這使得可以在多個 API 呼叫中重複使用這個大型文本,而無需每次都重新處理它。僅更改使用者訊息允許您詢問關於這本書的各種問題,同時利用快取的內容,從而獲得更快的回應和提高效率。
tools
、system
和 messages
(按此順序),直到並包括標記為 cache_control
的區塊。Model | Base Input Tokens | 5m Cache Writes | 1h Cache Writes | Cache Hits & Refreshes | Output Tokens |
---|---|---|---|---|---|
Claude Opus 4.1 | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
Claude Opus 4 | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
Claude Sonnet 4 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
Claude Sonnet 3.7 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
Claude Sonnet 3.5 (deprecated) | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
Claude Haiku 3.5 | $0.80 / MTok | $1 / MTok | $1.6 / MTok | $0.08 / MTok | $4 / MTok |
Claude Opus 3 (deprecated) | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
Claude Haiku 3 | $0.25 / MTok | $0.30 / MTok | $0.50 / MTok | $0.03 / MTok | $1.25 / MTok |
cache_control
參數標記可重複使用內容的結尾以進行快取。
快取前綴按以下順序創建:tools
、system
,然後是 messages
。這個順序形成了一個層次結構,其中每個級別都建立在前一個級別之上。
cache_control
斷點時,系統會自動檢查所有先前內容區塊邊界(直到您明確斷點之前大約 20 個區塊)的快取命中cache_control
。任何快取少於此數量代幣的請求都將在不快取的情況下處理。要查看提示是否被快取,請參閱回應使用 欄位。
對於並發請求,請注意快取條目只有在第一個回應開始後才可用。如果您需要並行請求的快取命中,請在發送後續請求之前等待第一個回應。
目前,“ephemeral” 是唯一支援的快取類型,預設生命週期為 5 分鐘。
cache_control
斷點不會增加您的成本 - 您仍然根據實際快取和讀取的內容支付相同的金額。斷點只是讓您控制哪些部分可以獨立快取。
cache_control
指定進行快取。這包括:
tools
陣列中的工具定義system
陣列中的內容區塊messages.content
陣列中的內容區塊,適用於使用者和助手輪次messages.content
陣列中的內容區塊messages.content
陣列中的內容區塊cache_control
以啟用該部分請求的快取。
cache_control
快取。但是,當思考區塊出現在先前的助手輪次中時,它們可以與其他內容一起快取。以這種方式快取時,它們在從快取讀取時確實計算為輸入代幣。
tools
→ system
→ messages
。每個級別的更改都會使該級別和所有後續級別失效。
下表顯示不同類型的更改會使快取的哪些部分失效。✘ 表示快取失效,而 ✓ 表示快取保持有效。
什麼變化 | 工具快取 | 系統快取 | 訊息快取 | 影響 |
---|---|---|---|---|
工具定義 | ✘ | ✘ | ✘ | 修改工具定義(名稱、描述、參數)會使整個快取失效 |
網路搜尋切換 | ✓ | ✘ | ✘ | 啟用/停用網路搜尋會修改系統提示 |
引用切換 | ✓ | ✘ | ✘ | 啟用/停用引用會修改系統提示 |
工具選擇 | ✓ | ✓ | ✘ | tool_choice 參數的更改只影響訊息區塊 |
圖像 | ✓ | ✓ | ✘ | 在提示中任何地方添加/移除圖像都會影響訊息區塊 |
思考參數 | ✓ | ✓ | ✘ | 擴展思考設定的更改(啟用/停用、預算)會影響訊息區塊 |
傳遞給擴展思考請求的非工具結果 | ✓ | ✓ | ✘ | 當在啟用擴展思考時傳遞非工具結果時,所有先前快取的思考區塊都會從上下文中剝離,並且上下文中跟隨這些思考區塊的任何訊息都會從快取中移除。更多詳情,請參閱 使用思考區塊進行快取。 |
usage
中(或如果 串流 則在 message_start
事件中):
cache_creation_input_tokens
:創建新條目時寫入快取的代幣數量。cache_read_input_tokens
:此請求從快取中檢索的代幣數量。input_tokens
:未從快取讀取或用於創建快取的輸入代幣數量。tool_choice
和圖像使用在呼叫之間保持一致cache_control
參數,以確保所有內容都可以被快取tool_choice
的更改或提示中任何地方圖像的存在/缺失都會使快取失效,需要創建新的快取條目。有關快取失效的更多詳情,請參閱 什麼會使快取失效。cache_control
,但當您使用工具結果進行後續 API 呼叫時,它們會作為請求內容的一部分被快取。這通常在工具使用期間發生,當您將思考區塊傳回以繼續對話時。
輸入代幣計數:當思考區塊從快取讀取時,它們在您的使用指標中計算為輸入代幣。這對成本計算和代幣預算很重要。
快取失效模式:
cache_control
標記,這種快取行為也會發生cache_control
定義中包含 ttl
,如下所示:
cache_creation_input_tokens
欄位等於 cache_creation
物件中值的總和。
A
:最高快取命中的代幣計數(如果沒有命中則為 0)。B
:A
之後最高 1 小時 cache_control
區塊的代幣計數(如果不存在則等於 A
)。C
:最後一個 cache_control
區塊的代幣計數。B
和/或 C
大於 A
,它們必然是快取未命中,因為 A
是最高的快取命中。A
的快取讀取代幣。(B - A)
的 1 小時快取寫入代幣。(C - B)
的 5 分鐘快取寫入代幣。大型上下文快取範例
input_tokens
:僅使用者訊息中的代幣數量cache_creation_input_tokens
:整個系統訊息中的代幣數量,包括法律文件cache_read_input_tokens
:0(第一個請求沒有快取命中)input_tokens
:僅使用者訊息中的代幣數量cache_creation_input_tokens
:0(沒有新的快取創建)cache_read_input_tokens
:整個快取系統訊息中的代幣數量快取工具定義
cache_control
參數放在最後一個工具(get_time
)上,以將所有工具指定為靜態前綴的一部分。這意味著所有工具定義,包括 get_weather
和在 get_time
之前定義的任何其他工具,都將作為單個前綴被快取。這種方法在您有一組一致的工具,希望在多個請求中重複使用而不需要每次重新處理它們時很有用。對於第一個請求:input_tokens
:使用者訊息中的代幣數量cache_creation_input_tokens
:所有工具定義和系統提示中的代幣數量cache_read_input_tokens
:0(第一個請求沒有快取命中)input_tokens
:使用者訊息中的代幣數量cache_creation_input_tokens
:0(沒有新的快取創建)cache_read_input_tokens
:所有快取工具定義和系統提示中的代幣數量繼續多輪對話
cache_control
標記最後一條訊息的最後一個區塊,以便對話可以逐步快取。系統將自動查找並使用最長的先前快取前綴進行後續訊息。也就是說,先前標記為 cache_control
區塊的區塊後來沒有標記為此,但如果它們在 5 分鐘內被命中,它們仍然會被視為快取命中(也是快取刷新!)。此外,請注意 cache_control
參數放在系統訊息上。這是為了確保如果這個從快取中被驅逐(在超過 5 分鐘未使用後),它將在下一個請求中被重新添加到快取中。這種方法對於在持續對話中維護上下文而不重複處理相同資訊很有用。當這個設定正確時,您應該在每個請求的使用回應中看到以下內容:input_tokens
:新使用者訊息中的代幣數量(將是最少的)cache_creation_input_tokens
:新助手和使用者輪次中的代幣數量cache_read_input_tokens
:對話中直到前一輪的代幣數量整合所有內容:多個快取斷點
cache_control
參數快取所有工具定義。
cache_control
,以啟用對話隨著進展的增量快取。
input_tokens
:最終使用者訊息中的代幣cache_creation_input_tokens
:所有快取段中的代幣(工具 + 指令 + RAG 文件 + 對話歷史)cache_read_input_tokens
:0(沒有快取命中)input_tokens
:僅新使用者訊息中的代幣cache_creation_input_tokens
:添加到對話歷史的任何新代幣cache_read_input_tokens
:所有先前快取的代幣(工具 + 指令 + RAG 文件 + 先前對話)我需要多個快取斷點還是在末尾使用一個就足夠了?
快取斷點會增加額外成本嗎?
快取的生命週期是多長?
我可以使用多少個快取斷點?
cache_control
參數)。提示快取是否適用於所有模型?
提示快取如何與擴展思考配合使用?
如何啟用提示快取?
cache_control
斷點。我可以將提示快取與其他 API 功能一起使用嗎?
提示快取如何影響定價?
我可以手動清除快取嗎?
如何追蹤我的快取策略的有效性?
cache_creation_input_tokens
和 cache_read_input_tokens
欄位監控快取效能。什麼會破壞快取?
提示快取如何處理隱私和資料分離?
cache_control
都是安全的。為了成本效率,最好排除高度可變的部分(例如,使用者的任意輸入)不進行快取。
我可以將提示快取與批次 API 一起使用嗎?
為什麼我在 Python 中看到錯誤 `AttributeError: 'Beta' object has no attribute 'prompt_caching'`?
為什麼我看到 'TypeError: Cannot read properties of undefined (reading 'messages')'?