隨着智能體應用從實驗性功能轉向生產級用例,一個關鍵發現是:當它們完全融入系統、具有強個性化並能持續學習時,效果最佳。這些智能體需要記憶——作為可靠且可預測的基礎設施,而非事後添加的臨時方案。為此,Weaviate 推出了 Engram,一個基於 Weaviate 向量數據庫的託管記憶服務,旨在讓入門簡單,同時足夠靈活以適配任何用例。
記憶為何重要?
當聊天機器人忘記你的偏好時,會令人困擾。但對於執行長期複雜任務的智能體而言,問題可能更嚴重。沒有記憶的連續性,智能體無法從過往經驗中學習,只會反覆解決相同的中介問題,浪費時間和令牌。雖然前沿模型的長上下文窗口看似能解決問題,但塞滿上下文並非最佳方案。大語言模型容易“迷失在中間”,有效上下文長度遠低於 100%,且過長的上下文會降低準確性、增加延遲和成本。
簡單存儲每條消息雖能解決延遲和成本問題,但原始對話充滿噪音、矛盾和信息變化。依賴大語言模型一次性解決所有不一致性比逐步處理更困難。將所有記憶視為單一對話也無法適應多智能體系統等高級場景。
最好的方法是主動維護記憶,而非讓上下文無限增長。
Engram 的工作方式
Engram 基於 Weaviate 向量數據庫,圍繞異步管道設計。當你添加原始數據時,管道會提取記憶、協調新舊信息並持久化到 Weaviate 中,以供查詢。它提供了通用記憶用例的入門模板,同時底層系統高度靈活、可配置。自定義選項從簡單的自然語言描述(説明哪些主題感興趣)到完全控制管道中的各個步驟。
入門非常簡單:創建項目 API 密鑰後,通過 REST API 或 Python 客户端即可添加數據。Engram 將啓動管道運行,提取與配置主題匹配的記憶並集成到現有記憶中。例如,若用户表達了對向量的喜愛,Engram 會創建新記憶;若此前已提及,則會忽略以避免重複。由於管道異步運行,API 延遲極低,你可以“即發即忘”原始數據,依靠 Engram 記住所需內容。
之後,你可以通過語義搜索檢索相關記憶。除了簡單的 API,Engram 還提供了豐富的組織能力。
記憶組織與作用域
Engram 將記憶自動歸類到預配置的主題中。主題是自然語言描述,告訴大語言模型提取什麼信息以及如何分類。每個主題都有“作用域”,控制哪些原始數據可以影響該記憶。作用域組合了硬隔離和軟隔離:項目級記憶在所有用户間共享;用户級記憶僅屬於特定用户,由 Weaviate 的多租户功能嚴格隔離;屬性級記憶附加鍵值數據,提供軟隔離,查詢時可選擇是否按屬性過濾。
主題還可以標記為“有界”,即每個作用域內最多隻有一個記憶對象。這可用於實現用户畫像等特性,確保智能體系統提示中始終有該記憶。
管道與步驟
Engram 使用管道精確控制原始數據如何加工成記憶。管道由多個步驟組成,異步運行,逐步將原始數據轉換為記憶批次並持久化到 Weaviate。管道基於 Temporal 工作流構建,提供持久執行,確保數據添加後管道一定會完成。管道步驟包括:
提取步驟:使用大語言模型從原始數據中提取與主題匹配的記憶。支持對話數據、字符串數據和預提取記憶三種輸入類型。
轉換步驟:使用大語言模型決定如何將新記憶集成到現有記憶中,或進行特定用例處理。例如,去重或處理偏好變化時,會查詢現有記憶並決定動作(保留、重寫或刪除)。
緩衝區:允許管道持有中間記憶,直到滿足觸發條件(如數據量、時間間隔)再統一處理。緩衝區支持去抖動、等待完整信息、每日彙總等場景。
實際應用示例
示例1:用户對話——用户告知升職為CEO,Engram 提取記憶,發現已有“機器學習工程師”記憶,於是重寫為“用户曾為機器學習工程師,現已升任CEO”,同時刪除新記憶以避免重複。
示例2:多智能體持續學習——一個多智能體RAG系統中,用户建議搜索喜劇電影時應使用過濾器。Engram 分別提取任務目標、已採取行動和反饋,再通過緩衝區合併為一條經驗記憶:“當用户要求查找特定類型(如喜劇)的電影時,應在 genres 屬性上過濾,而非執行 near-text 查詢。”這條經驗可作用於項目範圍,讓所有用户受益,或限定於單個用户以保護隱私。
集成到應用中
在標準聊天機器人應用中,每次新消息都調用 client.memories.add。對於非對話數據,使用字符串類型;如需完全控制提取,可使用預提取數據。檢索記憶時,可將用户消息作為搜索查詢,或將搜索方法暴露為工具調用。對於已知的具體記憶,可使用提取模式。
Engram 旨在既高度靈活又簡單易用。它提供了個性化和持續學習的預構建模板,並計劃集成 Claude Code 等編碼智能體。如果你有興趣瞭解更多,現在即可註冊預覽。