「你昨天才跟我說過你不喜歡吃香菜,怎麼今天又推薦我香菜料理了?」
如果你常用 AI 助理,一定遇過這種讓人翻白眼的情境。不管你用的是 ChatGPT、Claude 還是其他 LLM 服務,每次開新對話都是一張白紙。你得重新介紹自己、重新解釋背景、重新說明偏好。這不是「助理」,這是每天換一個新的實習生。
這大概是驅動我認真研究 AI 記憶系統的最大動力。而 OpenClaw 的 Memory System 是我目前看過設計得最實用的解法之一。用了幾個月之後,我想分享一些設計心得和踩坑經驗。
為什麼 LLM 原生的記憶不夠用?
先釐清一個技術背景:LLM 本身沒有「記憶」。它有的是 context window——每次對話時餵進去的文字量。對話越長,context 越滿,最後超出限制就得截斷或壓縮。
一些平台推出了 memory 功能,讓 AI「記住」跨對話的資訊。但實際體驗下來,那些記憶系統通常很淺——它可能記得你的名字和職業,但不會記得你上週三跟它討論的那個架構決策細節。
更根本的問題是:你對記憶的控制權很低。 它記了什麼、怎麼組織、什麼時候會忘記、哪些資訊會被優先想起——這些你幾乎無法控制。
OpenClaw 的做法完全不同。它把記憶系統建立在純文字檔案之上,給你完整的控制權。你隨時可以打開檔案看 AI 記了什麼、手動編輯不對的地方、刪掉過時的內容。這種透明度在其他 AI 記憶系統裡幾乎找不到。
三層記憶架構
OpenClaw 的記憶系統有三個層次,各自扮演不同的角色。我用一個比喻來說明:
第一層:Workspace Files(身份證)
包括 SOUL.md、USER.md、IDENTITY.md 等核心檔案。這些檔案每次 session 啟動都會載入,定義了 AI 最基本的設定:
- SOUL.md:AI 的人格和行為準則。它是誰、怎麼說話、什麼該做什麼不該做
- USER.md:使用者的基本資訊。你是誰、做什麼、有什麼偏好
- IDENTITY.md:AI 的身份標識
這些就像一個人的「身份證」——不管什麼情境,這些基本資料都隨身攜帶。你不需要每次見面都重新自我介紹。
第二層:MEMORY.md(筆記本)
這是精煉過的長期記憶,像是 AI 的「筆記本」。裡面放的是經過整理、仍然有效的重要資訊。比如:
- 你最近在忙的專案及其現況
- 過去做的重要決策和原因
- 你提過的偏好和習慣
- 之前踩過的坑、學到的教訓
MEMORY.md 不是什麼都放的垃圾場。它是精煉過的精華——只有持續相關的資訊才應該留在裡面。過時的內容要定期清理掉。
第三層:Daily Memory(日記)
memory/YYYY-MM-DD.md 格式的每日記錄,像是 AI 的「日記」。每天一個檔案,記錄當天對話中的重要事項。
跟 MEMORY.md 不同,daily memory 記的是原始的、細粒度的資訊。哪個任務完成了、討論了什麼決策、遇到了什麼問題——都是未經過度整理的第一手紀錄。
語意搜尋:memory_search
除了靜態的檔案層級,OpenClaw 還提供 memory_search 工具,讓 AI 用自然語言搜尋過去的記憶。
這比 grep 好用太多了。你不需要記得精確的用詞。問「上次我們討論資料庫遷移是什麼時候?」,memory_search 可以找到相關的段落,即使原文用的是「DB migration」或「搬資料庫」。
不過語意搜尋也不是完美的。它偶爾會找到語意相近但其實不相關的結果,也可能漏掉用詞差異很大但確實相關的段落。我的經驗是:搜尋品質跟你 daily memory 寫得好不好有很大關係。如果每天的紀錄都是結構清晰、有明確標題的,搜尋結果就會好很多。
實際運作流程
了解架構之後,來看看實際上 AI 是怎麼使用這套記憶系統的。
Session 啟動時
每次新 session 開始,OpenClaw 會依序載入:
SOUL.md→ 確定自己是誰、怎麼行為USER.md→ 確定對方是誰- 今天和昨天的
memory/YYYY-MM-DD.md→ 知道最近發生了什麼 MEMORY.md→ 載入長期重要資訊
這個載入順序是有講究的。SOUL 和 USER 是最基本的,所以先載入。Daily memory 載最近兩天的,因為大部分問題都跟近期有關。MEMORY.md 放最後,作為長期知識的補充。
這裡有個 token 經濟學的考量:所有這些檔案加起來不能太大,不然光是載入記憶就吃掉太多 context window,留給實際對話的空間就不夠了。我自己的經驗是,全部加起來控制在三到五千字以內是比較好的平衡點。
回答有關過去的問題時
當你問 AI 一個跟過去有關的問題,比如「上個月那個效能問題最後怎麼解決的?」,AI 的處理流程是:
- 先用
memory_search搜尋相關的記憶段落 - 從搜尋結果中拉出完整的上下文(
memory_get) - 結合當前載入的記憶,組成完整的回答
因為有語意搜尋,AI 不需要把所有記憶都載入 context window。它可以按需查找,大幅節省 token 用量。
Session 結束或 context 壓縮前
當一個 session 結束、或者 context window 快滿需要壓縮的時候,AI 會自動把重要的資訊寫入當天的 daily memory。
這個「自動歸檔」的行為非常關鍵。它確保了即使 session 被中斷或 context 被壓縮,重要的資訊不會遺失。
設計哲學:Text > Brain
OpenClaw 記憶系統的核心哲學可以用一句話概括:Text > Brain。
意思是:所有重要的東西都要寫下來。不要依賴 AI 的 context window 來「記住」東西,因為 context 隨時可能被清掉。只有寫進檔案的東西才是安全的。
這個哲學其實跟人類的知識管理一模一樣。你不會把所有重要的事情都記在腦子裡——你會寫筆記、建文件、做紀錄。AI 也應該一樣。
另一個設計哲學是分層記憶。不是所有資訊都同等重要:
- 「我們專案用的是 PostgreSQL 16」→ 這是長期有效的事實,放 MEMORY.md
- 「今天花了三小時 debug 一個 N+1 query 問題」→ 這是當日事件,放 daily memory
- 「你喜歡直接給結論,不要先講一堆前情提要」→ 這是使用者偏好,放 USER.md
把對的資訊放在對的層級,記憶系統才能高效運作。
我的踩坑經驗
坑 1:MEMORY.md 無限膨脹
一開始我讓 AI 自由地往 MEMORY.md 寫東西,結果三個月後那個檔案已經肥到快破萬字了。載入時就吃掉一大堆 token,而且裡面一堆已經過時的資訊。
解法:定期 prune。 我現在大約每兩週會讓 AI 做一次 MEMORY.md 的大掃除——把已經不相關的項目移除,把可以合併的資訊濃縮。有點像整理你的筆記 app,過時的備忘錄就該刪掉。
我自己的經驗是 MEMORY.md 控制在兩三千字以內效果最好。太短會遺漏重要資訊,太長會浪費 token 而且 AI 反而不容易找到關鍵內容。
坑 2:Daily Memory 格式不一致
這個問題一開始不明顯,但用了一兩個月就會浮現。如果你沒有給 AI 一個 daily memory 的寫作模板,它每天寫的格式可能都不一樣——有時候用 bullet list,有時候用段落,有時候有標題有時候沒有。
格式不一致會直接影響語意搜尋的效果,因為搜尋引擎會依據文本結構來判斷段落的邊界和主題。
我後來在 SOUL.md 裡加了一段 daily memory 的寫作指引:
1 | ## Daily Memory 格式 |
加了這個之後,搜尋品質明顯提升。結構化的好處就是可預測性高,不管是人去讀還是 AI 去搜,都能很快找到想要的資訊。
坑 3:記憶洩漏的安全問題
這個坑比較隱微,但很重要。如果你的 AI 助理同時在私人頻道和群組頻道工作,你不會想讓群組裡的其他人透過 AI 存取你的私人記憶。
OpenClaw 的處理方式是:MEMORY.md 只在主 session(私人對話)中載入,群聊 session 不載入。 這個設計很聰明,從源頭就防止了記憶洩漏。
但這也意味著你在群聊裡問 AI 有關過去的問題,它可能答不出來。這是安全和便利的 trade-off,我覺得偏安全這邊是對的。
坑 4:記憶衝突
這個是用久了才會遇到的微妙問題。有時候 MEMORY.md 裡記的資訊跟 daily memory 裡的不一致——比如 MEMORY.md 寫著「專案 A 用 Redis 做快取」,但三天前的 daily memory 記錄了「決定把 Redis 換成 Memcached」。
如果 AI 沒有同時看到這兩段記憶,它可能會給出過時的資訊。解決方法還是回到定期整理:當你做了重要的技術決策,記得更新 MEMORY.md 裡的對應項目。或者在 daily memory 裡用醒目的標記(比如 [更新])來標示這是一個覆蓋既有知識的變更。
SOUL.md 的哲學
雖然 SOUL.md 嚴格來說不算記憶系統的一部分,但它是整個記憶架構的基石,值得特別聊聊。
大部分人設定 AI 的方式是寫一堆規則:「你不可以 XXX」、「你必須 YYY」、「遇到 ZZZ 的時候要這樣做」。這種方式短期有效,但規則一多就開始互相矛盾,AI 也會開始鑽漏洞。
SOUL.md 的哲學不一樣。它不是一份規則清單,而是人格描述。你不是在告訴 AI「做什麼」和「不做什麼」,而是在描述它是什麼樣的人。
比如,與其寫「回答問題時不要過度道歉」,不如寫「你是一個自信、直接的助理,會坦率地表達觀點,不需要為自己的建議道歉」。
與其寫「不要產生不正確的資訊」,不如寫「Be genuinely helpful, not performatively helpful. 如果你不確定,就說不確定。」
這個差異看起來很微妙,但效果差很多。基於規則的 AI 會在邊界情況出錯;基於人格的 AI 會用「這符不符合我的價值觀」來做判斷,彈性和一致性都更好。
我花了不少時間迭代我的 SOUL.md,就像在跟一個新同事磨合一樣。剛開始會有很多需要調整的地方,但三四週之後,AI 的行為模式就會穩定下來,真的很像有了自己的個性。
Daily → MEMORY.md 的蒸餾流程
最後分享一個我覺得很重要的實務:daily memory 和 MEMORY.md 之間的蒸餾流程。
每天的 daily memory 會自動累積原始紀錄。但這些原始紀錄不能直接搬進 MEMORY.md——資訊量太大,而且很多是短期有效的瑣事。
我的做法是定期(大約每週或兩週)做一次蒸餾:
- 回顧這段時間的 daily memory
- 找出仍然相關的重要資訊
- 把這些資訊整理、濃縮後寫入 MEMORY.md
- 同時把 MEMORY.md 中已經過時的內容移除
這個過程可以讓 AI 自己做,也可以你手動來。我通常是讓 AI 先做一版,然後我快速看過確認。畢竟你最清楚哪些資訊對你來說仍然重要。
有時候我也會設一個 cron job 來自動做這件事,但我發現人工介入的品質還是比較好,至少在目前的 LLM 能力下。AI 在判斷「什麼仍然重要」這件事上偶爾會出錯——它可能覺得某個技術細節過時了,但你知道下個月要用到;或者它覺得某個專案還在進行中,但其實已經取消了。
跟其他記憶方案的比較
如果你用過其他 AI 記憶方案,可能會好奇 OpenClaw 的做法有什麼不同。簡單說幾個我觀察到的差異:
- ChatGPT Memory:自動摘取,你幾乎無法控制它記了什麼。方便但不精確。OpenClaw 需要更多手動維護,但控制權完全在你手上
- RAG(Retrieval Augmented Generation):通常需要 embedding database 和向量搜尋。OpenClaw 的方式更輕量,不需要額外的基礎設施,就是純文字檔
- MemGPT / Letta:有更複雜的記憶管理機制(自動分頁、壓縮等)。OpenClaw 的方式更簡單直覺,trade-off 是自動化程度較低
沒有哪個方案是完美的。選擇取決於你的需求:如果你想要「設好就不用管」,ChatGPT Memory 或 MemGPT 可能更適合。如果你想要完全掌控記憶的每個細節,OpenClaw 的純文字方式是目前最透明的做法。
結語:從陌生人到夥伴
回到開頭的場景:你跟 AI 說了一件事,隔天它就忘了。
有了 OpenClaw 的記憶系統之後,這個問題幾乎不存在了。AI 會記得你上週的決策、上個月的專案進度、你反覆提過的偏好。它不會每次見面都像個陌生人,而是像一個跟你共事已久的同事——了解你的脈絡、知道你的風格、記得你的歷史。
這個轉變聽起來可能不那麼戲劇性,但日積月累下來,差異是巨大的。你不再需要花時間「暖身」——把背景資訊重新餵一遍。你可以直接從上次中斷的地方繼續,就像跟真人同事一樣。
而且說真的,維護 AI 的記憶系統這件事本身也讓我反思了自己的知識管理。如果連 AI 都需要一套系統來管理記憶,我自己是不是也該更認真地做筆記、寫紀錄?答案顯然是肯定的。
如果你對 OpenClaw 的記憶系統有興趣,完整的文件在 docs.openclaw.ai,程式碼在 GitHub。社群 Discord 也歡迎來交流。
記憶,是把 AI 從工具變成夥伴的那條線。