Was this page helpful?
提示詞快取透過允許從提示詞中的特定前綴恢復來優化您的 API 使用。這大幅減少了重複任務或具有一致元素的提示詞的處理時間和成本。
This feature is eligible for Zero Data Retention (ZDR). When your organization has a ZDR arrangement, data sent through this feature is not stored after the API response is returned.
有兩種方式可以啟用提示詞快取:
cache_control 欄位。系統會自動將快取斷點應用於最後一個可快取區塊,並隨著對話增長而向前移動。最適合多輪對話,其中不斷增長的訊息歷史應自動快取。cache_control,以精細控制究竟快取什麼。最簡單的開始方式是使用自動快取:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-7",
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 分鐘。每次使用快取內容時,快取都會以零額外成本刷新。
提示詞快取快取完整前綴
提示詞快取參考整個提示詞 - tools、system 和 messages(按該順序)直到並包括用 cache_control 指定的區塊。
提示詞快取引入了新的定價結構。下表顯示了每個支援模型每百萬個代幣的價格:
| Model | Base Input Tokens | 5m Cache Writes | 1h Cache Writes | Cache Hits & Refreshes | Output Tokens |
|---|---|---|---|---|---|
| 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 |
上表反映了提示詞快取的以下定價倍數:
這些倍數與其他定價修飾符(例如 Batch API 折扣和資料駐留)堆疊。如需完整詳細資訊,請參閱定價。
提示詞快取(自動和明確)在所有活躍 Claude 模型上都受支援。
自動快取是啟用提示詞快取的最簡單方式。與其在各個內容區塊上放置 cache_control,而是在您的請求正文頂層添加單個 cache_control 欄位。系統會自動將快取斷點應用於最後一個可快取區塊。
使用自動快取,快取點會隨著對話增長而自動向前移動。每個新請求都會快取直到最後一個可快取區塊的所有內容,而之前的內容則從快取中讀取。
| 請求 | 內容 | 快取行為 |
|---|---|---|
| 請求 1 | 系統 + 使用者(1) + 助手(1) + 使用者(2) ◀ 快取 | 所有內容寫入快取 |
| 請求 2 | 系統 + 使用者(1) + 助手(1) + 使用者(2) + 助手(2) + 使用者(3) ◀ 快取 | 系統至使用者(2) 從快取讀取; 助手(2) + 使用者(3) 寫入快取 |
| 請求 3 | 系統 + 使用者(1) + 助手(1) + 使用者(2) + 助手(2) + 使用者(3) + 助手(3) + 使用者(4) ◀ 快取 | 系統至使用者(3) 從快取讀取; 助手(3) + 使用者(4) 寫入快取 |
快取斷點會自動移動到每個請求中最後一個可快取區塊,因此當對話增長時,您無需更新任何 cache_control 標記。
預設情況下,自動快取使用 5 分鐘 TTL。您可以以 2 倍基礎輸入代幣價格指定 1 小時 TTL:
{ "cache_control": { "type": "ephemeral", "ttl": "1h" } }自動快取與明確快取斷點相容。一起使用時,自動快取斷點使用 4 個可用斷點槽之一。
這讓您可以結合兩種方法。例如,使用明確斷點獨立快取您的系統提示詞和工具,同時自動快取處理對話:
{
"model": "claude-opus-4-7",
"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?" }]
}自動快取使用相同的基礎快取基礎設施。定價、最小代幣閾值、上下文排序要求和 20 區塊回溯窗口都與明確斷點相同。
cache_control,自動快取是無操作的。cache_control,API 返回 400 錯誤。自動快取在 Claude API 和 Azure AI Foundry(預覽)上可用。Amazon Bedrock 和 Google 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 斷點不會增加您的成本 - 您仍然根據實際快取和讀取的內容支付相同金額。斷點只是讓您控制哪些部分可以獨立快取。
最小可快取提示詞長度為:
較短的提示詞無法快取,即使標記有 cache_control。任何快取少於此代幣數的請求都將在不快取的情況下處理,並且不會返回錯誤。要驗證提示詞是否被快取,請檢查回應使用欄位:如果 cache_creation_input_tokens 和 cache_read_input_tokens 都為 0,提示詞未被快取(可能是因為它未達到最小長度要求)。
如果您的提示詞剛好低於您使用的模型的最小值,擴展快取內容以達到閾值通常是值得的。快取讀取的成本遠低於未快取的輸入代幣,因此達到最小值可以降低頻繁重複使用的提示詞的成本。
對於並發請求,請注意快取條目僅在第一個回應開始後才可用。如果您需要並行請求的快取命中,請在發送後續請求之前等待第一個回應。
目前,「ephemeral」是唯一支援的快取類型,預設情況下生命週期為 5 分鐘。
請求中的大多數區塊都可以快取。這包括:
tools 陣列中的工具定義system 陣列中的內容區塊messages.content 陣列中的內容區塊,用於使用者和助手輪次messages.content 陣列中的內容區塊,在使用者輪次中messages.content 陣列中的內容區塊,在使用者和助手輪次中這些元素中的每一個都可以快取,無論是自動還是通過使用 cache_control 標記。
雖然大多數請求區塊都可以快取,但有一些例外:
思考區塊無法直接使用 cache_control 快取。但是,思考區塊可以在它們出現在先前助手輪次中時與其他內容一起快取。以這種方式快取時,它們在從快取讀取時確實計為輸入代幣。
子內容區塊(如引用)本身無法直接快取。相反,快取頂層區塊。
在引用的情況下,作為引用源材料的頂層文件內容區塊可以快取。這允許您通過快取引用將參考的文件來有效地將提示詞快取與引用一起使用。
空文字區塊無法快取。
對快取內容的修改可能使部分或全部快取失效。
如結構化您的提示詞中所述,快取遵循層次結構:tools → system → messages。每個級別的變化使該級別及所有後續級別失效。
下表顯示了不同類型的變化使快取的哪些部分失效。✘ 表示快取失效,而 ✓ 表示快取保持有效。
| 變化內容 | 工具快取 | 系統快取 | 訊息快取 | 影響 |
|---|---|---|---|---|
| 工具定義 | ✘ | ✘ | ✘ | 修改工具定義(名稱、描述、參數)使整個快取失效 |
| 網路搜尋切換 | ✓ | ✘ | ✘ | 啟用/停用網路搜尋修改系統提示詞 |
| 引用切換 | ✓ | ✘ | ✘ | 啟用/停用引用修改系統提示詞 |
| 速度設定 | ✓ | ✘ | ✘ | 在 speed: "fast" 和標準速度之間切換使系統和訊息快取失效 |
| 工具選擇 | ✓ | ✓ | ✘ |
使用這些 API 回應欄位監控快取效能,在回應中的 usage 內(或如果串流則在 message_start 事件中):
cache_creation_input_tokens:建立新條目時寫入快取的代幣數。cache_read_input_tokens:為此請求從快取檢索的代幣數。input_tokens:未從快取讀取或用於建立快取的輸入代幣數(即最後一個快取斷點之後的代幣)。理解代幣分解
input_tokens 欄位僅代表您的請求中最後一個快取斷點之後的代幣 - 不是您發送的所有輸入代幣。
要計算總輸入代幣:
total_input_tokens = cache_read_input_tokens + cache_creation_input_tokens + input_tokens空間解釋:
cache_read_input_tokens = 斷點前已快取的代幣(讀取)cache_creation_input_tokens = 斷點前現在被快取的代幣(寫入)input_tokens = 您最後一個斷點之後的代幣(不符合快取條件)範例: 如果您有一個請求,其中 100,000 個代幣的快取內容(從快取讀取),0 個代幣的新內容被快取,以及您的使用者訊息中的 50 個代幣(在快取斷點之後):
cache_read_input_tokens:100,000cache_creation_input_tokens:0當使用延伸思考搭配提示快取時,思考塊有特殊的行為:
自動快取與其他內容一起進行:雖然思考塊無法使用 cache_control 明確標記,但當您在後續 API 呼叫中傳遞工具結果時,它們會作為請求內容的一部分被快取。這通常發生在工具使用期間,當您將思考塊傳回以繼續對話時。
輸入令牌計數:當思考塊從快取中讀取時,它們在您的使用指標中計為輸入令牌。這對於成本計算和令牌預算很重要。
快取失效模式:
cache_control 標記,也會發生此快取行為有關快取失效的更多詳細資訊,請參閱什麼會使快取失效。
工具使用範例:
請求 1:使用者:"巴黎的天氣如何?"
回應:[thinking_block_1] + [tool_use block 1]
請求 2:
使用者:["巴黎的天氣如何?"],
助手:[thinking_block_1] + [tool_use block 1],
使用者:[tool_result_1, cache=True]
回應:[thinking_block_2] + [text block 2]
# 請求 2 快取其請求內容(不是回應)
# 快取包括:使用者訊息、thinking_block_1、tool_use block 1 和 tool_result_1
請求 3:
使用者:["巴黎的天氣如何?"],
助手:[thinking_block_1] + [tool_use block 1],
使用者:[tool_result_1, cache=True],
助手:[thinking_block_2] + [text block 2],
使用者:[文字回應, cache=True]
# 非工具結果的使用者塊會指定新的助手迴圈,所有先前的思考塊都會從上下文中移除
# 此請求的處理方式就像思考塊從未存在過一樣當包含非工具結果的使用者塊時,它會指定新的助手迴圈,所有先前的思考塊都會從上下文中移除。
有關更詳細的資訊,請參閱延伸思考文件。
從 2026 年 2 月 5 日開始,提示快取將使用工作區級隔離而不是組織級隔離。快取將按工作區隔離,確保同一組織內工作區之間的資料分離。此變更適用於 Claude API 和 Azure AI Foundry(預覽版);Amazon Bedrock 和 Google Vertex AI 將保持組織級快取隔離。如果您使用多個工作區,請檢查您的快取策略以考慮此變更。
組織隔離:快取在組織之間隔離。不同的組織永遠不會共享快取,即使他們使用相同的提示。
精確匹配:快取命中需要 100% 相同的提示段,包括所有文字和圖像,直到並包括標記有快取控制的塊。
輸出令牌生成:提示快取對輸出令牌生成沒有影響。您收到的回應將與不使用提示快取時收到的回應相同。
為了優化提示快取效能:
根據您的場景調整您的提示快取策略:
如果遇到意外行為:
cache_control 標記位於相同的位置tool_choice 和圖像使用在呼叫之間保持一致cache_creation_input_tokens 和 cache_read_input_tokens 都將為 0tool_use 內容塊中的鍵具有穩定的順序,因為某些語言(例如 Swift、Go)在 JSON 轉換期間隨機化鍵順序,破壞快取對 tool_choice 的變更或提示中任何位置的圖像的存在/不存在將使快取失效,需要建立新的快取條目。有關快取失效的更多詳細資訊,請參閱什麼會使快取失效。
如果您發現 5 分鐘太短,Anthropic 也提供 1 小時快取持續時間以額外成本。
要使用延伸快取,請在 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": 456,
"ephemeral_1h_input_tokens": 100
}
}
}請注意,目前的 cache_creation_input_tokens 欄位等於 cache_creation 物件中值的總和。
如果您有定期使用的提示(即每 5 分鐘以上使用一次的系統提示),請繼續使用 5 分鐘快取,因為這將繼續以無額外費用的方式刷新。
1 小時快取最適合用於以下場景:
5 分鐘和 1 小時快取在延遲方面的行為相同。對於長文件,您通常會看到改進的首令牌時間。
您可以在同一請求中使用 1 小時和 5 分鐘快取控制,但有一個重要的限制:具有較長 TTL 的快取條目必須出現在較短 TTL 之前(即 1 小時快取條目必須出現在任何 5 分鐘快取條目之前)。
混合 TTL 時,API 在您的提示中確定三個計費位置:
A:最高快取命中處的令牌計數(如果沒有命中,則為 0)。B:A 之後最高 1 小時 cache_control 塊處的令牌計數(如果不存在,則等於 A)。C:最後一個 cache_control 塊處的令牌計數。如果 B 和/或 C 大於 A,它們必然是快取未命中,因為 A 是最高快取命中。
您將被收費:
A 的快取讀取令牌。(B - A) 的 1 小時快取寫入令牌。(C - B) 的 5 分鐘快取寫入令牌。以下是 3 個範例。這描繪了 3 個請求的輸入令牌,每個請求都有不同的快取命中和快取未命中。每個都有不同的計算定價,如彩色框所示。
為了幫助您開始使用提示詞快取,提示詞快取食譜提供了詳細的範例和最佳實踐。
以下程式碼片段展示了各種提示詞快取模式。這些範例演示了如何在不同場景中實現快取,幫助您理解此功能的實際應用:
提示詞快取(自動和明確的)符合 ZDR 資格。Anthropic 不會儲存您的提示詞或 Claude 回應的原始文本。
KV(鍵值)快取表示和快取內容的密碼雜湊值僅保存在記憶體中,不會儲存在靜止狀態。快取項目的最短生命週期為 5 分鐘(標準)或 60 分鐘(延長),之後會迅速(但不是立即)刪除。快取項目在組織之間是隔離的。
如需所有功能的 ZDR 資格,請參閱 API 和資料保留。
| $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 Sonnet 3.7 (deprecated) | $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 | $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 |
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-7",
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())對 tool_choice 參數的變化僅影響訊息區塊 |
| 影像 | ✓ | ✓ | ✘ | 在提示詞中的任何位置添加/移除影像影響訊息區塊 |
| 思考參數 | ✓ | ✓ | ✘ | 對擴展思考設定的變化(啟用/停用、預算)影響訊息區塊 |
| 傳遞給擴展思考請求的非工具結果 | ✓ | ✓ | ✘ | 當在啟用擴展思考時在請求中傳遞非工具結果時,所有先前快取的思考區塊都從上下文中移除,上下文中跟隨這些思考區塊的任何訊息都從快取中移除。如需更多詳細資訊,請參閱使用思考區塊快取。 |
input_tokens這對於理解成本和速率限制都很重要,因為在有效使用快取時,input_tokens 通常遠小於您的總輸入。