跳到正文
土土金API

上下文快取是什麼:重複傳送的提示詞字首可以便宜很多

上下文快取讓每次都重複傳送的提示詞字首按更低的快取讀取價計費。本文說明 OpenAI、Claude、Gemini、DeepSeek 的快取方式,怎麼寫提示詞才容易命中,並用即時價格算出能省多少。

如果每次請求的開頭都是同一段長內容,比如系統提示詞、產品手冊、工具定義,支援上下文快取的模型會把這段字首存起來。下次遇到相同的字首,命中的部分按「快取讀取價」計費。以 gpt-5.4-mini 為例,普通輸入是 ¥1.5 / 百萬 tokens,快取讀取只要 ¥0.15。固定字首越長、呼叫越頻繁,省得越多。

快取是怎麼工作的

模型讀提示詞時,要對每個 token 做一遍計算。兩次請求開頭的一大段如果完全相同,第二次就能直接複用第一次算好的結果,省下來的計算體現在價格上。

所以快取按「字首」匹配:從第一個 token 起逐字相同的部分才算命中。中間改了一個字,這個字之後的內容就都命中不了。

各家模型的快取方式

模型怎麼開啟計費特點
OpenAI GPT 系列自動。提示詞達到一定長度(官方目前是 1,024 tokens 起,可能調整)且字首相同時生效命中部分按快取讀取價
Claude在請求裡用 cache_control 標出要快取的位置寫入快取按快取寫入價,比普通輸入貴;命中按快取讀取價,很便宜
Gemini較新的模型自動做隱式快取;也可以先建立顯式快取再引用命中部分按快取讀取價
DeepSeek 等國產模型多數會自動快取重複的字首命中部分按快取讀取價

表裡是各家公開的一般規則,最小長度、有效期這些細節會調整,以各模型的官方說明為準。一個模型有沒有快取價,在模型與價格裡看它的「快取讀取」列就知道。

看懂快取價格

下面是 Claude Sonnet 5.5 在各分組的價格:

分組輸入 ¥/百萬輸出 ¥/百萬快取讀取 ¥/百萬
標準¥4¥20¥0.4
官方原價·企業¥21.9¥109.5¥2.19
Claude 官方¥15¥75¥1.5
Claude 原價¥24¥120¥2.4
Claude 優質¥8¥40¥0.8
Claude 經濟最低價¥3.2¥16¥0.32

Claude Sonnet 5.5 · 價格為人民幣,取各模型最低價分組;價格更新於 2026年11月13日 下午6:08。

它在最低價分組的快取寫入價是 ¥4 / 百萬 tokens,比普通輸入高,但之後每次命中都只按快取讀取價計費。同一段字首被複用的次數越多,越划算。

其他幾個常用模型的普通輸入價和快取讀取價(每百萬 tokens,最低價分組):

能省多少:算一筆帳

一個客服機器人,每次請求裡系統提示詞加產品資料固定 6,000 tokens,使用者問題和最近幾輪對話約 1,000 tokens,回答約 400 tokens,每月 10 萬次。

不命中快取:

成本估算 · gpt-5.4-mini (標準)

單價
輸入 ¥1.5 / 輸出 ¥9(每百萬 tokens)
每次用量
輸入 7,000 tokens,輸出 400 tokens
請求次數
100,000
單次費用
¥0.0141

合計約 ¥1,410價格為人民幣,取各模型最低價分組;價格更新於 2026年11月13日 下午6:08。

固定的 6,000 tokens 全部命中快取:

成本估算 · gpt-5.4-mini (標準)

單價
輸入 ¥1.5 / 輸出 ¥9(每百萬 tokens)
每次用量
輸入 7,000 tokens(其中 6,000 命中快取),輸出 400 tokens
請求次數
100,000
單次費用
¥0.006

合計約 ¥600價格為人民幣,取各模型最低價分組;價格更新於 2026年11月13日 下午6:08。

實際命中率到不了 100%。快取過期、字首被改動,都會讓一部分請求按原價計費。上線後用 usage 裡的快取 tokens 算出真實命中率,再按它做預算。

怎麼寫提示詞才容易命中

  1. 不變的放前面,變化的放最後。推薦順序:系統提示詞、工具定義、固定資料、歷史對話、本次問題。
  2. 系統提示詞裡不要放當前時間、請求編號、使用者名稱這類每次都變的值。確實需要,就放進最後一條使用者訊息。
  3. 工具定義和示例的順序保持固定,序列化 JSON 時欄位順序也要固定。
  4. 同類請求集中傳送。快取有有效期,長時間沒被命中就會清除,重新寫入又要付一次費。
  5. Claude 需要顯式標記:把 cache_control 加在固定內容的最後一個塊上。
Python
import os
import anthropic

client = anthropic.Anthropic(base_url="https://www.tutujin.com", api_key=os.environ["TUTUJIN_API_KEY"])

with open("product_manual.md", encoding="utf-8") as f:
    manual = f.read()  # 几千 tokens 的固定资料

resp = client.messages.create(
    model="claude-sonnet-5-5",
    max_tokens=1024,
    system=[
        {"type": "text", "text": "你是产品客服,只根据下面的手册回答。"},
        {"type": "text", "text": manual, "cache_control": {"type": "ephemeral"}},
    ],
    messages=[{"role": "user", "content": "保修期多久?"}],
)
print(resp.usage.cache_creation_input_tokens, resp.usage.cache_read_input_tokens)

第一次請求寫入快取,cache_creation_input_tokens 有值;有效期內的後續請求命中快取,cache_read_input_tokens 有值。

確認是否命中

介面命中快取的 tokens 在哪裡
OpenAI 相容(Chat Completions)usage.prompt_tokens_details.cached_tokens
Claude 原生 Messagesusage.cache_read_input_tokens,寫入快取的在 usage.cache_creation_input_tokens
Gemini 原生 generateContentusageMetadata.cachedContentTokenCount

通過 OpenAI 相容介面呼叫其他廠商的模型時,快取欄位返回與否取決於具體模型。每次請求實際扣了多少,以控制台「操作日誌」為準。快取之外的省錢辦法見如何控制 API 成本。

常見問題

快取需要單獨開通嗎?

不需要在本站開通。是否快取由模型決定:OpenAI、Gemini、DeepSeek 等模型會自動快取較長的重複字首,Claude 需要在請求裡用 cache_control 標出要快取的內容。

用了快取,回答會變得一模一樣嗎?

不會。快取儲存的是模型讀取提示詞字首時的中間計算結果,不是回答,每次的回答仍然重新生成。

為什麼快取寫入比普通輸入還貴?

部分模型(例如 Claude)把內容寫入快取時按高於普通輸入的價格計費,之後每次命中按很低的讀取價計費。同一段字首被複用的次數越多越划算,只用一次的內容不值得標記快取。

快取多久失效?

由各模型的規則決定,一般在幾分鐘到一小時之間,一段時間沒有被命中就會被清除。具體以各模型的官方說明為準。

怎麼知道快取有沒有命中?

看響應裡的 usage 欄位。OpenAI 格式在 prompt_tokens_details.cached_tokens,Claude 原生介面在 cache_read_input_tokens。控制台操作日誌裡也能查到每次請求的扣費。