Prompt Cache
上游供應商的提示詞快取:用量欄位、各家行為與計價
Prompt Cache 是上游供應商提供的功能:重複送出相同的長前綴(系統提示、文件、工具定義)時,供應商直接讀取快取,費用比一般輸入低很多。Hakila 會原樣轉發快取相關參數,從上游 usage 讀出快取 token 數,並以快取單價計費。
想要「完全相同的請求直接回傳上次的結果、不打上游」,請看 Response Cache。
各供應商行為
| 供應商 | 啟用方式 | 備註 |
|---|---|---|
| OpenAI | 自動(前綴 ≥ 1024 tokens) | 不需任何參數 |
| Google Gemini | 自動(隱式快取) | 回報在 cached_tokens |
| xAI | 自動 | 串流時 Hakila 會自動加上 stream_options.include_usage |
| Anthropic | 需要 cache_control 斷點,或頂層 cache_control 自動快取 | 見下方範例 |
Anthropic
Anthropic 直連走原生 Messages API(Hakila 負責把 Chat Completions 轉成 /v1/messages,回應與串流再轉回 Chat Completions 形狀),所以 cache_control 可以直接放在訊息內容區塊上:
{
"model": "anthropic/claude-sonnet-5",
"messages": [
{
"role": "system",
"content": [
{
"type": "text",
"text": "<很長的產品手冊…>",
"cache_control": { "type": "ephemeral" }
}
]
},
{ "role": "user", "content": "退貨流程是什麼?" }
]
}也可以在請求頂層帶 "cache_control": { "type": "ephemeral" },讓 Anthropic 自動在最後一個可快取區塊放斷點。tools[] 上的 cache_control 同樣會保留。
需要 1 小時快取("ttl": "1h")等 beta 功能時,請自行帶上 anthropic-beta header,Hakila 會轉發給 Anthropic。
用量欄位
Chat Completions 的 usage 會帶上 prompt_tokens_details(沿用 OpenAI 的 cached_tokens 欄位,另外多了 cache_write_tokens):
{
"usage": {
"prompt_tokens": 12000,
"completion_tokens": 300,
"total_tokens": 12300,
"prompt_tokens_details": {
"cached_tokens": 10000,
"cache_write_tokens": 0
}
}
}prompt_tokens包含快取讀取與寫入的 tokens(Anthropic 原生的input_tokens不含快取,Hakila 會加總回來)cached_tokens:從快取讀取的 tokenscache_write_tokens:這次寫入快取的 tokens(目前只有 Anthropic 會回報)
Responses API 的對應欄位是 usage.input_tokens_details.cached_tokens。
計價
每筆請求分四段計價,單位皆為 USD / 1M tokens:
(prompt − cached − cache_write) × Prompt 單價
+ cached × 快取讀取單價
+ cache_write × 快取寫入單價
+ completion × Completion 單價快取單價由平台模型目錄維護,平台管理員可在模型目錄調整。模型沒有快取單價時,該段一律以 Prompt 單價計算(不會少收)。
Console 的 Logs 會在 Tokens 欄顯示每筆請求的快取讀取/寫入數量。