深入解析 AI Agent 的記憶系統(tǒng)設(shè)計
你有沒有想過這個問題:當(dāng)你和 Claude Code 聊了一個小時后,它是怎么記得你之前的需求?當(dāng)你第二天打開同一個項目時,它為什么還能"認(rèn)識"你?
這不是簡單的"存下來"就能搞定的事。這背后是一套精妙的記憶系統(tǒng)設(shè)計。
今天我們就來拆解 Claude Code 的 Memory 架構(gòu),順便聊聊記憶系統(tǒng)的本質(zhì)設(shè)計。
1. 記憶到底是什么?
很多人覺得,記憶嘛,不就是"存數(shù)據(jù)"嗎?
如果把歷史對話都存下來,每次原封不動傳給 AI,很快就會遇到兩個問題:
- Token 不夠用 —— 對話一長,Context 就爆了
- 費用爆炸 —— 每次都傳全部歷史,錢包遭不住
所以光存沒用,得看能不能影響 AI 的決策。
換個說法:歷史要能改變 AI 的行為,才算有記憶。
舉個例子:你上次告訴 Claude Code "不要在測試?yán)?mock 數(shù)據(jù)庫",下次它就不再 mock 了。這才是記憶。
按這個思路,一個記憶系統(tǒng)需要三個東西:
賬本 —— 記錄存了什么、什么時候存的,不能糊里糊涂
索引 —— 光有賬本查起來太慢,得能快速找到相關(guān)內(nèi)容
策略 —— 決定什么時候該記住、什么時候該忘記。這點最容易被忽略,但最關(guān)鍵
沒有賬本就是一筆糊涂賬;沒有索引存了也查不到;沒有策略,系統(tǒng)就會亂套。

2. 為什么需要兩個"大腦"?
能不能把所有能力都塞進(jìn)一個模型?理論上可以——通過反復(fù)訓(xùn)練,讓模型權(quán)重"學(xué)會"記憶。
但這條路有幾個問題:
通用能力會退化。不斷用"記住用戶偏好"這類任務(wù)來微調(diào)模型,模型的其他能力可能會被稀釋。就像讓一個人同時學(xué)十種技能,結(jié)果每種都學(xué)不精。
無法審計和回滾。一旦能力"固化"到權(quán)重里,出了問題沒法排查。
無法實時更新。用戶偏好會變、項目會變,但重新訓(xùn)練模型的成本太高。
所以可行的方案是:把記憶能力從模型里抽出來,單獨做一個系統(tǒng)。
這就是 System 1 + System 2 的架構(gòu):
- System 1 是 LLM 本身,負(fù)責(zé)推理、生成回復(fù)、調(diào)用工具,需要快速響應(yīng)
- System 2 是記憶系統(tǒng),負(fù)責(zé)在后臺決定:要不要檢索記憶?該記住什么?
簡單說:System 1 負(fù)責(zé)"回答問題",System 2 負(fù)責(zé)"準(zhǔn)備回答問題需要的背景"。
為什么這個拆分是合理的?
關(guān)鍵原因是:記憶能力和通用推理能力是獨立的。
怎么證明?可以看三點:
結(jié)構(gòu)上——整個系統(tǒng)可以寫成 f(M(C), C) 的形式,C 是通用推理能力,M 是記憶系統(tǒng),它們是獨立的模塊。
優(yōu)化上——可以在不改變推理模型的情況下,單獨改進(jìn)記憶策略;反過來也可以只優(yōu)化模型,不動記憶系統(tǒng)。
經(jīng)驗上——同一個基礎(chǔ)模型,換不同的記憶系統(tǒng),長程任務(wù)表現(xiàn)差異很大;同一套記憶系統(tǒng),套在不同的模型上,也能工作。
分開有什么好處?
既然獨立,就可以犧牲一點理論上限,換取大量工程好處:
- 不影響 System 1 的性能 —— 記憶操作是后臺進(jìn)行的
- 記憶可以插拔 —— 換個項目、換個用戶,記憶策略可以靈活切換
- 可以審計和回滾 —— 所有的記憶操作都被記錄下來
- 可以 A/B 測試 —— 不同的記憶策略可以對比效果

