AN-07 L2 符合性等級: Memory 概念組: 知識
Agent Memory 智能體記憶
筆記是你能讀能改的真相,索引只是可以丟棄的快取。
Agent Memory(智能體記憶) = 你能讀、能改的筆記 + 可以隨時丟棄的索引。每條筆記都引用它的來源;索引(全文、向量、圖、輪廓)只是筆記的派生物;後台維護作業只提議修改,絕不改寫原始日誌。
要解決的問題
記憶框架把記憶放進不透明的資料庫:無法檢查、對比、遷移、糾正,也難以可靠刪除;索引和嵌入模型被綁死。而記憶本身就是攻擊面:2026 年的一項研究裡,持久記憶投毒在兩個智能體上的平均攻擊成功率達 50.46%;另一項研究用一封精心構造的郵件,在檔案系統和向量兩種記憶後端上都得了手。
同時,「哪種記憶架構最好」遠沒有定論:基準互相矛盾。一份不押注任何檢索演算法的設計,才扛得住三年的變化。
工作方式
- 筆記是真相。 Markdown 加 YAML frontmatter:
kind(情景、語義、程式、偏好)、subject、sources、confidence、valid_from、valid_to、supersedes、origin、reviewed。 - 更新而非覆蓋。 新事實
supersedes舊事實;區分有效時間與記錄時間,因為事實會變,而常見基準幾乎不測這一點。 - 索引是快取。 BM25(如 SQLite FTS5)、向量(可以多套並存)、可選的圖;每個派生物帶配方與輸入。換嵌入模型就是後台重算,舊索引保留到新索引的黃金召回測試達標為止。
- 兩類派生。 確定性的(切塊、BM25、固定模型的嵌入)可重現;生成式的(LLM 摘要、抽取出的事實)只能「再生成並比對」,因此標記
generated: true,並且從不作為唯一副本。 - 寫入路徑。
nas_remember把筆記(含來源)寫到當前分支;污點隨之繼承。來自external污點工作階段的筆記進入隔離區,標記為未審閱:可以被召回,但不自動載入,也不會進入MEMORY.md。 - 讀取路徑。
nas_recall= 搜尋、候選、預算視圖加證據指標,並顯示筆記的來源與審閱狀態。 - 維護作業(夜間或空閒時):去重、把情景整合成語義事實、標記矛盾、讓過期的事實失效、重建索引。作業在分支上產出提案,由人或智能體審閱;絕不刪除原始日誌;度量「後悔率」(被回滾的提案比例)。
- 黃金召回測試。 每個 Home 一組「問題、期望筆記」,換模型或索引器時自動迴歸。
從小處開始
memory/notes/*.md加 frontmatter;用 SQLite FTS5 做檢索。- 在 CI 裡跑十條黃金問題。
- 向量索引和維護作業都可以以後再加;先把「來源」和「已審閱才自動載入」做對。
介面草圖
僅作示意。欄位名在規範 v0.3 之前可能調整。
---
id: mem_4kq2
kind: semantic
subject: customer/acme
valid_from: 2026-10-02
valid_to: null
confidence: 0.8
origin: agent
reviewed: true
sources:
- nas://home-box/agents/cleo/journal/2026-10-02.md@9f2c1de#L12-L18
supersedes: [mem_1xa9]
---
Acme renewed for 24 months; the champion moved from Dana to Luis. 規範的要求
- 筆記必須能脫離 Memory 層被讀取(它們是 Store 裡的普通檔案)。
- 每個派生物必須帶配方與輸入;索引必須可丟棄並可重建。
- 由受污染工作階段寫入的筆記,在被審閱之前不得自動載入。
- 新事實必須以
supersedes取代舊事實,而不是覆蓋。 - 維護作業必須在分支上工作並只提議;不得刪除原始日誌。
- 每個 Home 應當帶黃金召回測試,在模型或索引器變化時執行。
借鑑與區別
下面這些都是現成的思路,OpenClaw 的記憶架構已經做了來源標籤、按層隔離和整合時的污點傳播。真正新的部分: OpenClaw 在單個執行環境內部做;我們提議在共享的儲存裡做,讓任何執行環境都受益;並把索引降為可丟棄的快取,使檢索演算法可以更換而記憶不丟。
- Letta Context Repositories
- Letta: is a filesystem all you need?
- OpenClaw memory architecture
- Long-term memory security survey
- Graphiti
- MemGPT
坦誠的侷限
- 生成式派生物不可能逐位重現。
- 維護作業可能把錯誤「固化」成事實,所以它只提議,不直接改。
- 哪種記憶架構最好,目前沒有定論。
開放問題
- 何時由智能體自己寫,何時交給維護作業?
- 跨模型版本的迴歸標準是什麼?
常見問題
為什麼用檔案,不用向量資料庫?
檔案是你能讀、能改、能 diff、能帶走的真相;向量索引是它的派生快取,可以並存多套、隨時重建。Letta 的基準說明,只給智能體 grep 和檔案工具就有競爭力,但各家基準互相矛盾,所以設計不押注某一種檢索演算法。
怎樣防止記憶被投毒?
無法保證絕不被寫入,但可以限制後果:外部來源的內容帶著 external 標籤;受污染工作階段寫的筆記進入隔離區,不自動載入;合併要經過審閱;出了問題可以順著來源鏈找到受影響的筆記並回滾。
換嵌入模型要遷移記憶嗎?
不需要。筆記不變,只是在後台用新的配方重算索引;舊索引保留到新索引的黃金召回測試達標為止。
相關概念
- Budgeted Reads (預算化讀取) 同一個檔案可以用輪廓、章節、行範圍或全文來讀,按預算降級。
- Cascade Forget (級聯遺忘) 沿血緣刪除派生物,按保留類處理歷史,並如實報告做不到的部分。
- Trust Labels (信任標籤) 來源與敏感度兩個小標籤,加上工作階段污點,強制執行 Rule of Two。
引用本頁
為讀者、搜尋引擎和智能體提供穩定的網址與建議的引用格式。
- 建議引用格式
- Agent NAS project. “Agent Memory (智能體記憶).” agentnas.com, 2026-11-11. https://agentnas.com/zh-tw/concepts/agent-memory/