AI Agent 中的記憶:類型、策略和應用
記憶實現是使智能體能夠保持上下文、從過去的交互中學習并做出明智決策的關鍵組成部分。與人類記憶非常相似,智能體記憶允許 AI 系統隨時間存儲、檢索和利用信息,從而為用戶創造更連貫和個性化的體驗。
Agent 記憶的不同類型
AI Agent 中的記憶系統可以根據兩個關鍵維度進行分類:時間范圍(信息保留多長時間)和可訪問性范圍(誰可以訪問信息)。
時間分類
短期記憶
短期記憶側重于在對話或任務中維持即時上下文:
-
對話記憶:存儲對話歷史,允許 Agent 引用先前的消息并保持對話的連貫性。這對于自然的交互至關重要,因為早期交流的上下文會影響后續的響應。
-
緩沖區記憶:在定義的時間窗口內管理最近的交互,對于多輪推理任務尤其有用。當函數調用依賴于先前操作的結果,形成依賴推理步驟鏈時,這種類型的記憶變得至關重要。
長期記憶
長期記憶支持跨不同會話的持久性:
-
跨會話記憶:允許 Agent 回憶先前對話中的信息,即使在會話結束后也是如此。這會隨著時間的推移創造一種連續性和個性化的感覺。
-
知識庫記憶:存儲事實信息、用戶偏好和學習模式,無論它們最初何時記錄,都可以訪問。
可訪問性分類
私有記憶
為單個 Agent 使用而存儲的信息:
- 僅供創建或擁有該記憶的特定 Agent 訪問
- 該 Agent 可以隨時讀取和修改
- 用于維護特定于 Agent 的上下文和個人用戶信息
共享記憶
可供多個 Agent 使用的信息:
- 可供系統內已定義的 Agent 組訪問
- 任何具有適當權限的 Agent 都可以讀取并可能修改
- 對于協作式多 Agent 系統至關重要,其中信息共享可提高集體績效
Agent 記憶的實現方法
基于變量的記憶
實現記憶的最簡單方法之一是通過系統或用戶定義的變量:
# 基于變量的記憶實現示例
user_preferences = {"language": "English","units": "metric","notification_frequency": "daily"
}# 訪問記憶
def generate_response(query, user_id):prefs = user_preferences.get(user_id, default_preferences)# 使用偏好自定義響應return personalized_response
這種方法簡單直接,但在處理復雜或非結構化信息方面能力有限。
NL2SQL 數據庫記憶
自然語言到 SQL (NL2SQL) 數據庫記憶允許通過自然語言進行結構化數據管理:
# NL2SQL 記憶交互示例
async def update_expense_record(user_query):# 將自然語言轉換為 SQLsql_query = nl2sql_converter.convert("今天午餐新增一筆 45 美元的開銷")# 執行生成的 SQLresult = await database.execute(sql_query)return result
這種方法對于需要結構化數據存儲和檢索的應用(例如費用跟蹤器或庫存管理系統)特別強大。
向量數據庫記憶
向量數據庫將信息存儲為嵌入,從而實現語義檢索:
# 向量數據庫記憶實現示例
from chromadb import ChromaDBVectorMemoryasync def store_information(text_content):# 將文本轉換為向量嵌入并存儲await vector_memory.add(MemoryContent(content=text_content,mime_type=MemoryMimeType.TEXT,metadata={"category": "user_information", "timestamp": current_time()}))async def retrieve_relevant_info(query):# 檢索語義上相似的信息results = await vector_memory.query(query, k=3)return results
向量數據庫擅長基于語義相似性而非精確匹配來檢索信息,使其成為知識檢索系統的理想選擇。
記憶查詢和更新工作流程
此工作流程演示了短期和長期記憶系統如何在整個對話過程中協同工作以維護上下文和個性化。
記憶更新策略
通過函數調用進行啟發式更新
Agent 可以通過由上下文需求觸發的特定函數調用來更新記憶:
- NL2SQL 數據庫更新:Agent 識別何時應存儲信息并生成適當的 SQL 命令。
- 向量數據庫更新:當 Agent 確定新信息可能與未來檢索相關時,會將其嵌入并存儲。
這種方法允許動態的、上下文感知的記憶管理。
通過函數邏輯強制更新
某些記憶更新通過編程邏輯自動發生:
- 變量更新:系統變量根據直接用戶輸入或推斷的偏好進行更新。
- 會話狀態管理:關鍵信息在對話流程的特定點被強制存儲。
這確保了無論 Agent 的決策如何,基本信息始終被捕獲。
記憶查詢策略
啟發式查詢
與更新類似,查詢可以由 Agent 決策觸發:
- 上下文檢索:Agent 確定何時額外的上下文可以改善其響應。
- 知識增強:當面臨復雜問題時,Agent 可能會查詢其記憶以獲取相關事實。
強制查詢
某些記憶檢索是程序化強制執行的:
- 用戶識別:存儲用戶身份的變量在每個會話開始時自動檢索。
- 偏好應用:在生成個性化內容之前強制查詢用戶偏好。
研究案例分析
Coze
Coze 支持短期和長期記憶實現:
- 短期記憶:在會話中維護對話上下文
- 長期記憶:跨會話記錄用戶配置文件信息和關鍵記憶點
- 手動編輯:允許開發人員在調試模式下手動編輯記憶
Coze 的記憶方法在情感陪伴場景中尤其出色,其中個性化交互至關重要。
OpenAI
OpenAI 在 ChatGPT 中實現了跨對話的長期記憶:
- 用戶可以明確指示系統記住特定信息
- 可以使用諸如“你記得關于我的什么?”之類的短語查詢記憶
- 用戶通過刪除特定記憶或完全禁用該功能的選項來保持控制
此實現平衡了實用性與用戶隱私和控制。
AutoGen
微軟的 AutoGen 框架提供全面的記憶支持:
- 內置支持:多種記憶類型,包括基于列表和基于向量的實現
- 集成:與向量數據庫和外部記憶系統配合使用
- 自定義:開發人員可以通過覆蓋
add
、query
和update_context
等方法來擴展記憶協議
AutoGen 的記憶系統因其靈活性和可擴展性而特別引人注目。
LangChain 和 LlamaIndex
這兩個框架都提供專門的記憶實現:
- LangChain:專注于對話和實體記憶,對基于對話的應用有強大的支持
- LlamaIndex:強調可組合和向量記憶,在數據檢索場景中具有特殊優勢
多智能體系統的記憶設計
在為多智能體設計記憶系統時,有以下幾點考慮:
用于多 Agent 協作的共享記憶
對于多 Agent 系統,共享記憶變得至關重要:
- 信息共享:諸如文件路徑之類的簡單信息可以使用以對話為維度的變量進行存儲
- 沖突解決:實施處理來自不同 Agent 的沖突記憶更新的策略
緩沖區記憶壓縮
對于多輪任務,記憶壓縮變得重要:
- 摘要:將先前的對話輪次壓縮成摘要
- 任務初始化:開始新任務時,總結先前任務的結果
- 上下文窗口管理:確保最相關的信息適合模型上下文窗口
長期記憶注意事項
實施長期記憶的決定取決于實際需求:
- 用戶個性化:對于需要個性化體驗的應用是必要的
- 知識積累:對于通過持續使用而改進的系統很有價值