3. 非參數(shù)化路線有什么挑戰(zhàn)?
把記憶放到外部系統(tǒng),會面臨三個問題:
注入帶寬有限 再多的記憶,一次只能往上下文里塞有限的內(nèi)容。Token 限制擺在那。
檢索不精準(zhǔn) 索引是近似的,查到的可能不相關(guān),沒查到的可能正好需要。檢索噪聲會誤導(dǎo) AI 推理。
策略設(shè)計很難 什么時候該記、什么時候該查、查到后該怎么用——這些策略如果設(shè)計得不好,記憶反而幫倒忙。寫多了污染環(huán)境,寫少了學(xué)不到。
很多系統(tǒng)的失敗不是因為存得不夠多,而是策略太蠢。
4. Claude Code 怎么實現(xiàn)的?
六層記憶架構(gòu)
Claude Code 的記憶系統(tǒng)分成了六個層級:
| 層級 | 名字 | 作用 |
|---|---|---|
| 6 | Agent Memory | 子代理的專屬記憶 |
| 5 | Auto Memory | AI 自己管理的長期記憶 |
| 4 | Local Memory | 項目私有配置 |
| 3 | Project Memory | 項目級指令(比如 CLAUDE.md) |
| 2 | User Memory | 用戶全局偏好 |
| 1 | Managed Memory | 管理員策略 |
優(yōu)先級:項目配置 > 用戶配置 > 全局配置。

Auto Memory 的工作方式
這是 Claude Code 最核心的記憶系統(tǒng)。它的特點是:AI 自己能從對話中提取值得記住的信息。
寫入有兩條路:
一是用戶明確要求記住。你說"Claude,記住我喜歡用 tabs 縮進(jìn)",AI 直接寫文件。
二是AI 主動提取。每輪對話結(jié)束后,后臺會跑一個子代理,分析這一輪對話有沒有值得跨會話保留的信息。比如你提到"這個項目的認(rèn)證模塊要重寫",AI 就會默默記下來。
寫入的內(nèi)容分成四類:
- user —— 用戶是誰、偏好什么
- feedback —— 用戶給過的指導(dǎo)(比如"測試不要 mock 數(shù)據(jù)庫")
- project —— 項目背景(代碼里看不出來的信息)
- reference —— 外部參考(比如 "bug 在 Linear 的 INGEST 項目里")
讀取是主動召回的機制:
每次你發(fā)消息,AI 都會主動去記憶庫看看有沒有相關(guān)的。
流程是:掃描記憶目錄(最多 200 個文件)→ 排除之前展示過的 → 讓小模型打分選出最相關(guān)的 5 個 → 讀取內(nèi)容注入上下文 → 加上時間提示。
記憶會過期
Claude Code 會根據(jù)記憶的"年齡"給出不同待遇:
- 1-2天內(nèi) —— 正常使用
- 超過2天 —— 顯示提醒:"這段記憶可能是舊的了"
- 超過30天 —— 標(biāo)記為 stale,謹(jǐn)慎使用

上下文滿了怎么辦?
對話一長,上下文就會滿。Claude Code 的解決方案是壓縮。
當(dāng) Token 使用到 92% 時,會觸發(fā)壓縮:調(diào)用 AI 把對話歷史濃縮成結(jié)構(gòu)化摘要,檢查質(zhì)量,通過則替換原歷史。整個過程會顯示進(jìn)度給你看。
三級預(yù)警
Claude Code 不會等到 92% 才告訴你:
| 使用率 | 提示 |
|---|---|
| 60% | "記憶使用量較高" |
| 80% | "建議手動整理,或者開新對話" |
| 92% | "正在整理記憶..." |
5. 時間在記憶系統(tǒng)里有多重要?
舊信息可能已經(jīng)過時了。
比如你三個月前告訴 AI "我在負(fù)責(zé) X 項目",但現(xiàn)在你早就不負(fù)責(zé)了。如果 AI 不知道這條信息已經(jīng)過期,它就會用舊信息做錯誤的決策。
所以"時間"不是附加字段,而是架構(gòu)層面的設(shè)計。
Claude Code 的做法是:檢索時默認(rèn)只看"當(dāng)前有效"的信息;給記憶打時間戳,區(qū)分"曾經(jīng)為真"和"現(xiàn)在為真";舊信息不會直接刪除,而是標(biāo)記為過期。
6. 從"知道什么"到"會做什么"
前面的記憶都是"知識"——"這是什么"、"之前怎么樣"。
但有時候更重要的是"怎么做"。
比如 AI 學(xué)會了"怎么排查 Redis 連接問題"——不是一條知識點,而是一套可復(fù)用的解決流程。這種記憶叫程序性記憶。
Claude Code 通過把成功經(jīng)驗固化成技能(Skill) 來實現(xiàn)這一點。一個技能就是一段可執(zhí)行的"套路",下次遇到類似問題直接復(fù)用。
7. 記憶怎么"喂"給 AI?
外部記憶怎么接入 AI 的腦子?
最簡單的方式是拼接到 prompt 里。但這種方式有代價:每次都要把文字轉(zhuǎn)成 token,AI 再重新理解一遍。
前沿研究在嘗試跳過文本中間層,直接把記憶壓縮成 AI 更容易理解的"潛層表示",直接注入到注意力計算里。目前還在探索階段。
8. 總結(jié)
真正智能的記憶,不在于記住多少,而在于管理得有多精細(xì)。