在本文中,您將學習如何透過簡單的決策樹,一次處理一個資訊類別,來為 AI Agent 選擇合適的記憶策略。
我們將涵蓋的主題包括:
- 四種 Agent 記憶類型——工作記憶、語義記憶、情節記憶與程序記憶——以及每種記憶對其所保存資訊的假設。
- 一個包含五個問題的決策樹,用來分類特定資訊類別實際需要的記憶方式,並說明這些答案如何組合成完整的記憶架構。
- Agent 記憶實作後常見的陷阱,以及如何修正這些問題。
讓我們開始吧。

簡介
記憶是 AI Agent 的核心能力之一,但卻常被視為事後才考慮的設計。有些 Agent 會忘記使用者期望它記住的資訊,而有些則被賦予它們其實不需要的複雜記憶基礎設施。這兩種問題通常來自同一個未被回答的設計問題:不同類型的資訊應該保留多久,以及應該如何被檢索?
Agent 記憶策略值得與編排(orchestration)一樣被慎重設計。與編排模式不同的是,Agent 記憶很少是單一的架構選擇。目前對話、使用者陳述的偏好、過去互動歷史,以及已學會的例行程序是不同類別的資訊,每個類別通常需要不同類型的記憶。有用的問題不是「Agent 應該使用哪一種記憶系統」,而是「每類資訊實際需要哪一層記憶」。
本文將涵蓋:
- 區分工作記憶、語義記憶、情節記憶與程序記憶的核心記憶概念
- 用來分類特定資訊類別所需記憶的五個問題決策樹
- 這些分類如何組合成 Agent 實際部署的分層記憶架構
- 記憶實作並使用後可能出現的陷阱
我們先從為什麼這個分類很重要開始。
為什麼選擇 AI Agent 記憶策略很重要?
在進入決策樹之前,值得先釐清 每一層記憶對其所分配資訊的假設。
- 工作記憶的假設是:目前相關的所有資訊都存在於當前對話與有限的 token 預算中,而刪減或摘要較早的對話回合不會悄悄遺漏 Agent 仍需要的資訊。
- 語義記憶假設某些資訊足夠穩定且可重複使用,因此儲存一個標準化表示比反覆推論、重新詢問或重新處理更有價值。這包括持續的使用者事實(如姓名、角色、偏好語言)、領域知識(如商業規則、產品規格),以及從多次互動中提煉出的一般化知識。
- 情節記憶建立在「發生過的歷史本身具有價值,而非僅有當前狀態」的預期之上:包含過去決策、投訴或交易的記錄,這些記錄應能影響下一次互動。
- 程序記憶的前提是:重複解決相同形態的任務,應讓 Agent 在下一次嘗試時更快或更可靠,而非僅留下過去嘗試的逐字記錄。
這四層記憶回答了關於資訊的不同問題,這也是為什麼大多數生產環境的 Agent 會依賴多種記憶類型。

