系列文章: Deepagent (8/10)

長期記憶:讓 Agent 跨對話記住重要資訊
每次對話結束,大多數代理人的狀態就歸零了。
下一次對話開始,它不記得你上次說的偏好、不記得已經完成了哪些工作、不記得你告訴它的專案背景——你需要重新說明,它重新起步。這個問題在短任務裡還好,但用代理人跑長期專案時,這個「每次重新介紹自己」的成本會累積得相當明顯。
Long-term Memory 就是讓代理人跨越 session,把重要的東西記起來。
長期記憶怎麼運作
Deep Agents 的長期記憶基於 LangGraph Memory Store——一個鍵值式的儲存層,可以跨 thread 和 session 存取。
代理人可以主動執行兩個操作:
- 儲存:把這次對話裡值得保留的資訊存進 Memory Store
- 檢索:在下一次對話開始時,從 Memory Store 撈出相關的記憶
和 Filesystem 工具不同的是:Filesystem 是「任務的工作空間」,放的是當前任務的中間產物;Memory Store 是「代理人的長期記憶」,放的是跨任務、跨時間都有價值的資訊。
基本設定
from deepagents import create_deep_agent
from langgraph.store.memory import InMemoryStore
# 建立記憶儲存(開發用 InMemoryStore,生產用 PostgresStore 等)
memory_store = InMemoryStore()
agent = create_deep_agent(
tools=[...],
store=memory_store,
system_prompt="""你是一個個人助理。
重要原則:
- 用戶提到的偏好、習慣、專案背景,記得儲存到長期記憶
- 每次對話開始,先檢索相關記憶,了解這個用戶的狀況
""",
)把 store 傳進去,代理人就有了存取 Memory Store 的能力。
在生產環境用持久化儲存
InMemoryStore 是開發用的,程式重啟後記憶消失。生產環境要換成真正持久化的後端:
from langgraph.store.postgres import PostgresStore
# 接上 PostgreSQL
memory_store = PostgresStore.from_conn_string(
"postgresql://user:password@localhost/mydb"
)
agent = create_deep_agent(
tools=[...],
store=memory_store,
)也支援其他後端,LangGraph 官方文件有完整的清單。重點是 API 是一樣的,換後端不需要改代理人的邏輯。
代理人什麼時候會自動記憶
配上適當的 system_prompt,代理人會根據對話內容判斷什麼值得記下來:
- 用戶明確說的偏好(「我喜歡簡潔的輸出格式」)
- 專案背景(「這個專案是用 TypeScript 寫的 REST API」)
- 已完成的工作(「昨天我們已經處理完 auth 模組」)
- 用戶的工作習慣(「每次分析完記得出一份摘要版本」)
你也可以在 prompt 裡更明確地定義「什麼應該記」、「什麼不需要記」——細粒度的控制取決於你的應用場景。
把記憶分命名空間管理
當記憶越來越多,用命名空間(namespace)把不同類型的記憶分開管理,方便檢索也方便維護:
# 代理人可以在不同的命名空間存取記憶
# 例如:用戶偏好、專案背景、歷史任務
agent = create_deep_agent(
tools=[...],
store=memory_store,
system_prompt="""記憶管理規則:
- 用戶偏好存在 namespace: preferences
- 專案資訊存在 namespace: projects/{project_name}
- 歷史任務摘要存在 namespace: tasks/history
""",
)分命名空間的好處是檢索時可以更精準——不需要把所有記憶全部載入,只撈相關的。
長期記憶 vs. Filesystem 的分工
這兩個功能有時候看起來很像,但用途是不一樣的:
| 長期記憶(Memory Store) | Filesystem | |
|---|---|---|
| 什麼時候存 | 有跨任務價值的資訊 | 當前任務的中間產物 |
| 存什麼 | 用戶偏好、背景知識、已學到的事 | 草稿、分析結果、工作文件 |
| 生命週期 | 長期保存、跨 session | 通常跟著任務走 |
| 用誰存取 | 代理人的記憶層 | 代理人的工作空間 |
簡單的判斷原則:這個資訊「下次對話」還會用到嗎? 會的話就放 Memory Store,只有這次任務用到的就放 Filesystem。
記憶的品質比數量重要
有一個常見的坑——試圖讓代理人記住所有東西。這不是好策略。
記憶太多時:
- 檢索時雜訊增加,相關記憶反而不容易浮出來
- 舊的記憶可能跟現在的狀況不符,但代理人還是拿來用
- 儲存成本和管理複雜度都會上升
更好的策略是建立記憶的「保留標準」——只記住高價值的、長期穩定的資訊,暫時的、一次性的東西不需要存進長期記憶。
在 system_prompt 裡把這個標準說清楚,比「什麼都記」更有用。
一句話說清楚
長期記憶把代理人從「每次對話都是陌生人」,變成「記得你的助理」——不是什麼都記,而是把真正有長期價值的資訊留下來。
加上前面說的規劃能力、Filesystem 管理和 Subagents,現在的代理人已經有了一個相當完整的運作基礎。下一篇來看 Skills 系統——讓代理人學會你的規範和偏好。
上一篇:Subagents:用 task 工具把複雜任務分包出去 下一篇:Skills 系統:教你的 Agent 你的規範和偏好