習(xí)筆記-AI工程化系列】長上下文時代的壓縮、緩存與遺忘-6/16)
現(xiàn)在很多模型的上下文窗口已經(jīng)很大。大到足以塞進(jìn)長文檔、代碼庫摘要、會議記錄、工具輸出和一大段歷史對話。于是很多人會自然地產(chǎn)生一個判斷既然窗口夠大就不用太管理上下文了。這個判斷很危險因?yàn)殚L上下文解決的是容量問題不是質(zhì)量問題也不是成本問題。更不是狀態(tài)管理問題。窗口變大以后你確實(shí)可以放更多東西。但你仍然要回答哪些內(nèi)容值得長期保留 哪些內(nèi)容應(yīng)該壓縮 哪些內(nèi)容應(yīng)該緩存 哪些內(nèi)容應(yīng)該落盤 哪些內(nèi)容應(yīng)該忘掉如果這些問題沒解決長上下文只是讓垃圾堆變大。一、長上下文的三個代價1.1 成本。更多 token 意味著更多輸入成本。如果每次請求都重復(fù)帶上系統(tǒng)提示、工具說明、項(xiàng)目說明、歷史對話、檢索片段成本會很快變成隱性稅。你可能不是被單次調(diào)用拖垮而是被每一步重復(fù)攜帶的上下文拖垮。1.2 延遲。上下文越長模型處理越慢。尤其是多步 Agent。一次慢一點(diǎn)不明顯。循環(huán)多步以后延遲會被放大。1.3 注意力。長上下文不等于模型會同等重視每一段信息。無關(guān)內(nèi)容越多關(guān)鍵狀態(tài)越容易被淹沒。這不是模型“忘了”。是你把工作臺堆滿了。真正成熟的上下文系統(tǒng)不是盡可能多塞。而是讓每一步上下文保持可讀、可控、可恢復(fù)。二、Compaction 不是摘要很多人一聽壓縮就想到摘要。把長歷史總結(jié)成短文字。這只是最低層的做法。Agent 的 context compaction 不是文學(xué)摘要它要保留任務(wù)狀態(tài)。一個好的 compaction 至少要保留當(dāng)前目標(biāo) 用戶約束 已完成動作 關(guān)鍵事實(shí) 決策理由 已調(diào)用工具 產(chǎn)生的副作用 未解決問題 下一步計(jì)劃 驗(yàn)證結(jié)果注意這里有幾個詞決策理由、副作用、未解決問題、驗(yàn)證結(jié)果。這些比“剛才聊了什么”更重要。因?yàn)?Agent 不是在寫會議紀(jì)要。它是在恢復(fù)執(zhí)行狀態(tài)。如果壓縮只保留結(jié)論不保留為什么做這個結(jié)論后續(xù) Agent 很容易重復(fù)走彎路如果壓縮丟掉副作用后續(xù) Agent 可能重復(fù)執(zhí)行危險動作如果壓縮丟掉 open issues任務(wù)會看起來完成實(shí)際還有洞。三、Prompt Caching 解決的是重復(fù)成本Prompt caching 經(jīng)常被誤解成提升模型質(zhì)量的技巧。它不是。它主要解決重復(fù)上下文的成本和延遲。適合緩存的內(nèi)容通常有這些系統(tǒng)提示 工具定義 項(xiàng)目規(guī)則 代碼庫摘要 長文檔 產(chǎn)品手冊 穩(wěn)定 policy 少變化的 examples這些內(nèi)容在很多請求里重復(fù)出現(xiàn)。如果每一步都重新付全價就很浪費(fèi)。但緩存也有邊界。它適合穩(wěn)定前綴。不適合頻繁變化的任務(wù)狀態(tài)。比如當(dāng)前進(jìn)度 最新工具輸出 用戶剛剛修正的約束 待確認(rèn)問題 執(zhí)行錯誤這些東西不應(yīng)該為了命中緩存而硬塞進(jìn)穩(wěn)定前綴。緩存是成本優(yōu)化。不是上下文設(shè)計(jì)的替代品。更不是把所有東西固定住的理由。四、工具輸出應(yīng)該落盤Agent 系統(tǒng)里最容易膨脹的上下文往往不是聊天歷史。而是工具輸出。比如測試日志 構(gòu)建日志 grep 結(jié)果 網(wǎng)頁 HTML 數(shù)據(jù)庫查詢 代碼 diff 長 PDF 提取內(nèi)容這些東西直接塞回上下文會導(dǎo)致三個問題貴 慢 污染下一步推理更好的方式是 offloading也就是把原始輸出放到上下文之外。比如artifacts/test-log-20260623.txt artifacts/search-results.json artifacts/page-snapshot.md artifacts/query-result.csv然后只把三類內(nèi)容放回上下文4.1 結(jié)構(gòu)化摘要。比如測試失敗 3 個集中在 auth/session 模塊。 首個失敗是 TokenRefreshTest錯誤為 expired token not refreshed。4.2 關(guān)鍵片段。比如錯誤行、堆棧頂部、相關(guān)文件路徑。4.3 索引引用。告訴 Agent 原始輸出在哪里需要時再讀。這就像人工作時不會把整份日志背下來。你會記錄摘要、錯誤位置和文件路徑。五、遺忘是設(shè)計(jì)不是事故很多人把 memory 設(shè)計(jì)成“盡量多記”。這是另一個坑。生產(chǎn)系統(tǒng)需要遺忘機(jī)制。因?yàn)樯舷挛睦镉泻芏鄸|西會過期。比如用戶臨時偏好 過期需求 舊版本 API 已解決 bug 上一次任務(wù)的假設(shè) 一次性授權(quán) 錯誤的中間結(jié)論如果這些東西不被清理它們會變成污染源。遺忘不是模型能力不足。遺忘是系統(tǒng)能力。一個好的記憶系統(tǒng)應(yīng)該支持scope這條記憶屬于用戶、項(xiàng)目、任務(wù)還是系統(tǒng) ttl什么時候過期 owner誰能修改 source從哪里來 confidence可信度多高 delete能否刪除 audit誰在什么時候用了它尤其是用戶相關(guān)記憶。不能因?yàn)槟P陀X得“這個偏好可能有用”就永久寫入。長期記憶應(yīng)該是可解釋、可編輯、可刪除的。六、狀態(tài)文件模式長任務(wù) Agent 不能只靠聊天歷史恢復(fù)。它需要外部狀態(tài)。我建議至少拆成四類狀態(tài)文件。6.1 progress.md。記錄任務(wù)進(jìn)度當(dāng)前目標(biāo) 已完成步驟 正在處理什么 下一步是什么6.2 decisions.md。記錄關(guān)鍵決策選擇了什么方案 為什么這么選 拒絕了什么方案 決策依據(jù)是什么6.3open-issues.md。記錄未解決問題缺少什么信息 哪里需要用戶確認(rèn) 哪些測試失敗 哪些風(fēng)險還沒處理6.4 verification.md。記錄驗(yàn)證狀態(tài)跑過哪些測試 結(jié)果是什么 哪些沒法驗(yàn)證 為什么沒法驗(yàn)證這些文件不是為了形式主義。它們有兩個作用。第一讓 Agent 可以恢復(fù)。上下文壓縮后下一輪還能知道任務(wù)狀態(tài)。第二讓人類可以審計(jì)。你不需要翻 200 輪對話才能知道 Agent 為什么這么做。七、一個長任務(wù)上下文生命周期可以把長任務(wù) Agent 的上下文設(shè)計(jì)成一個生命周期Initialize - Load Stable Context - Plan Task - Execute Step - Offload Tool Output - Update State Files - Compact Working Memory - Verify - Continue / Pause / Escalate這里的關(guān)鍵是分層穩(wěn)定上下文比如系統(tǒng)提示、項(xiàng)目規(guī)則、工具定義可以緩存。任務(wù)狀態(tài)比如進(jìn)度、決策、問題要寫入外部文件。工具輸出原始內(nèi)容落盤摘要進(jìn)入上下文。工作記憶階段性壓縮。驗(yàn)證結(jié)果單獨(dú)記錄。人類輸入標(biāo)記來源和有效范圍。這樣做之后Agent 不再依賴“聊天記錄還在不在”。它有可恢復(fù)的任務(wù)狀態(tài)。八、常見反模式8.1 長期把完整歷史塞進(jìn)上下文??此票kU實(shí)際貴、慢、亂。8.2 把 compaction 做成普通摘要。丟掉決策理由和副作用后續(xù)執(zhí)行會失真。8.3 為了緩存命中犧牲上下文正確性。緩存應(yīng)該服務(wù)系統(tǒng)不應(yīng)該綁架系統(tǒng)。8.4 工具輸出原樣回填。日志和 HTML 最容易污染上下文。8.5 memory 永不過期。長期記憶如果不能更新和刪除就不是資產(chǎn)是風(fēng)險。8.6 沒有恢復(fù)點(diǎn)。Agent 一旦中斷只能重跑或靠模型猜前面發(fā)生了什么。九、實(shí)踐 checklist設(shè)計(jì)長上下文 Agent 前先問這些問題[ ] 哪些上下文是穩(wěn)定前綴可以緩存 [ ] 哪些上下文是任務(wù)狀態(tài)必須外部化 [ ] 工具原始輸出是否落盤 [ ] 進(jìn)入模型的是摘要、關(guān)鍵片段還是整段原文 [ ] compaction 是否保留目標(biāo)、決策、風(fēng)險和下一步 [ ] 哪些記憶有 TTL [ ] 用戶記憶是否可編輯、可刪除 [ ] 任務(wù)中斷后能否從狀態(tài)文件恢復(fù) [ ] 驗(yàn)證結(jié)果是否單獨(dú)記錄 [ ] 哪些信息應(yīng)該被主動遺忘這張表決定了長任務(wù) Agent 是可運(yùn)行還是只是長對話。十、長上下文不是免管理長上下文是一種能力不是一種架構(gòu)。它讓我們可以放更多材料。但生產(chǎn)系統(tǒng)真正需要的是壓縮保留任務(wù)狀態(tài) 緩存降低重復(fù)成本 落盤外置原始輸出 遺忘避免舊信息污染 恢復(fù)讓任務(wù)可以繼續(xù)到這里Context Engineering 的第二階段就完整了。第 4 篇我們講每一步該看什么。第 5 篇我們講 RAG 只是取回候選材料真正難的是上下文裝配。第 6 篇我們講長上下文時代仍然需要壓縮、緩存和遺忘。下一篇系列進(jìn)入第三階段Harness Engineering模型之外的一切。Prompt 和 Context 解決“模型怎么想”。Harness 要解決的是模型如何在真實(shí)系統(tǒng)里安全、可控、可驗(yàn)證地行動。參考資料Effective context engineering for AI agents | Anthropic EngineeringContext engineering for agents | LangChainAnthropic Prompt Caching docsEffective harnesses for long-running agents | Anthropic Engineering參考文獻(xiàn)長上下文時代的壓縮、緩存與遺忘