例如,一個客服 Agent 可能會將當前工單保留在工作記憶中、將客戶的訂閱等級儲存在語義記憶中、將過去的投訴記錄在情節記憶中,並將已學會的退款處理流程儲存在程序記憶中。每層記憶都有其獨特用途。
當資訊被存放在錯誤的層級時就會出現問題。將應屬於結構化檔案的穩定事實存放在向量資料庫中,會讓檢索變得較慢且較不可靠;而搜尋整個互動歷史則可能找出過時或互相矛盾的資訊,這些資訊本可由結構化記錄覆寫。對於 有效的上下文工程而言,記憶只是眾多競爭有限上下文視窗的來源之一,因此只有當資訊能明顯改善 Agent 的回應時才應被檢索。
選擇合適的 AI Agent 記憶策略的決策樹
這棵決策樹包含五個分支問題,每個問題都根據資訊的具體屬性,縮小特定資訊類別所需的記憶方式。請針對每個資訊類別分別執行此決策樹,而非針對整個 Agent 執行一次。一個客服 Agent 的「當前工單」、「帳戶詳細資訊」與「投訴歷史」是三個獨立的資訊類別,每個類別都可能落在決策樹的不同位置。
問題 1:此資訊是否需要在當前回合之後繼續存在?
這個問題將真正需要記憶的資訊與只是看起來需要記憶的資訊區分開來。
- 自成一格、無需延續:一次性分類請求的措辭、僅用於回答當前問題的工具呼叫中間輸出
- 需要延續、需要記憶:客服 Agent 在本次對話中已解決的問題、Agent 昨日繼續處理的程式設計專案狀態
如果資訊是自成一格的 → 不需要任何記憶層;該回合的上下文視窗已足夠。如果資訊需要延續 → 請前往問題 2。
問題 2:此資訊是否需要跨越單一工作階段繼續存在?
這個問題將工作記憶與需要持久性的其他記憶區分開來。
- 僅在工作階段內:已詢問的內容、已呼叫的工具、已解決的問題 → 對話緩衝區已足夠,並透過刪減或摘要來控制大小。OpenAI Agents SDK 中的工作階段記憶管理可直接處理此類需求。
- 需要跨越工作階段:回訪客戶的偏好、進行中專案的狀態、多日任務 → 僅靠工作記憶不足以應對,因為這些資訊必須獨立於任何單一對話而存在。
如果只需要工作階段內的延續性 → 此類別的答案就是工作記憶。如果需要跨越工作階段 → 請前往問題 3。
⚠️ 常見的設計錯誤是將資訊的生命週期配對錯誤:要麼將工作階段範圍的狀態視為永久保存,要麼為只需在對話期間存在的資訊建立持久性記憶基礎設施。
問題 3:這是穩定的事實,還是演進中的事件?
這個問題經常被跳過,導致所有需要持久保存的資訊都被丟進同一個儲存庫,而不考慮其形態。
- 穩定事實(語義記憶):姓名、訂閱等級、偏好語氣、預設寄送地址,或其他在工作階段之間保持有效的持續性知識;將這些資訊儲存為標準化事實,比反覆推論或重新詢問更有價值。
- 演進中的事件(情節記憶):上個月提出的投訴、較早專案階段做出的決策、多次互動中展現的行為模式
記憶架構借用認知科學對人類記憶的分類方式,將穩定知識與特定過去事件的記憶分開。有些框架會直接在儲存層中建立時間維度。例如,Zep 在知識圖譜中對事實進行建模,每個事實都帶有有效期間,因此被取代的事實會被標記為無效,而非默默與新事實互相矛盾。

穩定事實應存放在持久性知識儲存庫中,無論是使用者屬性的結構化記錄、關係的知識圖譜,還是用於語義搜尋的 向量資料庫。演進中的事件則應存放在更接近日誌的結構中,條目會累積,而較舊的條目可能需要摘要或修剪。
如果此類別主要是事實與領域知識 → 語義記憶。如果主要是歷史記錄 → 情節記憶。下一個問題是這個日誌如何在規模化時被搜尋,這會引導到問題 4。
問題 4:此記憶將如何被檢索?
這個問題的重點是根據記憶儲存庫的大小、結構與成長速度來匹配檢索方式,而不是在所有地方使用相同的檢索策略。
- 小型、有限的儲存庫(少數使用者事實或單一檔案):在工作階段開始時讀取整個儲存庫。Anthropic 的記憶工具就是採用這種方式,因為儲存庫保持在足夠小的規模,使得完整讀取成本低廉。
- 大型、可搜尋的儲存庫(互動歷史、文件語料庫或持續擴展的知識庫):使用語義搜尋或混合檢索,只取出最相關的條目,因為讀取全部內容很快就會變得不切實際。Google 的 Memory Bank就是針對此規模設計,而 Mem0 等記憶框架則提供了可與 LangGraph 或 CrewAI 等框架搭配使用的獨立於供應商的解決方案。
一個 Agent 同時需要兩種檢索模式是很常見的:小型語義儲存庫的完整讀取檔案,以及較大型情節日誌或語義知識庫的相似度搜尋。
一旦檢索方式符合每個儲存庫的實際大小與結構,請前往問題 5。
問題 5:Agent 是否需要學習可重複使用的程序?
這就是程序記憶的用武之地,它建立在已有的語義與情節層之上,而非取代它們。
- 應透過重複而改進的重複性任務形態(相同類型的重構、相同類別的工單):值得提煉成程序記憶,讓 Agent 套用精煉後的例行程序,而非僅重播過去的嘗試。
- 一次性或非重複性任務:跳過此層;先前選擇的語義或情節記憶已足夠。
Agent 的記憶模組通常與其規劃與工具層並存,將已學到的上下文反饋到未來規劃的制定方式中。關鍵的設計決策在於寫入什麼內容。原始的過去執行日誌捕捉的是情節記憶,而程序記憶則儲存從這些經驗中萃取出的提煉教訓、成功步驟與可重複使用的策略。一個有用的程序儲存庫應為未來的應用而寫,讓 Agent 能直接將經過驗證的工作流程與模式套用於類似任務。
上述問題應能為您產生如下所示的決策樹:

