Skip to Content

提示快取

Prompt Caching 允許快取重複使用的 prompt 前綴,減少 token 消耗和回應延遲。

運作原理

當你的請求中包含較長的、重複使用的 system prompt 或上下文資訊時:

  1. 首次請求 — 完整處理所有 token,並快取 prompt 前綴
  2. 後續請求 — 命中快取時,快取部分的 token 不再重複計費
  3. 快取過期 — 快取有一定的 TTL(通常 5-10 分鐘),過期後需重新快取

快取支援

OfoxAI 的模型資源分別由 AWS BedrockAzure OpenAIGoogle Cloud阿里云火山云 等模型官方云廠商提供。云廠商支援 Prompt Caching 的模型,OfoxAI 同樣支援。

云廠商代表模型快取機制
AWS BedrockClaude 系列原生 Prompt Caching
Azure OpenAIGPT-4o 系列自動快取
Google CloudGemini 系列Context Caching
阿里云Qwen 系列平台側快取
火山云Doubao 系列平台側快取

具體模型的快取支援情況以各云廠商官方文件為準。OfoxAI 會透傳快取相關參數,無需額外設定。

使用方式

OpenAI 協議

OpenAI 模型的 Prompt Caching 是自動的 — 當偵測到重複的 prompt 前綴時自動啟用:

caching_openai.py
# 長 system prompt 會被自動快取 SYSTEM_PROMPT = """你是 OfoxAI 的技術支援助手。 以下是你需要了解的產品資訊: - OfoxAI 是一個 LLM Gateway,支援 100+ 大模型 - 支援 OpenAI / Anthropic / Gemini 三大協議 - ... (省略更多產品知識) """ # 第一次請求:快取 system prompt response1 = client.chat.completions.create( model="openai/gpt-4o", messages=[ {"role": "system", "content": SYSTEM_PROMPT}, {"role": "user", "content": "OfoxAI 支援哪些模型?"} ] ) # 第二次請求:命中快取,更快更便宜 response2 = client.chat.completions.create( model="openai/gpt-4o", messages=[ {"role": "system", "content": SYSTEM_PROMPT}, # 快取命中 {"role": "user", "content": "如何設定 Claude Code?"} ] )

Anthropic 協議

Anthropic 模型支援顯式的 cache control:

caching_anthropic.py
import anthropic client = anthropic.Anthropic( base_url="https://api.ofox.ai/anthropic", api_key="<你的 OFOXAI_API_KEY>" ) response = client.messages.create( model="anthropic/claude-sonnet-4.5", max_tokens=1024, system=[{ "type": "text", "text": "你是一個專業助手。以下是產品文件...", "cache_control": {"type": "ephemeral"} # 顯式啟用快取 }], messages=[{"role": "user", "content": "總結產品特點"}] ) # 查看快取命中情況 print(f"快取寫入 token: {response.usage.cache_creation_input_tokens}") print(f"快取命中 token: {response.usage.cache_read_input_tokens}")

成本節省

快取命中後,快取部分的 token 按更低價格計費,節省比例因模型而異:

  • Anthropic Claude 系列 — 快取命中可節省約 90% 輸入成本
  • OpenAI GPT 系列 — 快取命中可節省約 50% 輸入成本
  • Google Gemini 系列 — 快取命中可節省約 50-75% 輸入成本

實際節省比例取決於快取命中率和各云廠商的計費策略,請參考 OfoxAI 控制台的用量統計查看詳情。

最佳實踐

  1. 將長文本放在前面 — system prompt、知識庫內容等不變的部分放在 messages 開頭
  2. 保持前綴一致 — 只有完全相同的前綴才能命中快取
  3. 合理設計 prompt 結構 — 將固定部分和變化部分分離
# ✅ 好的設計:固定內容在前,變化內容在後 messages = [ {"role": "system", "content": LONG_STATIC_PROMPT}, # 可快取 {"role": "user", "content": dynamic_question} # 變化部分 ] # ❌ 不好的設計:變化內容穿插在固定內容中 messages = [ {"role": "system", "content": f"Today is {date}. {LONG_PROMPT}"} # 每天不同,無法快取 ]

快取命中可以在 API 回應的 usage 欄位中查看,也可以在 OfoxAI 控制台的用量統計中查看快取命中率。

Last updated on