當您重複向 Claude 發送相同內容時,提示快取是一項強大的優化功能,能讓請求變得更便宜且更快速。初始請求會寫入快取,而後續請求則可以從快取中讀取。快取的有效期為 5 分鐘,這非常實用,因為許多應用程式會重複發送相同的工具結構描述、系統提示或訊息歷史紀錄。

提示快取的運作方式
當您將內容標記為可快取時,Claude 會處理一次該內容並儲存結果。包含完全相同內容的後續請求可以跳過處理步驟,直接從快取中讀取。這僅在快取內容完全相同時才有效——即使只改變一個字元,也會使快取失效。
您可以在單一請求中設定多個快取斷點。快取順序遵循以下序列:
- 工具結構描述
- 系統提示
- 訊息歷史紀錄
設定工具結構描述快取
若要快取工具結構描述,您需要在工具清單中的最後一個工具上新增一個 cache_control 欄位。以下是在不修改原始工具結構描述的情況下正確執行此操作的方式:
if tools:
tools_clone = tools.copy()
last_tool = tools_clone[-1].copy()
last_tool["cache_control"] = {"type": "ephemeral"}
tools_clone[-1] = last_tool
params["tools"] = tools_clone此方法會在新增快取控制欄位之前,建立工具清單和最後一個工具結構描述的副本。這可避免意外修改您的原始工具定義,否則若您之後重新排序工具,可能會導致問題。
系統提示快取
對於系統提示,您需要將 system 參數結構化為一個列表,其中包含帶有快取控制欄位的文字區塊:
if system:
params["system"] = [
{
"type": "text",
"text": system,
"cache_control": {"type": "ephemeral"}
}
]理解快取行為
當您首次發送包含可快取內容的請求時,您會在 usage 欄位中看到 cache_creation_input_tokens。這顯示了 Claude 寫入快取的 token 數量。在後續發送相同內容的請求中,您則會看到 cache_read_input_tokens。
如果同一個請求中同時包含已快取和新的內容,您可能會同時看到快取讀取和快取寫入。舉例來說,如果您保留相同的工具結構描述但更改系統提示,您將從快取中讀取工具,同時將新的系統提示寫入快取。只有當工具本身達到最小長度時,您才會得到這種部分讀取,因為如果某個快取斷點之前的內容未達最小長度,則不會寫入任何內容。
快取失效
快取對變更極為敏感。即使在您的工具結構描述、系統提示或任何快取內容中只修改一個字元,也會使該快取項目失效。發生這種情況時,Claude 會將其視為全新內容,並建立一個新的快取項目。
這種敏感性意味著您應該謹慎考慮要快取的內容。在多次請求中保持穩定的工具結構描述和系統提示,是理想的快取候選對象。頻繁變動的動態內容則無法從快取中獲益。
實際實作
在實務上,您會希望預設將快取機制建置到您的聊天函式中。大多數應用程式會在多次請求中使用相同的工具結構描述和系統提示,使它們成為快取的絕佳對象。當您發送許多內容相似的請求時,效能和成本上的效益會相當顯著。
請記住,當您重複發送相同內容時,快取的價值最大。由於這種情況在實際應用程式中極為頻繁發生——尤其是工具結構描述和系統提示——在開發流程早期就導入快取機制,將會在您的應用程式擴展時帶來可觀的回報。