「Prompt caching」(提示快取)透過允許從提示中的特定前綴恢復來最佳化您的 API 使用。這顯著減少了重複性任務或具有一致元素的提示的處理時間和成本。
此功能符合「Zero Data Retention」(零資料保留),即 ZDR 的資格。當您的組織具有 ZDR 安排時,透過此功能傳送的資料在 API 回應返回後不會被儲存。
有兩種方式可以啟用提示快取:
cache_control 欄位。系統會自動將快取斷點套用到最後一個可快取的區塊,並隨著對話增長而向前移動。最適合多輪對話,其中不斷增長的訊息歷史應該自動被快取。cache_control,以精細控制確切要快取的內容。最簡單的入門方式是使用自動快取:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
cache_control={"type": "ephemeral"},
system="You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.",
messages=[
{
"role": "user",
"content": "Analyze the major themes in 'Pride and Prejudice'.",
}
],
)
print(response.usage.model_dump_json())使用自動快取時,系統會快取直到並包含最後一個可快取區塊的所有內容。在具有相同前綴的後續請求中,快取的內容會自動被重複使用。
當您發送啟用提示快取的請求時:
這對以下情況特別有用:
預設情況下,快取的生命週期為 5 分鐘。每次使用快取內容時,快取都會免費重新整理。
如果您發現 5 分鐘太短,Anthropic 也提供 1 小時的快取持續時間,需額外付費。
如需更多資訊,請參閱 1 小時快取持續時間。
提示快取會快取完整的前綴
提示快取參考整個提示 — tools、system 和 messages(按此順序),直到並包含以 cache_control 指定的區塊。
提示快取引入了新的定價結構。下表顯示每個支援模型每百萬 token 的價格:
| 模型 | 基本輸入 Token | 5 分鐘快取寫入 | 1 小時快取寫入 | 快取命中與重新整理 | 輸出 Token |
|---|---|---|---|---|---|
| Claude Fable 5 | $10 / MTok | $12.50 / MTok | $20 / MTok | $1 / MTok | $50 / MTok |
| Claude Mythos 5(限量供應) | $10 / MTok | $12.50 / MTok | $20 / MTok | $1 / MTok | $50 / MTok |
| Claude Opus 4.8 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| Claude Opus 4.7 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| Claude Opus 4.6 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| Claude Opus 4.5 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| 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.6 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Sonnet 4.5 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Sonnet 4(已棄用) | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Haiku 4.5 | $1 / MTok | $1.25 / MTok | $2 / MTok | $0.10 / MTok | $5 / MTok |
| Claude Haiku 3.5(已停用,Bedrock 和 Vertex AI 除外) | $0.80 / MTok | $1 / MTok | $1.60 / MTok | $0.08 / MTok | $4 / MTok |
上表反映了提示快取的以下定價乘數:
這些乘數會與其他定價修飾符(例如 Batch API 折扣和資料駐留)疊加。完整詳情請參閱定價。
所有現行 Claude 模型都支援提示快取(包括自動和明確兩種方式)。
自動快取是啟用提示快取最簡單的方式。您不需要在個別內容區塊上放置 cache_control,而是在請求主體的頂層新增單一 cache_control 欄位。系統會自動將快取斷點套用到最後一個可快取的區塊。
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
cache_control={"type": "ephemeral"},
system="You are a helpful assistant that remembers our conversation.",
messages=[
{"role": "user", "content": "My name is Alex. I work on machine learning."},
{
"role": "assistant",
"content": "Nice to meet you, Alex! How can I help with your ML work today?",
},
{"role": "user", "content": "What did I say I work on?"},
],
)
print(response.usage.model_dump_json())使用自動快取時,快取點會隨著對話增長而自動向前移動。每個新請求都會快取直到最後一個可快取區塊的所有內容,而先前的內容則從快取中讀取。
| 請求 | 內容 | 快取行為 |
|---|---|---|
| 請求 1 | System + User(1) + Asst(1) + User(2) ◀ 快取 | 所有內容寫入快取 |
| 請求 2 | System + User(1) + Asst(1) + User(2) + Asst(2) + User(3) ◀ 快取 | System 到 User(2) 從快取讀取; Asst(2) + User(3) 寫入快取 |
| 請求 3 | System + User(1) + Asst(1) + User(2) + Asst(2) + User(3) + Asst(3) + User(4) ◀ 快取 | System 到 User(3) 從快取讀取; Asst(3) + User(4) 寫入快取 |
快取斷點會自動移動到每個請求中的最後一個可快取區塊,因此您不需要隨著對話增長而更新任何 cache_control 標記。
預設情況下,自動快取使用 5 分鐘的 TTL。您可以指定 1 小時的 TTL,費用為基本輸入 token 價格的 2 倍:
{ "cache_control": { "type": "ephemeral", "ttl": "1h" } }自動快取與明確快取斷點相容。當兩者一起使用時,自動快取斷點會使用 4 個可用斷點插槽中的一個。
這讓您可以結合兩種方法。例如,使用明確斷點來快取您的系統提示,同時讓自動快取處理對話:
{
"model": "claude-opus-4-8",
"max_tokens": 1024,
"cache_control": { "type": "ephemeral" },
"system": [
{
"type": "text",
"text": "You are a helpful assistant.",
"cache_control": { "type": "ephemeral" }
}
],
"messages": [{ "role": "user", "content": "What are the key terms?" }]
}自動快取使用相同的底層快取基礎架構。定價、最小 token 門檻、上下文排序要求以及 20 個區塊的回溯視窗,都與明確斷點的套用方式相同。
cache_control,則自動快取不會執行任何操作。cache_control,API 會回傳 400 錯誤。自動快取可在 Claude API、Claude Platform on AWS 和 Microsoft Foundry(測試版)上使用。Bedrock 和 Vertex AI 不支援自動快取。
若要對快取有更多控制,您可以直接在個別內容區塊上放置 cache_control。當您需要快取以不同頻率變更的不同區段,或需要精細控制確切要快取的內容時,這會很有用。
將靜態內容(工具定義、系統指令、上下文、範例)放在提示的開頭。使用 cache_control 參數標記可重複使用內容的結尾以進行快取。
快取前綴按以下順序建立:tools、system,然後是 messages。此順序形成一個階層結構,每個層級都建立在前一個層級之上。
您可以只在靜態內容的結尾使用一個快取斷點,系統會自動找到先前請求已寫入快取的最長前綴。了解其運作方式有助於您最佳化快取策略。
三個核心原則:
快取寫入只發生在您的斷點處。 使用 cache_control 標記一個區塊會寫入恰好一個快取項目:以該區塊結尾的前綴雜湊值。系統不會為任何更早的位置寫入項目。由於雜湊值是累積的,涵蓋直到並包含斷點的所有內容,因此變更斷點處或之前的任何區塊都會在下一個請求中產生不同的雜湊值。
快取讀取會向後尋找先前請求寫入的項目。 在每個請求中,系統會計算您斷點處的前綴雜湊值,並檢查是否有相符的快取項目。如果沒有,它會一次向後移動一個區塊,檢查每個較早位置的前綴雜湊值是否與快取中已有的內容相符。它尋找的是先前的寫入,而不是穩定的內容。
回溯視窗為 20 個區塊。 系統每個斷點最多檢查 20 個位置,將斷點本身計為第一個。如果系統在該視窗中找不到相符的項目,檢查就會停止(或從下一個明確斷點恢復,如果有的話)。
範例:不斷增長的對話中的回溯
您每輪附加新區塊,並在每個請求的最後一個區塊上設定 cache_control:
常見錯誤:斷點位於每個請求都會變更的內容上
您的提示有一個大型靜態系統上下文(區塊 1 到 5),後面跟著一個包含時間戳記和使用者訊息的每請求區塊(區塊 6)。您在區塊 6 上設定 cache_control:
回溯不會找到斷點後方的穩定內容並快取它。它找到的是先前請求已經寫入的項目,而寫入只發生在斷點處。將 cache_control 移到區塊 5(跨請求保持相同的最後一個區塊),每個後續請求都會讀取快取的前綴。自動快取也會遇到相同的陷阱:它將斷點放在最後一個可快取的區塊上,而在此結構中,該區塊是每個請求都會變更的區塊,因此請改用區塊 5 上的明確斷點。
關鍵要點: 將 cache_control 放在您希望共用快取的請求之間前綴完全相同的最後一個區塊上。在不斷增長的對話中,只要每輪新增的區塊少於 20 個,最後一個區塊就可以運作:較早的內容永遠不會變更,因此下一個請求的回溯會找到先前的寫入。對於具有變動後綴(時間戳記、每請求上下文、傳入訊息)的提示,請將斷點放在靜態前綴的結尾,而不是變動的區塊上。
如果您想要以下功能,可以定義最多 4 個快取斷點:
重要限制: 回溯只能找到較早請求已經寫入的項目。如果不斷增長的對話將您的斷點推到距離上次寫入 20 個或更多區塊,回溯視窗就會錯過它。從一開始就在更接近該位置的地方新增第二個斷點,以便在您需要之前就在那裡累積寫入。
快取斷點本身不會增加任何成本。 您只需支付以下費用:
新增更多 cache_control 斷點不會增加您的成本 — 您仍然根據實際快取和讀取的內容支付相同的金額。斷點只是讓您控制哪些區段可以獨立快取。
在 Claude API、Claude Platform on AWS、Vertex AI 和 Microsoft Foundry(測試版)上,最小可快取提示長度為:
模型可用性因平台而異,新發布模型的最小值也可能不同:在 Amazon Bedrock 上,Claude Fable 5 和 Claude Mythos 5 的最小可快取提示長度為 1,024 個 token。
較短的提示無法快取,即使標記了 cache_control 也是如此。任何快取少於此 token 數量的請求都會在不快取的情況下處理,且不會回傳錯誤。若要驗證提示是否已快取,請檢查回應使用量欄位:如果 cache_creation_input_tokens 和 cache_read_input_tokens 都是 0,則提示未被快取(可能是因為未達到最小長度要求)。
如果您的提示略低於您的模型和平台的最小值,擴展快取內容以達到門檻通常是值得的。快取讀取的成本遠低於未快取的輸入 token,因此達到最小值可以降低經常重複使用的提示的成本。
Bedrock 是 AWS 營運的平台。在 Bedrock 上,請參閱 Bedrock 提示快取文件以了解適用的每個模型最小值、失敗行為和使用量欄位名稱。
對於並行請求,請注意快取項目只有在第一個回應開始後才可用。如果您需要平行請求的快取命中,請等待第一個回應後再發送後續請求。
目前,「ephemeral」是唯一支援的快取類型,預設生命週期為 5 分鐘。
請求中的大多數區塊都可以快取。這包括:
tools 陣列中的工具定義system 陣列中的內容區塊messages.content 陣列中的內容區塊,適用於使用者和助手輪次messages.content 陣列中的內容區塊,在使用者輪次中messages.content 陣列中的內容區塊,在使用者和助手輪次中這些元素中的每一個都可以快取,無論是自動快取還是使用 cache_control 標記它們。
雖然大多數請求區塊都可以快取,但有一些例外:
思考區塊無法直接使用 cache_control 快取。但是,當思考區塊出現在先前的助手輪次中時,可以與其他內容一起快取。以這種方式快取時,從快取讀取時它們確實會計為輸入 token。
子內容區塊(如引用)本身無法直接快取。請改為快取頂層區塊。
對於引用,作為引用來源材料的頂層文件內容區塊可以快取。這讓您可以透過快取引用將參考的文件,有效地將提示快取與引用一起使用。
空白文字區塊無法快取。
對快取內容的修改可能會使部分或全部快取失效。
如建構您的提示中所述,快取遵循以下階層結構:tools → system → messages。每個層級的變更都會使該層級和所有後續層級失效。
下表顯示不同類型的變更會使快取的哪些部分失效。✘ 表示快取失效,而 ✓ 表示快取保持有效。
| 變更內容 | 工具快取 | 系統快取 | 訊息快取 | 影響 |
|---|---|---|---|---|
| 工具定義 | ✘ | ✘ | ✘ | 修改工具定義(名稱、描述、參數)會使整個快取失效 |
| 網路搜尋切換 | ✓ | ✘ | ✘ | 啟用/停用網路搜尋會修改系統提示 |
| 引用切換 | ✓ | ✘ | ✘ | 啟用/停用引用會修改系統提示 |
| 速度設定 | ✓ | ✘ | ✘ | 在 speed: "fast" 和標準速度之間切換會使系統和訊息快取失效 |
| 工具選擇 | ✓ | ✓ | ✘ | tool_choice 參數的變更只會影響訊息區塊 |
| 圖片 | ✓ | ✓ | ✘ | 在提示中的任何位置新增/移除圖片會影響訊息區塊 |
| 思考參數 | ✓ | ✓ | ✘ | 擴展思考設定的變更(啟用/停用、預算)會影響訊息區塊 |
| 傳遞給擴展思考請求的非工具結果 | ✓ | ✓ | 視模型而定 | 在 Opus 4.5+ 和 Sonnet 4.6+ 上,思考區塊預設會保留,因此快取保持有效(✓)。在較早的 Opus/Sonnet 模型和所有 Haiku 模型上,所有先前快取的思考區塊都會從上下文中移除,且這些思考區塊之後的任何訊息都會從快取中移除(✘)。如需更多詳情,請參閱使用思考區塊進行快取。 |
在 Claude Opus 4.8 上,您可以在對話中途新增新的系統指令,而不會使系統或訊息快取失效。將 {"role": "system"} 訊息附加到 messages,而不是編輯頂層的 system 欄位,這樣快取的前綴就會保持不變。請參閱對話中途系統訊息。
使用回應中 usage 內的這些 API 回應欄位(或如果使用串流則為 message_start 事件)來監控快取效能:
cache_creation_input_tokens:建立新項目時寫入快取的 token 數量。cache_read_input_tokens:此請求從快取中擷取的 token 數量。input_tokens:未從快取讀取或用於建立快取的輸入 token 數量(即最後一個快取斷點之後的 token)。了解 token 細分
input_tokens 欄位僅代表請求中最後一個快取斷點之後的 token — 而不是您發送的所有輸入 token。
若要計算總輸入 token:
total_input_tokens = cache_read_input_tokens + cache_creation_input_tokens + input_tokens空間說明:
cache_read_input_tokens = 斷點之前已快取的 token(讀取)cache_creation_input_tokens = 斷點之前正在快取的 token(寫入)input_tokens = 您最後一個斷點之後的 token(不符合快取資格)範例: 如果您有一個請求,其中包含 100,000 個快取內容的 token(從快取讀取)、0 個正在快取的新內容 token,以及使用者訊息中的 50 個 token(在快取斷點之後):
cache_read_input_tokens:100,000cache_creation_input_tokens:0input_tokens:50這對於了解成本和速率限制都很重要,因為當有效使用快取時,input_tokens 通常會比您的總輸入小得多。
當將擴展思考與提示快取一起使用時,思考區塊具有特殊行為:
與其他內容一起自動快取:雖然思考區塊無法明確標記 cache_control,但當您使用工具結果進行後續 API 呼叫時,它們會作為請求內容的一部分被快取。這通常發生在工具使用期間,當您將思考區塊傳回以繼續對話時。
輸入 token 計數:當從快取讀取思考區塊時,它們在您的使用量指標中計為輸入 token。這對於成本計算和 token 預算很重要。
快取失效模式:
cache_control 標記,也會發生此快取行為如需快取失效的更多詳情,請參閱什麼會使快取失效。
工具使用範例:
Request 1: User: "What's the weather in Paris?"
Response: [thinking_block_1] + [tool_use block 1]
Request 2:
User: ["What's the weather in Paris?"],
Assistant: [thinking_block_1] + [tool_use block 1],
User: [tool_result_1, cache=True]
Response: [thinking_block_2] + [text block 2]
# Request 2 caches its request content (not the response)
# The cache includes: user message, thinking_block_1, tool_use block 1, and tool_result_1
Request 3:
User: ["What's the weather in Paris?"],
Assistant: [thinking_block_1] + [tool_use block 1],
User: [tool_result_1, cache=True],
Assistant: [thinking_block_2] + [text block 2],
User: [Text response, cache=True]
# On earlier Opus/Sonnet and all Haiku models, non-tool-result user block causes prior thinking blocks to be stripped; on Opus 4.5+/Sonnet 4.6+ they are kept在較早的 Opus/Sonnet 模型和所有 Haiku 模型上,此時所有先前的思考區塊都會從上下文中移除。在 Opus 4.5+ 和 Sonnet 4.6+ 上,先前的思考區塊預設會保留,並仍然是快取前綴的一部分。
如需更詳細的資訊,請參閱擴展思考文件。
自 2026 年 2 月 5 日起,提示快取使用工作區層級隔離,而非組織層級隔離。快取按工作區隔離,確保同一組織內工作區之間的資料分離。這適用於 Claude API、Claude Platform on AWS 和 Microsoft Foundry(測試版);Bedrock 和 Vertex AI 維持組織層級的快取隔離。如果您使用多個工作區,請檢視您的快取策略以因應此差異。
組織和工作區隔離: 快取在組織之間是隔離的。不同的組織永遠不會共用快取,即使它們使用相同的提示。自 2026 年 2 月 5 日起,在 Claude API、Claude Platform on AWS 和 Microsoft Foundry(測試版)上,快取也在組織內按工作區隔離;Bedrock 和 Vertex AI 繼續僅使用組織層級隔離。
精確比對: 快取命中需要 100% 相同的提示區段,包括直到並包含標記為快取控制的區塊的所有文字和圖片。
輸出 token 生成: 提示快取對輸出 token 生成沒有影響。您收到的回應與未使用提示快取時收到的回應相同。
若要最佳化提示快取效能:
根據您的情境調整提示快取策略:
如果遇到非預期的行為:
快取診斷(測試版)讓 API 比較連續的請求並報告提示前綴確切在哪裡分歧,這會自動處理此清單中的許多步驟。
cache_control 標記位於相同位置tool_choice 和圖片使用在各次呼叫之間保持一致tool_use 內容區塊中的鍵具有穩定的排序,因為某些語言(例如 Swift、Go)在 JSON 轉換期間會隨機化鍵順序,破壞快取對 tool_choice 的變更或提示中任何位置圖片的存在/不存在都會使快取失效,需要建立新的快取項目。如需快取失效的更多詳情,請參閱什麼會使快取失效。
如果您發現 5 分鐘太短,Anthropic 也提供 1 小時的快取持續時間,需額外付費。
1 小時快取持續時間可在 Claude API、Claude Platform on AWS、Amazon Bedrock、Amazon Bedrock(舊版)、Vertex AI 和 Microsoft Foundry(測試版)上使用。
若要使用延長快取,請在 cache_control 定義中包含 ttl,如下所示:
"cache_control": {
"type": "ephemeral",
"ttl": "1h"
}回應將包含詳細的快取資訊,如下所示:
{
"usage": {
"input_tokens": 2048,
"cache_read_input_tokens": 1800,
"cache_creation_input_tokens": 248,
"output_tokens": 503,
"cache_creation": {
"ephemeral_5m_input_tokens": 148,
"ephemeral_1h_input_tokens": 100
}
}
}請注意,目前的 cache_creation_input_tokens 欄位等於 cache_creation 物件中值的總和。
如果您有定期使用的提示(即使用頻率高於每 5 分鐘一次的系統提示),請繼續使用 5 分鐘快取,因為這會繼續免費重新整理。
1 小時快取最適合用於以下情境:
5 分鐘和 1 小時快取在延遲方面的行為相同。對於長文件,您通常會看到改善的首個 token 時間。
您可以在同一個請求中同時使用 1 小時和 5 分鐘快取控制,但有一個重要限制:具有較長 TTL 的快取項目必須出現在較短 TTL 之前(即 1 小時快取項目必須出現在任何 5 分鐘快取項目之前)。
當混合 TTL 時,API 會在您的提示中確定三個計費位置:
A:最高快取命中處的 token 計數(如果沒有命中則為 0)。B:A 之後最高的 1 小時 cache_control 區塊處的 token 計數(如果不存在則等於 A)。C:最後一個 cache_control 區塊處的 token 計數。如果 B 和/或 C 大於 A,它們必然是快取未命中,因為 A 是最高的快取命中。
您將被收取以下費用:
A 的快取讀取 token。(B - A) 的 1 小時快取寫入 token。(C - B) 的 5 分鐘快取寫入 token。以下是 3 個範例。這描繪了 3 個請求的輸入 token,每個請求都有不同的快取命中和快取未命中。因此,每個請求都有不同的計算定價,顯示在彩色方框中。
快取預熱讓您在使用者觸發真實請求之前,將系統提示或工具定義載入提示快取中。這消除了第一次使用者互動時的快取未命中延遲懲罰,降低對延遲敏感的應用程式的首個 token 時間(TTFT)。
在您的請求中設定 max_tokens: 0。API 會將您的提示讀入模型,並在任何 cache_control 斷點處寫入快取,然後立即回傳而不生成任何輸出。回應具有空的 content 陣列、stop_reason: "max_tokens" 和完整填入的 usage 區塊。
將 cache_control 斷點放在與後續請求共用的最後一個區塊上(通常是您的系統提示或工具定義),而不是佔位符使用者訊息上。否則快取項目會以佔位符為鍵,後續請求將無法命中它。這意味著使用明確快取斷點而不是自動快取,因為自動快取會將斷點放在最後一個區塊上,而在此情況下該區塊是佔位符。佔位符使用者訊息可以是任何具有非空白內容的字串(此處的範例使用 "warmup");其內容會被讀入模型但永遠不會被回答。
如果前綴尚未快取,預熱請求會產生快取寫入費用,與任何其他請求相同。檢查回應中的 usage.cache_creation_input_tokens 以確認發生了寫入。不會計費任何輸出 token。
client = anthropic.Anthropic()
# 在使用者到達前觸發此操作,以預熱共用的系統提示快取。
prewarm = client.messages.create(
model="claude-opus-4-8",
max_tokens=0,
system=[
{
"type": "text",
"text": "You are an expert software engineer with deep knowledge of distributed systems...",
"cache_control": {"type": "ephemeral"},
}
],
messages=[{"role": "user", "content": "warmup"}],
)
print(prewarm.stop_reason) # "max_tokens"
print(prewarm.content) # []
print(prewarm.usage)API 回傳空的 content 陣列:
{
"id": "msg_01XFDUDYJgAACzvnptvVoYEL",
"type": "message",
"role": "assistant",
"content": [],
"model": "claude-opus-4-8",
"stop_reason": "max_tokens",
"stop_sequence": null,
"usage": {
"input_tokens": 8,
"cache_creation_input_tokens": 5120,
"cache_read_input_tokens": 0,
"cache_creation": {
"ephemeral_5m_input_tokens": 5120,
"ephemeral_1h_input_tokens": 0
},
"iterations": [
{
"input_tokens": 8,
"output_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 5120,
"cache_creation": {
"ephemeral_5m_input_tokens": 5120,
"ephemeral_1h_input_tokens": 0
},
"type": "message"
}
],
"output_tokens": 0,
"service_tier": "standard",
"inference_geo": "global"
}
}當您的應用程式啟動時(或按排程間隔)發送預熱請求,然後在預熱完成後發送真實的使用者請求:
client = anthropic.Anthropic()
SYSTEM_PROMPT = [
{
"type": "text",
"text": "You are an expert software engineer with deep knowledge of distributed systems...",
"cache_control": {"type": "ephemeral"},
}
]
def prewarm_cache() -> None:
"""Call this at application startup or on a scheduled interval."""
client.messages.create(
model="claude-opus-4-8",
max_tokens=0,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": "warmup"}],
)
def respond(user_message: str) -> anthropic.types.Message:
"""The real user request; benefits from a warm cache."""
return client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": user_message}],
)
# 在任何使用者流量到達之前預熱快取。
prewarm_cache()
# 之後,當使用者提交訊息時,系統提示前綴已被快取。
response = respond("How do I implement a binary search tree?")
print(response.content[0].text)請記住,快取 TTL 仍然適用。對於預設的 5 分鐘快取,至少每 5 分鐘發送一次新的預熱請求以保持快取溫熱。對於使用者請求之間較長的間隔,請改用 1 小時快取持續時間。
如果設定了以下任何一項,max_tokens: 0 請求將被拒絕並回傳 invalid_request_error,因為每一項都意味著需要產生輸出,而零 token 預算無法產生任何輸出:
stream: truethinking.type: "enabled")output_config.format)tool_choice 為 {"type": "tool", ...} 或 {"type": "any"}在 Message Batches 請求中,max_tokens: 0 也會被拒絕。預熱(pre-warming)的目標是縮短首個 token 的回應時間,這不適用於批次處理,而且在批次處理期間寫入的快取項目很可能在後續請求執行之前就已過期。
在 max_tokens: 0 可用之前,某些應用程式使用 max_tokens: 1 的預熱呼叫來達到相同效果。建議優先使用 max_tokens: 0 方法:不會產生任何輸出,因此沒有需要丟棄的單一 token 回覆,不會計費任何輸出 token,且請求的意圖明確無歧義。
為了協助您開始使用「prompt caching」(提示快取),提示快取 cookbook 提供了詳細的範例和最佳實務。
以下程式碼片段展示了各種提示快取模式。這些範例示範如何在不同情境中實作快取,協助您理解此功能的實際應用:
提示快取(包括自動和明確快取)符合 ZDR 資格。Anthropic 不會儲存您的提示或 Claude 回應的原始文字。
KV(鍵值)快取表示和已快取內容的加密雜湊僅保存在記憶體中,不會儲存於靜態儲存裝置。快取項目的最短生命週期為 5 分鐘(標準)或 1 小時(延長),之後會被迅速(但非立即)刪除。快取項目在組織之間是隔離的,而在 Claude API、Claude Platform on AWS 和 Microsoft Foundry(測試版)上,組織內的工作區之間也是隔離的。
有關所有功能的 ZDR 資格,請參閱 API 與資料保留。
Was this page helpful?