載入中

提示快取是一項強大的優化功能,當您反覆向 Claude 發送相同內容時,它能讓您的 API 請求變得更快且更便宜。讓我們來探討如何在您的應用程式中有效地實作它。

提示快取的運作方式

當您啟用提示快取時,第一個請求會將內容寫入快取,預設存活時間為 5 分鐘,每次使用快取內容時,該時間窗口會免費重新刷新。如果您需要更長的時間窗口,可以選擇額外付費的 1 小時快取持續時間。後續請求會從此快取中讀取,而不需要再次處理相同的內容。當您發送以下內容時,這特別有價值:

  • 大型系統提示(例如一個 6K token 的程式碼助手提示)
  • 複雜的工具結構(多個工具約 1.7K token)
  • 重複的訊息內容

關鍵的洞察是,快取只有在您反覆發送相同內容時才有幫助——但在許多應用程式中,這種情況發生得非常頻繁。

設定工具結構快取

要快取您的工具結構,您需要在工具列表中的最後一個工具上新增一個快取控制欄位。以下是正確的做法,且不會修改您原始的工具定義:

python
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"],但複製的方法可以避免您之後重新排序工具時出現問題。

系統提示快取

對於系統提示,您需要將其結構化為帶有快取控制的文字區塊:

python
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

快取非常敏感——即使只是在您的工具或系統提示中更改一個字元,也會使該元件的整個快取失效。

快取順序與中斷點

您可以在單一請求中設定多個快取中斷點。順序很重要:

  1. 工具(如有提供)
  2. 系統提示(如有提供)
  3. 訊息

如果您更改了系統提示但保留相同的工具,您會看到部分快取讀取(針對工具)和快取寫入(針對新的系統提示)。這種細粒度的快取意味著您只需為實際變更的部分付費處理。

實務考量

提示快取在以下情況下最為有效:

  • 各請求間工具結構一致
  • 系統提示穩定
  • 應用程式以相似的上下文發出多個請求

請記住,預設快取持續 5 分鐘(每次使用時刷新),並提供額外付費的 1 小時選項,因此它是為相對頻繁使用 API 的應用程式設計的,而非長期儲存。