記憶層如何結合
針對每個資訊類別執行決策樹,會產生一個記憶檔案,而非針對整個 Agent 給出單一答案。將這些檔案結合後,即可看出最符合 Agent 需求的記憶架構。
例如,一個程式設計 Agent 可能會使用工作記憶來處理當前工作階段的編輯、使用語義記憶來保存使用者偏好與工具知識、使用情節記憶來記錄跨專案的變更歷史,並使用程序記憶來保存透過重複使用而改進的可重複測試與驗證工作流程。另一方面,一個簡單的常見問題解答 Agent 可能只需要工作記憶,因為它的資訊都不需要跨越當前對話而存在。

這兩種結果都是同一決策過程的有效產物;差異來自於 Agent 需要保留的資訊類型,以及它需要如何使用這些資訊。
| 層級 | 用途 | 典型實作方式 |
|---|---|---|
| 無持久性 | 自成一格且無需延續的資訊 | 僅依賴上下文視窗;不使用記憶層 |
| 工作記憶 | 單一工作階段內的延續性 | 帶有刪減或摘要功能的對話緩衝區 |
| 語義記憶 | 跨越工作階段持續存在的穩定事實與一般化知識 | 儲存在結構化檔案、知識圖譜或向量資料庫中以進行語義檢索;小型儲存庫透過完整讀取檢索,較大型知識庫則透過相似度搜尋檢索 |
| 情節記憶 | 跨越工作階段持續存在的演進歷史 | 持續成長的日誌,透過時效性或相關性搜尋在規模化時進行檢索 |
| 程序記憶 | 應透過重複而改進的重複性任務模式 | 提煉後的可重複使用例行程序,疊加在現有的語義或情節儲存庫之上 |
常見的 AI Agent 記憶陷阱(與修正方法)
即使為每個類別選擇了正確的層級,記憶實作仍傾向以少數可預測的方式失敗。下表將常見症狀對應到其通常原因與修正方法。
| 問題 | 可能原因 | 修正方法 |
|---|---|---|
| Agent 重新詢問本工作階段已提供的資訊 | 工作記憶刪減過度,或摘要遺漏了相關細節 | 擴大保留視窗或改善摘要所保留的內容,而不是新增長期記憶層 |
| 檢索結果返回不相關或互相矛盾的內容 | 穩定事實與演進中的事件被混雜在同一個未經區分的儲存庫中 | 將它們分開:使用小型結構化儲存庫保存事實,並使用獨立的日誌保存事件 |
| 語義記憶被錯誤資訊覆寫 | 寫入時沒有驗證或版本控制 | 在事實取代既有資料前,加入確認、版本控制或審核步驟 |
| 程序記憶似乎從未改善任何事物 | 儲存庫保存的是過去執行的原始重播,而非提煉後的教訓 | 寫入消化後的經驗教訓,而非嘗試的逐字記錄 |
| 單一記憶系統同時處理事實、歷史與工作階段狀態 | 每個資訊類別都被強迫通過同一個儲存庫,而不是分別進行分類 | 針對每個類別執行決策樹,讓每個類別落在它實際需要的層級 |
總結與後續步驟
決策樹將記憶設計轉化為一系列明確的選擇,而非單一的預設方法。它在建立任何儲存之前就提出關鍵問題:此資訊應保留多久?它是穩定的事實還是過去的事件?之後將如何被檢索?它是否代表可改善未來任務的可重複使用行為?
許多記憶問題來自於將 Agent 處理的所有資訊視為同一類型的資料。如前所述,工作記憶、語義記憶、情節記憶與程序記憶各自有不同的用途,需要不同的儲存與檢索策略。有效的 Agent 會根據資訊需要保留的時間、應如何被檢索,以及是否應改善未來行為,來結合這些層級。
下一步是探索 可用的 Agent 記憶框架與工具。在未來的文章中,我們將逐步說明如何評估這些框架,並根據應用程式的需求選擇合適的方案。
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.