在開發 Agent 時,最常見的誤區之一就是把 Conversation History(對話歷史) 當作 Memory(記憶)。
簡而言之:
Conversation History 只是「未經整理的原始日誌(Raw Logs)」,而 Memory 是「經由抽取、結構化與索引後,具備檢索與行動價值的知識體系(Knowledge System)。」
如果把 Agent 比喻成一個人,Conversation History 就像是會議錄音檔,而 Memory 則是你腦海中消化後的重點、經驗法則與對與會者的認識。
| 維度 | Conversation History (對話歷史) | Agent Memory (代理人記憶) |
|---|---|---|
| 資料形態 | 純文字序列(List[Message]),按時間線性堆疊 |
結構化數據(Key-Value)、語意向量(Embeddings)、圖譜(Knowledge Graph) |
| 處理狀態 | Unprocessed(未加工),包含大量的閒聊、廢話與中途嘗試 | Processed(已加工),經過提煉、去重、歸納與語意摘要 |
| 生命週期 | 隨 Context Window 爆滿而被裁切,或隨 Session 結束而消失 | Cross-Session(跨會話),長期存續並隨經驗持續迭代 |
| 檢索方式 | 全量被動載入(Pass-Through) | 精準主動檢索(Vector Search, Graph Traversal, SQL Query) |
| 主要目的 | 維持單次對話的「上下文連貫性」 | 累積「個體偏好」、「領域經驗」與「執行策略」 |
對話歷史中充斥著無關緊要的問候、中間失敗的 Tool Call 錯誤訊息、使用者改口修正的過程。
如果直接把這些原始 Log 全部塞給 LLM:
當使用者關閉視窗,或者開了一個全新的 Chat Session,Conversation History 就歸零了。
user_preference: { language: "Python", style: "Type Hints" }。Conversation History 只能記載「發生了什麼(What happened)」,無法記載「這意味著什麼(What it means)」。
要將單純的「對話歷史」升級為「Agent 記憶體」,通常需要在後端加入 Memory Management Pipeline(記憶管理管線):
[ Conversation History (Raw Logs) ]
│
▼
┌───────────────────────────┐
│ 1. Summarization (壓縮) │ ──> 提取對話大綱,剔除廢話
│ 2. Extraction (實體抽取) │ ──> 提取 Key-Value (如: user.name = "Alice")
│ 3. Reflection (自我反思) │ ──> 總結失敗經驗,形成策略規則
└───────────────────────────┘
│
▼
[ Long-Term Memory Storage ] (Vector DB / Knowledge Graph / SQL)
{"favorite_framework": "FastAPI", "timezone": "UTC+8"},存入資料庫。Alice --[works_on]--> Project X),讓 Agent 具備推理隱性關係的能力。