長期記憶:讓 Agent 跨對話記住重要資訊

長期記憶:讓 Agent 跨對話記住重要資訊

7 min read

每次對話結束,大多數代理人的狀態就歸零了。

下一次對話開始,它不記得你上次說的偏好、不記得已經完成了哪些工作、不記得你告訴它的專案背景——你需要重新說明,它重新起步。這個問題在短任務裡還好,但用代理人跑長期專案時,這個「每次重新介紹自己」的成本會累積得相當明顯。

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 你的規範和偏好