先分清楚:語意快取不是一般字串快取
傳統快取以完整請求或雜湊值作為鍵,只有輸入完全一致時才會命中。語意快取則先把使用者問題轉成向量,再尋找意思相近的歷史請求。例如「如何重設公司帳號密碼」與「企業帳號忘記密碼怎麼辦」字面不同,但在適當條件下可能共用同一個已驗證答案。命中後可略過部分檢索、提示組裝與模型推論,因此通常能同時降低等待時間與模型呼叫費用。
但相似不代表可互換。問題可能只差一個產品版本、地區、客戶身分或時間條件,正確答案就完全不同。工程上應把語意快取視為一個具風險的決策層,而不是單純的效能元件。一次錯誤命中的成本,往往高於一次未命中所增加的模型費用。
先定義哪些請求可以被快取
適合快取的通常是答案穩定、重複度高,而且不依賴即時交易狀態的問題,例如內部制度說明、產品操作指引、固定知識問答與部分文件摘要。涉及庫存、價格、訂單、權限、個人資料、即時設備狀態或需要呼叫工具執行動作的請求,則不宜直接重用完整答案。這類流程可以快取公開說明或檢索結果,但最終狀態仍應回到來源系統確認。
快取邊界不能只看問題文字,還要把回答上下文納入鍵值或篩選條件。實務上至少應檢查:
- 租戶與權限:不同公司、部門或角色的內容不可互相命中。
- 模型與提示版本:系統提示、輸出格式或模型變更後,舊答案不一定仍然有效。
- 知識版本:RAG 文件集合、索引或資料來源更新時,必須能讓相關快取失效。
- 語言與通路:網站、LINE、客服後台可能有不同語氣、長度與合規要求。
- 工具狀態:含有 ERP、CRM 或 IoT 即時資料的答案,應標記為不可快取或只快取靜態部分。
採用兩層架構,並保存足夠的判斷資訊
常見做法是先查精確快取,再查語意快取。系統先正規化輸入,例如處理空白、大小寫與不影響語意的格式差異;精確命中時可直接回傳。未命中時再產生查詢向量,到向量索引中尋找候選項,並依相似度門檻、租戶、權限、語言、提示版本與知識版本進行篩選。只有通過所有條件的候選答案才可重用,否則照常執行 RAG 或模型流程,完成後再評估是否寫入快取。
每筆紀錄不應只保存問題、向量與答案。還要記錄建立時間、到期時間、模型、提示版本、知識版本、引用來源、權限範圍、內容風險等級與命中次數。若回答包含引用,命中時也應驗證來源是否仍存在且可供目前使用者存取。熱門問題還要處理快取擊穿:同一批未命中請求應共用一個生成工作,避免同時對模型發出多次相同呼叫。
門檻、失效與安全控制決定品質
相似度門檻沒有可直接套用的通用數字。嵌入模型、語言、問題長度與業務領域都會改變分數分布。應使用真實且去識別化的查詢建立評估集,標註哪些問題可以共用答案,再觀察不同門檻下的誤命中與漏接情況。高風險場景應提高門檻,必要時加入第二階段分類器或規則檢查;若判斷不確定,寧可視為未命中。
失效策略應同時包含 TTL 與事件驅動機制。短期有效的營運資訊使用較短 TTL;政策、手冊或產品文件更新時,則依文件 ID、索引版本或快取標籤精準清除。提示版本與模型版本最好直接成為命名空間的一部分,避免部署後混用舊輸出。對含個資、機密內容、一次性交易結果或安全判斷的回答,預設不寫入共享語意快取,並在日誌中避免保存原始敏感文字。
用離線評估與影子流量逐步上線
導入時不要先追求高命中率。先以歷史查詢進行離線回放,檢查候選答案是否真的可替代新生成答案,再於線上採用影子模式:系統照常產生回答,同時記錄語意快取原本會選到的結果,但不回傳給使用者。確認誤命中類型、權限隔離與失效流程後,再從低風險意圖逐步開啟。
監控應至少涵蓋精確與語意命中率、命中與未命中的延遲分布、被省略的模型與檢索呼叫、過期答案、人工回報及重新生成比例。也要保留快速停用、清除特定版本與回退門檻的能力。語意快取的成功標準不是存下最多答案,而是在品質與隔離要求不變的前提下,穩定減少不必要的計算。
