隨著智慧體應用從實驗性功能轉向生產級用例,一個關鍵發現是:當它們完全融入系統、具有強個性化並能持續學習時,效果最佳。這些智慧體需要記憶——作為可靠且可預測的基礎設施,而非事後新增的臨時方案。為此,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 等編碼智慧體。如果你有興趣瞭解更多,現在即可註冊預覽。