提示快取是一項強大的優化功能,當您反覆向 Claude 發送相同內容時,它能讓您的 API 請求變得更快且更便宜。讓我們來探討如何在您的應用程式中有效地實作它。
提示快取的運作方式
當您啟用提示快取時,第一個請求會將內容寫入快取,預設存活時間為 5 分鐘,每次使用快取內容時,該時間窗口會免費重新刷新。如果您需要更長的時間窗口,可以選擇額外付費的 1 小時快取持續時間。後續請求會從此快取中讀取,而不需要再次處理相同的內容。當您發送以下內容時,這特別有價值:
- 大型系統提示(例如一個 6K token 的程式碼助手提示)
- 複雜的工具結構(多個工具約 1.7K token)
- 重複的訊息內容
關鍵的洞察是,快取只有在您反覆發送相同內容時才有幫助——但在許多應用程式中,這種情況發生得非常頻繁。
設定工具結構快取
要快取您的工具結構,您需要在工具列表中的最後一個工具上新增一個快取控制欄位。以下是正確的做法,且不會修改您原始的工具定義:
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這種方法會在新增快取控制欄位之前,建立工具列表和最後一個工具結構的副本。雖然您可以直接修改 tools[-1]["cache_control"],但複製的方法可以避免您之後重新排序工具時出現問題。
系統提示快取
對於系統提示,您需要將其結構化為帶有快取控制的文字區塊:
if system:
params["system"] = [
{
"type": "text",
"text": system,
"cache_control": {"type": "ephemeral"}
}
]這會將您的系統提示從簡單的字串轉換為支援快取的結構化格式。
理解快取行為
當您在啟用快取的情況下執行請求時,您會在回應中看到不同的使用模式:
- 第一個請求:
cache_creation_input_tokens=1772- Claude 寫入快取 - 後續請求:
cache_read_input_tokens=1772- Claude 從快取讀取 - 內容變更: 出現新的快取建立 token
快取非常敏感——即使只是在您的工具或系統提示中更改一個字元,也會使該元件的整個快取失效。
快取順序與中斷點
您可以在單一請求中設定多個快取中斷點。順序很重要:
- 工具(如有提供)
- 系統提示(如有提供)
- 訊息
如果您更改了系統提示但保留相同的工具,您會看到部分快取讀取(針對工具)和快取寫入(針對新的系統提示)。這種細粒度的快取意味著您只需為實際變更的部分付費處理。
實務考量
提示快取在以下情況下最為有效:
- 各請求間工具結構一致
- 系統提示穩定
- 應用程式以相似的上下文發出多個請求
請記住,預設快取持續 5 分鐘(每次使用時刷新),並提供額外付費的 1 小時選項,因此它是為相對頻繁使用 API 的應用程式設計的,而非長期儲存。