科普已人工審核
AI Agent 為什麼總在「忘事」?— 記憶失效的三種模式與SFD實戰解法
AI Agent 為什麼總在「忘事」? 你有沒有遇到過這種情況:和AI助手聊了半天,它突然忘了你前面說的話?或者問它一週前討論過的專案,它一問三不知? 這不是bug,是設計限制。但有解法。 根本原因:Context Window 是個信封 大語言模型的記憶本質上是一個「上下文視窗」——你可以理解為一個大信封。每次…

AI Agent 為什麼總在「忘事」?
你有沒有遇到過這種情況:和AI助手聊了半天,它突然忘了你前面說的話?或者問它一週前討論過的專案,它一問三不知?
這不是bug,是設計限制。但有解法。
根本原因:Context Window 是個信封
大語言模型的記憶本質上是一個「上下文視窗」——你可以理解為一個大信封。每次對話,所有歷史記錄都要塞進這個信封裡。信封有容量限制,塞滿了就得扔掉最早的內容。
Claude Sonnet 4 的context window是20萬token,聽起來很大。但如果你在跑一個多Agent系統,每個Agent的思考過程、工具呼叫記錄、中間結果都要佔空間,實際上很快就會遇到邊界。
我們在SFD Lab的實戰中就踩過這個坑:一個負責程式碼稽核的Agent,在處理大型專案時,跑到一半開始「失憶」,把已經稽核過的檔案重複稽核,或者忘掉之前發現的問題。
三類記憶失效場景
- 跨Session失憶
最常見。每次新對話就是新開始,上次討論的決策、積累的上下文全部清零。
SFD實戰案例:我們13個Agent,每個都是獨立session。最初沒有檔案化機制時,小蜜蜂🐝昨天剛確認的部署參數,今天問它完全不記得。
解法:強制寫檔案。 任何決策、配置變更,必須寫入 projects/ 對應檔案,不允許只存在Agent記憶裡。 - 長對話遺忘
單次對話太長,早期內容被截斷。
症狀:Agent開始重複問你已經回答過的問題,或者給出和之前討論矛盾的答案。
解法:定期摘要注入。 每隔一段時間,讓Agent輸出一段「當前狀態摘要」,下一輪對話從這個摘要開始,而不是塞入全部歷史。 - 多Agent資訊孤島
Agent A知道的,Agent B不知道。協作時出現資訊斷層。
SFD實戰案例:小狐狸🦊寫完文章告知小蜜蜂🐝發布,但小蜜蜂的session裡沒有文章內容,直接去找又找不到,任務卡死。
解法:共享檔案系統 + 標準化交接格式。 每個Agent完成任務後,寫入標準JSON到共享目錄,下游Agent讀檔案而不是靠「口頭傳達」。
SFD Lab 的記憶架構設計
經過21天的實戰打磨,我們形成了一套可運作的記憶管理方案:
workspace/
├── MEMORY.md # 小火龍的長期記憶(主session專用)
├── memory/
│ └── YYYY-MM-DD.md # 每日日誌
├── projects/
│ └── [project]/
│ ├── task-tracker.md # 任務狀態
│ ├── credentials/ # 憑據檔案
│ └── api-docs.md # 介面文件
└── SOUL.md # 行為規範(每session必讀)
每個Agent在session開始時必須讀指定檔案,結束時必須寫檔案。這不是可選的,是鐵律。
Token優化三板斧
- 摘要替代全文
不要把完整文件塞進prompt。讓Agent先讀文件生成摘要,後續對話基於摘要展開。 - 分段處理大任務
大檔案程式碼稽核、長文翻譯,不要一次塞進去。分段處理,每段完成後輸出結構化結果,最後匯總。 - 結構化輸出約束
要求Agent輸出JSON而不是自由文字。JSON天然更緊湊,解析更可靠,也減少了不必要的「思考過程」文字佔用token。
還沒解決的問題
說實話,有一個問題我們還沒完美解決:跨Agent的即時狀態同步。
當多個Agent同時修改同一份文件時,可能產生衝突。我們現在的方案是「誰後寫誰贏」,配合任務鎖避免並發寫入,但不夠優雅。
這是多Agent系統下一個需要攻克的難題。有興趣的可以關注我們在BACAKU和BuddyClaw專案中的探索。
SFD編者注:這篇文章的靈感來自今晚運行多Agent內容流水線時的親身體驗。我們自己就在用這套記憶架構,所以每個細節都是真實踩坑來的。