在開發 AI Agent 時,許多工程師會遇到一個核心痛點:如何讓 AI 記住與使用者的長期互動歷史?目前的常見做法是將之前的對話紀錄直接塞進 LLM 的 Context Window(上下文視窗)中。但這種做法在實務上存在三大限制:首先是成本與延遲會隨對話增加而飆升;其次是所謂的 Lost in the Middle 效應,即模型容易忽略位於提示詞中間部分的資訊;最重要的是,即便現在有百萬級別的 Token 視窗,那也僅僅是臨時的草稿本,而非真正的記憶系統。
為了徹底解決這個問題,Elastic 推出了開源項目 Atlas。Atlas 的核心理念是將認知科學中對人類記憶的分類引入到 AI 系統中,讓 Agent 擁有一套可持久化、可擴展且能跨 session 運作的長效記憶機制。
Atlas 的記憶分層架構
Atlas 將記憶分為三種類型,並在 Elasticsearch 中為每種記憶建立獨立的索引,因為它們的生命週期與存取規則截然不同。
第一類是 Episodic Memory(情節記憶),記錄的是發生了什麼事。它捕捉每一次的使用者輸入與互動事件。這類記憶的特性是大量且瑣碎,大部分會隨著時間衰減,但部分關鍵資訊會被提取並轉化為更持久的記憶。
第二類是 Semantic Memory(語義記憶),記錄的是事實真相。當系統透過 LLM 對情節記憶進行整合(Consolidation)時,會將碎片化的事件凝練成簡短的事實句子,並將原始的情節記憶作為證據鏈保留。如果新發現的事實與舊有認知衝突,系統會更新或取代舊的事實。
第三類是 Procedural Memory(程序記憶),記錄的是如何解決問題。它以 Playbooks(操作指南)的形式存在,定義了一系列解決特定問題的步驟。Atlas 會為這些指南記錄成功與失敗的計數器,當 Agent 尋找解決方案時,系統會優先推薦成功率較高的路徑。
記憶的檢索與實作機制
當 Agent 需要提取記憶時,Atlas 並非單純地進行向量搜尋,而是採用了一套混合檢索流程。
系統會同時執行 BM25(基於關鍵字的詞法搜尋)與 Jina v5(基於向量的語義搜尋),接著使用 RRF(Reciprocal Rank Fusion,互惠排名融合)將兩種搜尋結果合併。最後,透過 Cross-encoder Reranker(交叉編碼器重排序)對結果進行精準篩選,確保最相關的記憶被放入 Prompt 中。
在安全性方面,Atlas 利用 Elasticsearch 的 DLS(Document-level Security,文件級安全性)功能,確保每個使用者只能檢索到屬於自己的記憶片段,實現嚴格的用戶隔離。
為什麼選擇 Elasticsearch 而非輕量級資料庫
在技術社群中,有人質疑使用 Elasticsearch 來儲存記憶是否過於沉重(Overkill),認為 SQLite 或簡單的向量資料庫即可。但從工程實務來看,當記憶規模擴大時,簡單的向量搜尋會遇到瓶頸。
首先,複雜的記憶檢索往往需要 Scripted Scoring(腳本化評分)來調整權重,這在輕量級資料庫中難以實現。其次,雖然暴力搜尋(Brute-force)在小規模數據下表現良好,但一旦達到百萬級別的向量數量,若要維持網頁等級的低延遲回應,必須依賴像 Elasticsearch 這樣成熟的 ANN(Approximate Nearest Neighbor,近似最近鄰)索引技術。
總結來說,Atlas 提供了一套從認知科學出發的記憶管理框架,將 AI Agent 的記憶從簡單的對話紀錄,提升到了能夠自我演化、區分事實與經驗的系統層級。
來源:infoq.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。