中期記憶 — 對話持久化#
CH05 短期記憶 解決了「對話太長超出 context window」,但只要 Agent 程式關掉, CH04 介紹的 Agent class 那份 messages list 就跟著進程一起消失。 一週後再開 agent,前面討論到一半的東西沒辦法接著繼續。
這章處理 中期記憶 — 讓使用者能用 /save <name> 把當下的 messages list 存到磁碟,之後即使 Agent 程式關掉、機器重開,下一次重新進入 REPL 只要 /load <name> 就能把同一份對話載回 Agent、繼續對話:
| |
「中期」指的是這份記憶 跟特定一段對話綁定 — 不像短期那樣只活在 Agent 程式的記憶體裡(程式關掉就消失),也不像長期那樣抽出穩定事實跨對話累積。
6.1 整體設計#
「Agent 程式關掉、下次開啟還記得」概念上其實很單純 — Model 沒記憶(CH04 4.2 講過),「記得」靠的是把 messages list 重發給它。 既然如此,要讓記憶跨 session 存活,只要:Agent 程式結束前把 messages list 寫到檔案,下次啟動再從檔案讀回來。
實作上我們在 CH04 4.1 那個/指令分流再多塞兩個分支:
| 指令 | 動作 |
|---|---|
/save <name> | 把當下的 messages list 序列化成 JSON、寫到 sessions/<name>.json |
/load <name> | 讀 sessions/<name>.json 回來、蓋掉 Agent 當下的 messages list |
小提示:Agent 程式可以額外加一個
--resume <name>啟動參數,實作上等同/load <name>— 純粹是 CLI 便利包裝。
6.2 儲存策略:純檔案就夠#
6.1 把 messages list 寫到 sessions/<name>.json,沒上資料庫。 對 minimal-agent 這種規模的 agent 來說,純檔案的好處比資料庫多:
sessions/ ← gitignore 掉
├── alex.json
├── refactor-2026-04.json
└── debug-mcp-issue.jsonJSON 純文字。可以肉眼 diff、grep、git stash 比對。沒有資料庫的開銷。 而且 命名即索引 — 不需要 list 命令也能活:直接 ls sessions/ 就看得到所有 session(但 REPL 內提供 /list 還是方便)。
什麼時候才需要換成資料庫?看規模:
| 規模 | 對話數 | 適合 |
|---|---|---|
| 個人 | < 100 | JSON 純文字檔案(本章做法) |
| 多人協作 | 100s ~ 10k | SQLite |
| 大規模 | 10k+ | Postgres / 雲端服務 |
minimal-agent 是個人開發者用的,幾百個 session 用 ls sessions/ 看完全沒問題。 等真的要上規模、需要搜尋 / index / 多人共享,再換存儲層。 但 messages list 結構完全一樣,只是換個地方存。
階段檢查點#
到這裡你應該理解:
- 中期記憶 = 跟特定對話綁定的持久化 — 把當下的
messageslist 寫到檔案,下次讀回來繼續 - 檔案系統就夠 —
sessions/<name>.json純文字、可 diff、可 grep、零依賴 - 命名即索引 —
ls sessions/就是 list 命令
但中期記憶解決的還是「特定對話」的接續。 跨對話的事實(我叫 Alex、我用 Python、我在做 minimal-agent)每次新 session 都還是要重新告訴模型。 下一章 CH07 長期記憶 用 RAG 解決這個問題。