免費全文 RAG 檢索增強 進階

RAG 的快取設計:哪些能快取,哪些不能

RAG 有三個可快取的層次,用對了能省下大半成本,用錯了會回傳過期答案。

RAG 檢索增強教程封面

RAG 每次請求要做嵌入、檢索、重排、生成四件事,全部都可能重複。分層快取是成本優化最快的一步。

三個層次

  1. 嵌入快取:相同查詢字串的向量,鍵用字串雜湊。最安全,命中即省。
  2. 檢索結果快取:查詢加上過濾條件的組合,鍵要包含 filter 與索引版本。
  3. 生成結果快取:完整答案,鍵必須包含查詢、片段 id 清單與提示版本。
def gen_cache_key(query, chunk_ids, prompt_ver, model):
    raw = json.dumps({
        'q': query.strip(),
        'c': sorted(chunk_ids),
        'p': prompt_ver,
        'm': model,
    }, ensure_ascii=False, sort_keys=True)
    return hashlib.sha256(raw.encode()).hexdigest()

什麼不能快取

  • 帶有使用者權限過濾的檢索結果——快取鍵沒含權限就會跨帳號外洩。
  • 含個人資料的答案,除非快取本身也做了隔離。
  • 會隨時間改變的查詢,例如「目前的方案價格」。

失效策略

索引更新時,把索引版本號加一,所有舊鍵自然失效,不必逐筆清除。這比維護精確的失效清單簡單且不易出錯。

快取鍵漏掉提示版本,是很隱蔽的錯誤:你改了提示卻發現「怎麼沒效果」,其實一直在回傳舊答案。
下一步

這個主題還有更深入的實戰教程

VIP 專區收錄 50 篇進階內容:架構設計、生產環境取捨、成本與合規。 每週五新增 3 篇。

看訂閱方案 → 先逛逛 VIP 專區