AI Agent 記憶系統設計:從短期到長期記憶的完整實作指南
我第一次認真做 AI Agent 的時候,踩了一個超蠢的坑——Agent 每次對話都像失憶一樣,完全不記得三秒鐘前講過什麼。那時候我才意識到,記憶系統根本就是 Agent 能不能「像個人」的關鍵。
這篇文章會把我這一年多摸索記憶架構的心得分享給你,從最基本的對話 buffer 到向量長期記憶,再到混合式記憶系統的設計。不是那種教科書式的介紹,而是我實際踩坑之後整理出來的實戰筆記。
為什麼 AI Agent 需要記憶?
想像一下,你每天跟同事聊天,但對方每次都不記得昨天討論的內容。你會崩潰對吧?AI Agent 也一樣。沒有記憶的 Agent 只能處理單輪對話,無法追蹤上下文,更別提從過去的互動中學習了。
記憶系統解決三個核心問題:
- 上下文連續性:讓多輪對話有連貫性,不用每次都重新解釋背景
- 知識累積:Agent 可以記住使用者的偏好、過去的決策結果
- 效能最佳化:避免重複查詢相同資訊,善用 token 預算
如果你正在做 RAG 應用開發,你會發現記憶系統和 RAG 其實是互補的——RAG 負責外部知識檢索,記憶負責互動歷史管理。兩者結合才是完整的 Agent 認知架構。
三種記憶類型:短期、長期、情境
人類的記憶分成短期跟長期,AI Agent 的記憶架構也差不多,但我們可以再細分成三類:
短期記憶(Short-term / Buffer Memory):就是當前對話的歷史紀錄。最簡單的做法是把所有對話都塞進 prompt,但 token 爆炸的速度比你想的快很多。
長期記憶(Long-term / Vector Memory):把重要的互動片段存到向量資料庫,需要的時候用語意檢索撈回來。這部分跟 向量資料庫的選擇息息相關。
摘要記憶(Summary / Episodic Memory):用 LLM 把長對話壓縮成摘要,保留關鍵資訊但大幅減少 token 用量。這是我個人覺得 CP 值最高的做法。
短期記憶:對話歷史管理
最直覺的做法就是 ConversationBufferMemory,把所有訊息都存起來:
from langchain.memory import ConversationBufferMemory
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationChain
memory = ConversationBufferMemory(return_messages=True)
llm = ChatOpenAI(model="gpt-4", temperature=0.7)
chain = ConversationChain(
llm=llm,
memory=memory,
verbose=True
)
# 第一輪對話
chain.predict(input="我想做一個客服機器人")
# 第二輪 — Agent 記得你之前說的
chain.predict(input="它需要能查詢訂單狀態")問題來了:對話超過 20 輪之後 token 數會爆掉。實務上我會用 ConversationBufferWindowMemory 來限制保留的輪數:
from langchain.memory import ConversationBufferWindowMemory
# 只保留最近 10 輪對話
memory = ConversationBufferWindowMemory(k=10, return_messages=True)但是截斷就會丟失早期的重要資訊,所以我們需要更聰明的方案。
長期記憶:向量資料庫實作
VectorStoreRetrieverMemory 是我目前最推薦的長期記憶方案。它把每段對話 embedding 之後存到向量資料庫,需要時用語意搜尋找回相關的歷史片段:
from langchain.memory import VectorStoreRetrieverMemory
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
# 初始化向量資料庫
embeddings = OpenAIEmbeddings()
vectorstore = Chroma(
collection_name="agent_memory",
embedding_function=embeddings,
persist_directory="./memory_db"
)
retriever = vectorstore.as_retriever(search_kwargs={"k": 5})
# 建立向量記憶
vector_memory = VectorStoreRetrieverMemory(
retriever=retriever,
memory_key="long_term_memory",
input_key="input"
)
# 儲存一段記憶
vector_memory.save_context(
{"input": "我的預算上限是每月 500 美金"},
{"output": "了解,我會在推薦方案時考慮你的預算限制"}
)
# 之後的對話中,相關記憶會自動被檢索出來
relevant = vector_memory.load_memory_variables({"input": "推薦一個雲端方案"})這裡有個重點:向量資料庫的選擇會直接影響檢索品質和成本。如果你還在評估不同方案,建議參考 Pinecone、Weaviate、pgvector 的比較分析。
摘要記憶:Token 節省術
ConversationSummaryBufferMemory 是我覺得最被低估的記憶模組。它會在對話超過 token 上限時,自動把早期對話壓縮成摘要:
from langchain.memory import ConversationSummaryBufferMemory
memory = ConversationSummaryBufferMemory(
llm=ChatOpenAI(model="gpt-4"),
max_token_limit=2000,
return_messages=True
)
# 前面的對話會被摘要,近期的保持原文
# 這樣既保留了完整上下文,又不會超出 token 限制實測下來,摘要記憶可以把 token 用量降低 60-70%,同時保留 90% 以上的關鍵資訊。這對於需要長時間執行的 Agent 來說根本是救命稻草。
LangChain 記憶模組實作
真正強大的做法是把上面三種記憶組合起來。LangChain 的 CombinedMemory 讓你可以疊加多個記憶模組:
from langchain.memory import CombinedMemory
# 短期:最近 5 輪完整對話
buffer_memory = ConversationBufferWindowMemory(
k=5,
memory_key="recent_chat",
return_messages=True,
input_key="input"
)
# 長期:向量檢索歷史記憶
vector_memory = VectorStoreRetrieverMemory(
retriever=retriever,
memory_key="long_term",
input_key="input"
)
# 摘要:壓縮更早期的對話
summary_memory = ConversationSummaryBufferMemory(
llm=ChatOpenAI(model="gpt-4"),
max_token_limit=1000,
memory_key="summary",
return_messages=True,
input_key="input"
)
# 組合起來
combined = CombinedMemory(
memories=[buffer_memory, vector_memory, summary_memory]
)如果你已經在用 LangChain 的 Agent 工具呼叫,加上記憶系統之後 Agent 的能力會有質的飛躍。搭配 LangGraph 的狀態管理,你還可以在不同的 Agent 節點之間共享記憶。
記憶系統設計最佳實踐
分享幾個我在生產環境中學到的經驗:
1. 分層記憶架構
不要只用一種記憶。我目前的標準配置是:短期 buffer(5-10 輪)+ 摘要(壓縮早期對話)+ 向量長期記憶(跨 session 持久化)。三層配合起來才能兼顧即時性和歷史深度。
2. 遺忘機制很重要
人會忘事是有原因的。如果 Agent 記住所有東西,雜訊會蓋過重要資訊。我會設定記憶的 TTL(存活時間),還有基於存取頻率的衰減機制。越久沒被檢索的記憶,相關性分數會逐漸降低。
3. 結構化儲存
不要只存純文字。把記憶分成不同類型——使用者偏好、事實資訊、決策歷史、情感狀態——然後用 metadata 標記。檢索的時候可以先過濾類型再做語意搜尋,精準度會好很多。
4. 隱私與安全
記憶裡面可能包含敏感資訊。一定要做好加密儲存、存取控制、還有資料保留政策。歐盟的 GDPR 要求使用者有「被遺忘權」,你的記憶系統必須支援選擇性刪除。
5. 檢索品質測試
記憶存進去容易,但撈得準不準才是關鍵。我會定期用 RAG 評估指標來測試記憶檢索的精確度和召回率,確保 Agent 不會「記錯」或「漏記」。
6. 善用 MCP 協定
如果你的 Agent 需要跟外部工具互動,MCP(Model Context Protocol)可以幫你標準化工具和記憶之間的資料流。這樣記憶系統就不只是記住對話,還能記住工具的執行結果。
總結與下一步
設計 AI Agent 的記憶系統,核心思路就是「分層 + 壓縮 + 持久化」。短期靠 buffer 保持對話流暢,中期靠摘要壓縮節省 token,長期靠向量資料庫實現跨 session 的知識累積。
如果你剛開始做,我建議先從 ConversationSummaryBufferMemory 入手,它能解決 80% 的場景。等需求變複雜了,再逐步加上向量記憶和 CombinedMemory。
記住一件事:好的記憶系統不是記住越多越好,而是在對的時間想起對的東西。這跟人類的記憶其實是一樣的道理。
繼續閱讀
MCP Server 開發實戰:從零打造 AI Agent 工具整合系統
手把手教你用 TypeScript/Python 建置 MCP Server,讓 AI Agent 能查資料庫、讀檔案、呼叫 API。從環境準備到部署連接 Claude,完整實戰教學。
相關文章
你可能也喜歡
探索其他領域的精選好文