中期記憶 — 對話持久化#

CH05 短期記憶 解決了「對話太長超出 context window」,但只要 Agent 程式關掉, CH04 介紹的 Agent class 那份 messages list 就跟著進程一起消失。 一週後再開 agent,前面討論到一半的東西沒辦法接著繼續。

這章處理 中期記憶 — 讓使用者能用 /save <name> 把當下的 messages list 存到磁碟,之後即使 Agent 程式關掉、機器重開,下一次重新進入 REPL 只要 /load <name> 就能把同一份對話載回 Agent、繼續對話:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$ python minimal_agent.py
you> 我們開始討論 X 專案
... 一陣子討論 ...
you> /save xproject
you> /exit

# 一週後...
$ python minimal_agent.py
you> /load xproject
you> 上次討論到哪?
claude> 上次我們聊到 ...

「中期」指的是這份記憶 跟特定一段對話綁定 — 不像短期那樣只活在 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.json

JSON 純文字。可以肉眼 diff、grep、git stash 比對。沒有資料庫的開銷。 而且 命名即索引 — 不需要 list 命令也能活:直接 ls sessions/ 就看得到所有 session(但 REPL 內提供 /list 還是方便)。

什麼時候才需要換成資料庫?看規模:

規模對話數適合
個人< 100JSON 純文字檔案(本章做法)
多人協作100s ~ 10kSQLite
大規模10k+Postgres / 雲端服務

minimal-agent 是個人開發者用的,幾百個 session 用 ls sessions/ 看完全沒問題。 等真的要上規模、需要搜尋 / index / 多人共享,再換存儲層。 但 messages list 結構完全一樣,只是換個地方存。


階段檢查點#

到這裡你應該理解:

  • 中期記憶 = 跟特定對話綁定的持久化 — 把當下的 messages list 寫到檔案,下次讀回來繼續
  • 檔案系統就夠sessions/<name>.json 純文字、可 diff、可 grep、零依賴
  • 命名即索引ls sessions/ 就是 list 命令

但中期記憶解決的還是「特定對話」的接續。 跨對話的事實(我叫 Alex、我用 Python、我在做 minimal-agent)每次新 session 都還是要重新告訴模型。 下一章 CH07 長期記憶 用 RAG 解決這個問題。


參考資源#