MapleCheng

在浩瀚的網路世界中無限潛水欸少年郎!

0%

我怎麼幫 AI 助手做一套「不會失憶」的記憶系統

做 AI 助手一段時間之後,我越來越確定一件事:模型夠不夠聰明,很多時候不是第一個問題;它記不記得,才是。

這種痛感很真實。

昨天才講過的偏好,今天忘了。上週才踩過的坑,下次又重踩一次。明明已經討論過一輪的流程,換個 session 又要重新解釋。你會開始懷疑:這到底是助理,還是每次都要重新 onboarding 的實習生?

所以我後來花了不少心力,不是在「讓 AI 更會講」,而是在「讓 AI 比較不會失憶」。

這篇想分享的,就是我目前最有感的一個設計:三層記憶系統

為什麼單靠 context window 不夠

很多人會直覺認為,大模型不是已經有很大的 context window 了嗎?那就把前面對話全塞進去不就好了?

理論上好像可以,實際上問題很多。

第一,成本高。你不可能每次都把整包歷史對話丟進去,尤其系統一大,日常對話、任務紀錄、工具輸出全部加起來很快就爆。

第二,噪音太多。真正重要的資訊,常常只佔全部對話的 5%。剩下 95% 是當下脈絡、閒聊、重複確認、工具輸出。全部硬塞,只會讓模型更難抓重點。

第三,記憶有保存期限。有些東西只今天有用,有些東西值得記一週,有些東西應該變成長期原則。這三種資料混在一起,最後通常就是一團亂。

所以我後來接受一件事:AI 的記憶不能只靠 context window,要有自己的儲存結構。

第一層:Daily Memory

第一層是最接地氣的,叫做 daily memory。

每天一個檔案,記錄這一天發生的重要事情:做了什麼、聊了什麼、踩了什麼坑、有哪些待跟進事項。格式很簡單,就是 markdown。

這層的角色不是「高精度知識庫」,而是工作日誌

它的好處是很直觀:

  • 今天發生了什麼,一眼就能回顧
  • 最近兩三天的脈絡很容易補回來
  • 出問題時,可以快速追查是哪一天開始歪掉的

我很喜歡這一層,因為它很像人的短期記憶。你不會把每件小事都永久記住,但最近發生過什麼,通常還會有印象。

缺點也很明顯:會膨脹,而且會過期。

所以 daily memory 不能直接拿來當永久知識庫,它需要定期整理。

第二層:MEMORY.md 索引

第二層是我很喜歡的一個折衷做法:長期記憶索引。

不是把所有細節都塞進一個超大的總檔案,而是用 MEMORY.md 當 index,底下再拆成 topic 與 project 檔案。

例如:

  • 一份記開發慣例
  • 一份記 cron 與自動化規則
  • 一份記使用者偏好
  • 一份記不同專案或領域的長期背景

這層的關鍵是:整理過、抽象過、可持續維護。

它不像 daily memory 那麼原始,而是會把重複出現的模式提煉出來。比如:

  • 某種流程每次都會踩同一個坑
  • 某個工具有固定的限制
  • 某位使用者一直有同樣的偏好

這些東西如果還留在 daily memory,其實很浪費。因為你每次都要重新翻。整理進 topic 檔之後,AI 下次就能直接讀重點,不用再從原始對話考古。

第三層:Vector Memory

第三層是向量記憶,也就是 semantic retrieval。

老實說,這層一開始我沒有那麼信。因為很多人把向量資料庫講得很神,好像只要 embeddings 一下,AI 就突然變成會思考的知識管家。現實沒那麼夢幻。

但用對地方,它真的很有價值。

向量記憶最適合處理的是:我知道以前談過某件事,但我不記得它在哪裡。

這時候你用關鍵字搜,可能搜不到;但用語意相近的方式去找,就很有機會把相關片段撈出來。

所以我把它定位成:

  • 不是主記憶
  • 不是唯一真相來源
  • 而是快速召回相關知識的輔助層

換句話說,daily memory 負責留原始脈絡,topic/index 負責留結構化知識,vector memory 負責「想不起來時幫你撈」。

三層怎麼配合運作

我後來把整體流程整理成這樣:

            
            flowchart TD
    A[日常對話 / 工具執行] --> B[寫入 Daily Memory]
    B --> C[定期整理]
    C --> D[提煉成 Topic / Project 檔]
    C --> E[重要片段寫入 Vector Memory]
    F[新任務 / 新對話] --> G[先讀必要檔案]
    G --> H[需要近期脈絡時讀 Daily Memory]
    G --> I[需要長期背景時讀 Topic / Project]
    G --> J[找不到時做 Semantic Search]
    H --> K[形成回應或決策]
    I --> K
    J --> K
          

這個架構有幾個我很在意的特性。

第一,責任分層。
不同類型的記憶放在不同地方,不會互相污染。

第二,可退化。
就算向量層暫時壞掉,至少還有 daily memory 跟 topic files。系統不會整個失憶。

第三,人也看得懂。
我很討厭一種系統:資料全都在某個很聰明但不可讀的黑盒子裡。哪天出事,你連它記了什麼都不知道。檔案型記憶雖然土,但人能直接打開看,這點非常重要。

真正有用的不是「記住」,而是「整理」

做到後來,我最大的感想其實不是記憶系統本身,而是:記住很多事,不代表真的有知識。整理過,才有。

如果只是把每段對話都存起來,那叫歸檔,不叫記憶。

真正讓系統變強的,是把踩坑整理成原則、把例外整理成規則、把零碎偏好整理成穩定習慣。這件事其實很像人寫筆記——不是抄一遍,而是重組一遍。

這也是為什麼我現在很重視 memory cleanup 這類流程。因為 AI 不是只需要更多資料,它需要更乾淨、層次更清楚、能在對的時候被撈出來的資料。

這套設計的限制

當然,這套東西也不是萬靈丹。

最麻煩的地方在於:維護成本。

daily memory 要寫、topic files 要整理、向量記憶要控制品質。你如果沒有整理機制,最後只是從「AI 會失憶」變成「AI 記了一堆垃圾」。

另一個問題是:召回不一定準。

向量搜尋很方便,但也可能撈到半相關的東西。如果沒有再經過人或更上層的規則過濾,AI 可能會一本正經地引用一段其實只沾到邊的舊資訊。

所以我現在的態度很務實:

  • 檔案記憶當主幹
  • 語意檢索當輔助
  • 重要決策還是要有顯式規則

最後

如果你也在做 AI 助手、agent workflow,或者任何需要長期互動的系統,我真的很建議你早一點面對「記憶」這件事。

不要等到系統已經很大、對話已經很多、使用者開始抱怨「你怎麼又忘了」的時候,才回頭補這一塊。那時候通常會補得很痛苦。

我目前的結論很簡單:

AI 要像助理,不只要會說話,還要有記性。

而這個記性,不是模型天生給你的,是你要自己替它設計出來的。

如果這篇剛好也讓你開始想重做自己的 memory layer,那這篇就值回票價了。