Hakila Docs

Response Cache

相同請求直接回傳快取結果,不呼叫上游、不計費

Response Cache 讓完全相同的請求直接回傳上一次的回應:不呼叫上游、延遲只剩毫秒級,而且不計費。適用於 POST /v1/chat/completions 與 POST /v1/responses(含串流)。

與 Prompt Cache 不同:Prompt Cache 仍會呼叫上游、只是前綴比較便宜;Response Cache 則完全不打上游。

啟用方式

預設關閉。用請求 header 開啟,或在 Preset 設定預設值:

curl https://api.hakila.ai/v1/chat/completions \
  -H "Authorization: Bearer $HAKILA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "X-Hakila-Cache: true" \
  -H "X-Hakila-Cache-TTL: 600" \
  -d '{"model":"openai/gpt-5.6-luna","messages":[{"role":"user","content":"用一句話介紹 Hakila"}]}'

請求 header

Header值說明
X-Hakila-Cachetrue / false開啟或關閉這次請求的快取
X-Hakila-Cache-TTL秒數存活時間,範圍 1–86400(只取前導數字,超出範圍會夾到邊界)
X-Hakila-Cache-Cleartrue先刪除同一把 key 的舊條目,再照常呼叫上游並存入新結果

開關優先順序

  1. Preset 設為強制關閉 → 關閉(header 無法開啟)
  2. X-Hakila-Cache: false → 關閉
  3. X-Hakila-Cache: true → 開啟
  4. Preset 設為預設開啟 → 開啟
  5. 其他情況 → 關閉

TTL 依序取 X-Hakila-Cache-TTL → Preset 的 TTL → 預設 300 秒。

回應 header

啟用快取時,回應會帶上:

Header何時出現說明
X-Hakila-Cache-Status一律HIT 或 MISS
X-Hakila-Cache-TTL一律MISS:這次存入的 TTL;HIT:剩餘秒數
X-Hakila-Cache-AgeHIT條目存入至今的秒數
X-Hakila-Cache-Source-IdHIT當初產生這筆快取的請求 id

Cache key

下列項目全部相同才會命中:

  • 同一把 Hakila API Key(不同金鑰、不同工作區之間不共用)
  • 同一個端點(/v1/chat/completions 與 /v1/responses 各自獨立)
  • 串流與否(stream: true 與非串流各自獨立)
  • 請求 body:套用 Preset、清除空欄位之後的 JSON 字串

body 以字串比對,欄位順序不同就是不同的 key;temperature、seed 等任何參數不同也不會命中。

命中時的回應

  • Chat Completions:id 換成新的請求 id、created 換成現在時間
  • Responses:id 維持原值(之後 retrieve 或 previous_response_id 仍可使用)
  • usage 內所有數字歸零
  • 串流請求會以 SSE 回放完整事件(逐行改寫後送出,結尾一樣是 data: [DONE])

用量紀錄會記為 HIT、tokens 0、不產生費用;Console 的 Logs 會顯示「Cache HIT」徽章。

什麼時候不會存

  • 上游回應不是 2xx,或串流中途出現錯誤事件
  • 呼叫端提前斷線、串流沒有正常結束
  • 回應超過 1 MB
  • Responses 的 background: true 請求,或狀態不是 completed 的回應

注意事項

  • 同時送出的相同請求不會合併,會各自呼叫上游
  • 命中時仍會檢查模型允許清單;若模型已被移出允許清單,請求會照常走路由並回 400
  • 組織儲值餘額或預算用盡時,請求在進入快取前就會被 402 擋下
  • 快取結果不會因為上游模型更新而失效,需要時請用 X-Hakila-Cache-Clear: true 或縮短 TTL

相關頁面

本頁目錄