
為什麼我們的 AI Agent 要睡覺:打造會自行更新的記憶
AI Agent 的記憶工具已經不少。我們還是自己做了一套,讓它在 Agent 閒下來時修正錯誤。這篇文章談談原因、運作方式,以及我們測到了什麼。
三月,你把測試環境伺服器的位址告訴一個 AI Agent。到了 六月,伺服器搬了,你又把新位址告訴它。一套只管收集的記憶,現在兩個位址都存著。第一個位址也不算錯;它當時確實是對的。但 Agent 偶爾會信心十足地選中它,像一個人給你指路去一家多年前就歇業的餐廳。
這就是大多數 AI Agent 記憶的問題。讓它記住一件事很容易。麻煩從記住的事過時那一刻才開始。
最後,我們在 Sno Station 裡做了自己的記憶功能。說實話,我並不特別想做。市面上已經有不錯的記憶工具,有些在 GitHub 上有數萬顆星,世界也不需要第十家記憶工具供應商。我們並不打算成為其中一家。但我們需要三樣東西,始終找不到一個能同時做到的工具。
一份記憶,供所有 Agent 使用
第一件事說起來很簡單。我們用的不只一個 AI Agent:Claude Code、Codex,有時還有 OpenClaw 和 Hermes。每個都有自己的一套記憶,每套記憶都只認自己的門。
於是你告訴 Claude Code 團隊每週四部署,到了週五,Codex 卻不知道。你得在它們之間傳話。你就是那條線。
在 Sno Station 裡,每個人在自己的機器上都有一份加密的記憶儲存。每個 Agent 都透過一個輕量外掛讀取和寫入。你工作時,外掛會悄悄記下值得保留的內容;工作階段開始時,它會找回相關內容。底層只有一個寫入者,所以兩個 Agent 不會互相覆寫。
這也是交接能夠運作的原因。假設一個 Agent 做事做到一半用完了額度,另一個接手。接手的 Agent 不用從零開始;它知道前一個知道的事。沒有共享記憶,所謂交接,不過是換個 Agent 讓你把一切再解釋一遍。
這也意味著記憶歸你所有,而不是歸某個執行工具所有。明年換一個 Agent,它對你和你工作的了解仍會留在原處。
取代,而不是堆積
第二件事,就是那台測試環境伺服器。
很多記憶系統只會附加。每個新事實都往上堆,沒有東西會被拿走。展示時一切順利。幾個月後,你換了工作,API 變了,Agent 卻還記得你的前任老闆。只增不減的記憶會存下每一個版本,然後在最不該出錯的時候,把挑選工作交給模型。
我們的做法不同,而且規則很嚴格。新事實與舊事實衝突時,模型查看這一對事實,只能給出三種答案之一:取代、保留或不確定。它只能說這些。模型負責判斷,一般程式碼完成剩下的工作。舊記憶被標記為停用,新記憶取而代之,而 Agent 看到的始終只有目前的記憶。
模型沒有刪除按鈕。這一點我要強調。它不能自行移除任何內容;如果你想回頭看看過去什麼曾經是真的,停用的記憶還在那裡。這有點像在帳本的一筆記錄上劃線,與直接把那頁撕掉的差別。
判斷有多準
判斷是有風險的部分。如果模型取代了本該保留的事實,你就失去了一件真事。這比雜亂更糟。
所以,我們專門為這一項判斷訓練了一個小模型,並拿它和一家大型實驗室的前沿模型比較。兩者考同一套題:223 對事實,每對各有一個較舊和較新的事實,正確答案已知。
我們的模型有 97.5% 的時候選對了操作。前沿模型是 96.8%。
我更在意的是錯誤取代,也就是把真實事實丟掉的情況。我們的模型有 3.2% 的時候犯了這種錯。前沿模型是 4.1%。
我不想誇大這些結果。這是一套 六月做的小測試,只有 223 道題,兩個模型的成績都已接近滿分。此後我們又編了一套更難的題。這也不是與其他記憶工具的比較。我們還沒做那項測試,我不會把別人的數字說得像是我們親自測過一樣。
這些結果能說明的是:只用一張顯示卡執行的小模型,做這一項判斷時,表現可以與最大的模型差不多。這很重要,因為這種判斷會不斷發生,而且涉及的內容,你可能並不想傳給任何人。
為什麼要睡覺
第三件事是何時做這些工作。
你不能在 Agent 工作時把這一切都做完。每多一個新事實,就得回頭檢查它已經記住的一切。這很慢,而 Agent 還有任務要完成。所以,繁重的部分放在 Agent 閒下來的時候做。
在公司內部,我們把這輪處理叫作 REM,借的是人在睡眠中似乎會整理白天經歷的那個階段。我起初反對這個名字,覺得它有點裝可愛。但它很貼切。這輪處理會梳理當天的工作階段。舊事實會停用,矛盾會得到解決。之後需要記住的東西變少了,留下來的也更符合你現在的工作方式。記憶本來就應該在一夜之後變少,堆積則恰恰相反。
你可以選擇有多少內容離開自己的機器。在隱私保護最嚴格的設定下,一點也不會離開:由你自己的 Agent 模型負責整合,所有內容都留在本機。在預設設定下,由你的 Agent 訂閱服務負責思考。如果你主動選擇加入,我們的模型會處理最難的判斷,例如上面說的取代還是保留。
我也該說說目前的進展。共享儲存和取代規則已經在我們這裡日常使用。睡眠處理是最新的一部分,在我們自己的機器上還沒有做到每晚執行。由於一個設定錯誤,它之前一直跳過自己;這個問題正在修復。我寧願自己告訴你,也不願讓你後來才發現。
為什麼它是一切的基礎
剛開始時,有件事我沒想明白。我以為記憶是一個功能。它其實更像地板。
每晚覆盤需要一個地方存放經驗教訓:Agent 會讀取自己的工作階段並記下學到的東西。Agent 之間的交接也需要它。記錄 Agent 做過什麼,以及它有多少次第一次就做對,同樣需要它。今後我們在雲端建造的任何東西,也都會從這裡保存的內容中提煉出來。
如果基礎是一堆只會增長的記錄,這些東西都不值得往上建。它們需要的記憶,可以在週一出錯,到週二就被修正,而不必有人進去手動修改。
記憶一旦有錯,下一個 Agent 就會繼承這個錯誤,你還得再解釋一遍。
直到伺服器又搬家。
Sno Station 是開源軟體。它在 sno.ai。
Written by Sno AI Team
Contributing writer at Sno.ai, sharing insights about AI, productivity, and knowledge management.
Related Articles
Comments
Comments coming soon. Configure Giscus at giscus.app


