載入中

Claude 中的提示快取運作方式是將訊息上所做的運算工作儲存起來,以便在後續請求中重複使用。這使得使用快取內容的請求既更便宜又更快執行。

Claude 將對提示「請總結這段內容」所做的工作寫入快取,然後在後續請求中讀取它。

此流程遵循一個簡單的模式:您的初始請求會寫入快取,而後續請求則可以從快取中讀取。快取會存在 5 分鐘,因此此功能僅在您重複傳送相同內容時才有用——但這種情況在實際應用中極為常見。

快取斷點

對訊息所做的工作不會自動被快取。我們必須手動在某個區塊加上「快取斷點」。斷點之前的所有工作都會被快取,而且只有在包含斷點在內的內容完全相同時,後續請求才會使用該快取。

一個使用者訊息文字區塊中包含一段長提示,其「cache_control」類型「ephemeral」被標記為快取斷點。

當您需要加入快取斷點時,必須使用撰寫文字區塊的完整形式,而不是簡寫形式。以下是兩者的差異:

python
# 簡寫形式-無法新增快取斷點
user_message = {
  "role": "user",
  "content": "Hi there!"
}

# 完整形式-快取斷點所需
user_message = {
  "role": "user", 
  "content": [
    {
      "type": "text",
      "text": "Hi there!",
      "cache_control": {
        "type": "ephemeral"
      }
    }
  ]
}

快取斷點如何運作

快取斷點可以跨越多則訊息,也可以快取助理訊息。當您放置一個斷點時,該點之前的所有內容都會被快取。請記住,內容必須完全相同才能使用快取!

Claude 針對四個文字區塊各自所做的工作,虛線斷點位於第一個區塊之後,且快取方塊為空。

在後續請求中,Claude 會從快取中讀取先前處理過的工作,而不是重新處理它:

Claude 讀取後續請求中三個區塊的快取工作,其最後一個區塊「Focus the summary on」帶有斷點。

斷點位置

您不僅限於文字區塊!您可以在系統提示和工具定義中加入快取斷點。這些實際上是最常見的快取機會,因為它們在請求之間很少變動。

python
# 帶有快取斷點的工具定義
tools = [
  add_duration_to_datetime_schema,
  get_current_datetime_schema,
  {
    "name": "set_reminder",
    "description": "Sets a reminder...",
    "input_schema": { ... },
    "cache_control": {"type": "ephemeral"}
  }
]

# 帶有快取斷點的系統提示  
system = [
  {
    "type": "text",
    "text": "You are a senior software...",
    "cache_control": {"type": "ephemeral"}
  }
]

快取順序

在幕後,工具、系統提示和訊息會依照特定順序合併在一起,然後餵入 Claude。這會影響您的快取斷點如何運作。

在兩個請求中,快取斷點都位於 Tool 3,在系統提示和訊息之前;請求 2 的助理訊息已變更。

您最多可以加入四個快取斷點。如果您在最後一個工具上放置斷點,該工具之前的所有內容都會被快取,但系統提示和訊息則不會。這讓您可以根據應用程式中會變動的內容,對要快取的項目進行精細控制。

最小內容長度

快取有一個最小長度限制,且取決於所使用的模型。對於本課程使用的 Claude Haiku 4.5 模型來說,內容必須至少有 4,096 個 token 才能被快取。這是您嘗試快取的所有訊息和區塊的總和,而不是個別區塊的長度。

像「Hi there!」這樣的訊息太短,無法被快取,但一段真正冗長的提示則能達到最小長度。低於最小長度的內容只會被照常處理而不快取,也不會傳回任何錯誤。若要確認,請查看回應的用量資訊:cache_creation_input_tokens 和 cache_read_input_tokens 都會是 0。

有效提示快取的關鍵在於找出您請求中保持一致的部分——通常是您的系統提示和工具定義——並策略性地放置斷點,以最大化快取命中率,同時最小化重新處理。