大語言模型應用日益複雜,推理成本與延遲越來越重要。一次請求可能包含系統提示、對話歷史、檢索文件、工具定義和使用者輸入,累計數千甚至數百萬 token。如果不加快取,服務端每次都把相同上下文重新計算一遍,既耗時又浪費算力。實際上,LLM 服務中的快取不是一個單一功能,而是位於服務堆疊不同層次的四種機制:KV 快取、字首快取、提示詞快取和語義快取。
KV 快取是現代自迴歸模型推理的基礎。模型並不是一次生成完整回覆,而是一個 token 一個 token 地生成;每生成一個新 token,注意力機制都要計算它與此前所有 token 的關係,為已處理 token 生成 Key 和 Value 張量。KV 快取把這些張量存放在記憶體(通常為 GPU 視訊記憶體)中。prefill 階段處理完提示後快取 K/V 狀態,後續解碼步驟直接複用並增量追加,避免序列變長後反覆從頭重建注意力狀態。它的侷限是通常只服務於當前請求:該請求結束後,相關 K/V 狀態不會自動成為另一個無關請求的快取。
字首快取把 KV 快取的複用擴充套件到不同請求之間。實際場景中,許多使用者的請求共享長長的系統提示、公司政策、工具定義,只有末尾的使用者問題不同。若新請求與某先前請求有相同的開頭,服務系統直接複用那部分 K/V,無需重新計算。實現上,字首快取把提示切成定長的 token 塊,併為每個塊計算基於內容和位置的雜湊;新請求透過雜湊檢查詢到 CACHE HIT,命中塊直接複用,只有 CACHE MISS 的部分送入模型計算。快取空間有限時,系統通常用 LRU 策略淘汰舊塊。多模態場景中則要注意:文本相同但圖片不同,不能僅憑文本判定可複用。vLLM 等系統已經以塊式 KV 管理、雜湊、查詢和淘汰機制實現了字首快取。
提示詞快取則把快取責任交給 API 提供商。對於透過雲 API 使用模型的應用,請求裡的系統提示、文件、工具定義等常達數萬 token,且幾乎不變。提供商可以在基礎設施層快取這些重複內容,使後續請求只按快取的一部分重新處理。多家大模型 API 採用分割槽定價:例如快取命中約為不快取價格的 0.1 倍,寫入快取約為 1.25 倍或更高(有些還會額外收儲存費,有些則自動快取且不另計費)。因此,提示詞快取能同時改善輸入處理成本與延遲。
語義快取是四種快取中離模型最遠的一種:它可以完全跳過 LLM。當使用者提出的問題與歷史問題語義相近時,系統直接返回之前生成的答案,而不呼叫模型。通常會用嵌入向量而不是文本雜湊來判斷語義相似度。它把響應時間降到最低、避免昂貴推理,但要處理閾值設定、答案新鮮度和多輪語境等問題,適合 FAQ 和知識庫等重複性較高的場景。
綜合來看,四種快取解決的是不同環節的重複勞動:KV 快取服務於單次請求的解碼提速;字首快取讓共享字首的請求減少 prefill;提示詞快取把固定上下文放到服務商快取層;語義快取則在請求進入模型之前就用相似答案命中。實際系統中它們並非互斥,而是可以疊加部署。理解它們之間的差別,有助於針對成本、延遲和快取命中率做出正確取捨。