別亂壓縮了——Claude、Codex、Gemini 都有的對話壓縮,省空間還是毀緩存?
原始來源與檔名:20260519_2026-05-19T092606+0800-别乱压缩了——Claude、Codex、Gemini 都有的对话压缩,省空间还是毁缓存?.md
來源資訊:
- 原始檔名:2026-05-19T092606+0800-别乱压缩了——Claude、Codex、Gemini 都有的对话压缩,省空间还是毁缓存?.md
- 原始連結:https://x.com/shachepi/status/2056218453791612930
前言/背景
在使用 LLM 進行長期對話或開發時,開發者常使用上下文壓縮指令(如 /compact 或 /compress)來釋放 Token 空間。然而,這篇文章點出了一個隱藏陷阱:壓縮動作可能會破壞 LLM 的 Prompt 緩存(Prompt Caching)機制,導致下一輪對話必須重新計算,反而增加短期的時間延遲與成本。文章分析了不同模型供應商的緩存實作差異,並給出了何時該壓縮的具體建議。
章節詳細總結
長期對話的隱藏陷阱:精確前綴匹配
現代 LLM(如 Claude, Codex, Gemini)的緩存機制,底層是基於精確的前綴匹配 (Exact Prefix Matching)。
- 不壓縮時:對話歷史為
A -> B -> C -> D,緩存會保存A+B+C的計算狀態。新增E時,系統只需計算E。 - 壓縮後:歷史被揉成一個全新的字串
Summary(A+B+C+D)。因為前綴完全改變,之前的緩存全部失效,系統必須從頭對這段 Summary 進行預計算(Pre-fill)。
各大平台的緩存機制差異與影響
不同平台對於「精確前綴匹配」的實作與敏感度有所不同,這直接影響了壓縮指令的破壞力:
- Anthropic (Claude):最嚴格
- 要求從請求開頭到標記點之間的所有內容分毫不差(包括空格、大小寫)。
- 需要開發者手動注入
cache_control標記(最多四個點)。 - 優勢:緩存命中後成本降至 1/10。
- 壓縮影響:最致命。一旦執行壓縮,緩存全部失效。
- OpenAI (Codex):較具彈性
- 使用
conversation_id作為緩存鍵 (Cache Key)。 - 即使配置改變,它傾向於追加新訊息以保住既有緩存,而不是直接修改已有內容。
- 自帶自動壓縮機制(達到閾值自動 compact)。
- 壓縮影響:較小,因為系統內部已做了最佳化。
- 使用
- Google (Gemini):最無痛
- Gemini 2.5 以上版本預設開啟隱式緩存,開箱即用。
- 允許手動建立緩存並設定 TTL,但門檻較高(至少需要 32k tokens)。
- 優勢:緩存折扣約為原價的 25%。
- 壓縮影響:相對最小。
為什麼我們仍然需要壓縮?
儘管會破壞緩存,在以下三種架構場景中,壓縮仍然是必要的:
- 突破硬限制 (Hard Limit):避免 Token 溢位或模型因為 Context 過長而出現「大海撈針」能力下降、胡言亂語的狀況。
- 降低每輪的基礎成本:即使緩存打了 1 折,若上下文累積到 500k tokens,每一輪依然要支付相當於 50k tokens 的費用。將其壓縮到 5k tokens,可以將後續每一輪的基礎成本大幅降低。
- 清理干擾資訊 (Garbage Collection):長時間的 Debug 過程會累積大量錯誤嘗試與廢話。壓縮等同於執行一次記憶體 GC,只保留狀態與結論,提升模型對後續問題的專注度 (Attention)。
總結與結論
- 架構決策:延遲 vs 成本:在設計長期運行的 Agent 記憶體管理模組時,必須權衡「短期重算延遲」與「長期 Token 成本」。只要未達上下文硬限制,應優先依賴模型的原生前綴緩存;當會話過於臃腫時才執行壓縮。
- 平台差異化策略:針對不同 LLM 供應商應實作不同的 Context 管理策略。對於 Claude 需要極度避免頻繁修改歷史;對於 OpenAI 則可依賴其原生的對話管理;對於 Gemini 則可利用其隱式緩存。
- 壓縮即狀態快照:不應將壓縮視為單純的「刪減字數」,而應視為系統狀態的快照 (State Snapshot)。在架構上,應確保壓縮過程能精確保留系統當前的核心變數與結論,以利後續的上下文接續。