LangMem 發(fā)布:任何人都能輕松構(gòu)建智能體記憶! 精華
今天,我們正式發(fā)布了 LangMem SDK——一個(gè)幫助您的代理通過長(zhǎng)期記憶不斷學(xué)習(xí)和改進(jìn)的工具庫。
這個(gè) SDK 提供了一些工具,能夠從對(duì)話中提取信息、通過更新提示詞優(yōu)化代理行為,并保持關(guān)于行為、事實(shí)和事件的長(zhǎng)期記憶。
您可以將 LangMem 的核心 API 與任何存儲(chǔ)系統(tǒng)配合使用,也能在任何代理框架中集成。它還與 LangGraph 的長(zhǎng)期記憶層原生兼容。我們還推出了一項(xiàng)托管服務(wù),提供額外的長(zhǎng)期記憶功能,并且免費(fèi)提供——如果您希望在生產(chǎn)環(huán)境中使用,您可以通過此鏈接注冊(cè)。
我們的目標(biāo)是讓任何人都能夠更容易地構(gòu)建那些隨著時(shí)間推移,變得更加智能和個(gè)性化的 AI 體驗(yàn)。這項(xiàng)工作建立在我們之前推出的 LangMem alpha 服務(wù)和 LangGraph 的持久化 長(zhǎng)期記憶層的基礎(chǔ)上。
安裝方法很簡(jiǎn)單,只需運(yùn)行:
pip install -U langmem
記憶與自適應(yīng)代理
代理通過記憶來學(xué)習(xí),但其記憶的形成、存儲(chǔ)、更新和調(diào)用方式,會(huì)影響代理能夠?qū)W到哪些知識(shí),或者執(zhí)行哪些任務(wù)。在 LangChain,我們發(fā)現(xiàn),首先識(shí)別代理所需學(xué)習(xí)的能力,并將這些能力與特定的記憶類型或方法對(duì)應(yīng)起來,之后再在代理中實(shí)現(xiàn)這些功能,是非常重要的。在添加記憶之前,您應(yīng)該先考慮以下幾個(gè)問題:
- 哪些行為應(yīng)該由用戶反饋學(xué)習(xí),哪些應(yīng)該是預(yù)定義的?
- 應(yīng)該跟蹤哪些類型的知識(shí)或事實(shí)?
- 什么條件下記憶應(yīng)該被調(diào)用?
盡管有一些重疊,每種記憶類型在構(gòu)建自適應(yīng)代理時(shí)都有其獨(dú)特的功能:
記憶類型 | 目的 | 代理示例 | 人類示例 | 典型存儲(chǔ)方式 |
語義記憶 | 知識(shí)與事實(shí) | 用戶偏好、知識(shí)三元組 | 知道 Python 是一種編程語言 | 配置文件或集合 |
事件記憶 | 過去的經(jīng)驗(yàn) | 少量示例、過去對(duì)話的總結(jié) | 記得第一天上班的情景 | 集合 |
程序記憶 | 系統(tǒng)行為 | 核心個(gè)性和響應(yīng)模式 | 知道如何騎自行車 | 提示規(guī)則或集合 |
回到上面的問題:
- 哪些行為應(yīng)該被學(xué)習(xí),哪些應(yīng)該是固定的?您的代理行為中的某些部分可能需要根據(jù)用戶反饋和經(jīng)驗(yàn)進(jìn)行調(diào)整,而其他部分應(yīng)該保持一致。這個(gè)問題將幫助您決定是否需要程序記憶來讓行為模式不斷進(jìn)化,還是固定的提示規(guī)則就能滿足需求。這類似于 OpenAI 模型規(guī)范中的“指揮鏈”概念,因?yàn)閷W(xué)習(xí)的行為是通過與用戶的互動(dòng)來塑造的。
- 應(yīng)該跟蹤哪些類型的知識(shí)或事實(shí)?不同的應(yīng)用場(chǎng)景需要不同類型的記憶持久化。您可能需要語義記憶來存儲(chǔ)有關(guān)用戶或領(lǐng)域的事實(shí),事件記憶來從成功的交互中學(xué)習(xí),或者兩者結(jié)合使用。
- 什么條件下應(yīng)該回憶起記憶?有些記憶(如核心程序記憶)是數(shù)據(jù)獨(dú)立的——它們始終存在于提示詞中。其他記憶可能是數(shù)據(jù)相關(guān)的,根據(jù)語義相似度來調(diào)用。有些記憶則可能根據(jù)應(yīng)用上下文、相似度、時(shí)間等因素來觸發(fā)回憶。
另一個(gè)需要關(guān)注的問題是記憶的隱私性。在 LangMem 中,每條記憶都有一個(gè)命名空間。最常見的命名空間是使用 ??use_id?
?,以避免不同用戶之間的記憶交叉。一般來說,記憶可以限定在特定的應(yīng)用路由、特定的用戶,或者跨團(tuán)隊(duì)共享,代理也可以學(xué)習(xí)所有用戶的核心行為模式。記憶的共享程度由隱私和性能需求決定。
這些記憶類型旨在處理超越單一對(duì)話的記憶。在 LangGraph 中,給定對(duì)話或線程內(nèi)的記憶已經(jīng)通過檢查點(diǎn)功能得到了合理處理(只要它不超出模型的有效上下文窗口),這充當(dāng)了代理的“短期”或“工作”記憶系統(tǒng)。
這與標(biāo)準(zhǔn)的 RAG 系統(tǒng)有所不同,具體體現(xiàn)在兩個(gè)方面:首先是信息獲取的方式:是通過交互,而不是通過離線數(shù)據(jù)攝取。其次是優(yōu)先處理的信息類型。接下來,我們將詳細(xì)介紹這些記憶類型。
語義記憶:事實(shí)
語義記憶存儲(chǔ)關(guān)鍵的事實(shí)和它們之間的關(guān)系,以及其他能為代理提供支持的信息。它讓代理能夠記住那些模型無法“預(yù)訓(xùn)練”的重要細(xì)節(jié),而這些信息在網(wǎng)頁搜索或通用檢索器中是無法獲取的。
memories = [
ExtractedMemory(
id="27e96a9d-8e53-4031-865e-5ec50c1f7ad5",
cnotallow=Memory(
cnotallow="Alice 管理著 ML 團(tuán)隊(duì),并且指導(dǎo) Bob,Bob 也是團(tuán)隊(duì)成員。"
),
),
ExtractedMemory(
id="e2f6b646-cdf1-4be1-bb40-0fd91d25d00f",
cnotallow=Memory(
cnotallow="Bob 現(xiàn)在領(lǐng)導(dǎo) ML 團(tuán)隊(duì)并負(fù)責(zé) NLP 項(xiàng)目。"
),
),
]
在我們經(jīng)驗(yàn)中,語義記憶是工程師在首次尋求添加記憶層時(shí)最常想要的記憶類型(可能在短期“對(duì)話歷史”記憶之后)。
它(可以說)與傳統(tǒng)的 RAG 系統(tǒng)最為相似。如果某些知識(shí)可以從其他存儲(chǔ)(如文檔、代碼庫等)中獲取,且該存儲(chǔ)被認(rèn)為是權(quán)威來源(而非交互本身),那么您的代理可以通過直接檢索該知識(shí)庫中的信息來正常工作?;蛘?,您也可以定期將這些知識(shí)引入語義記憶系統(tǒng)。如果這些知識(shí)涉及個(gè)性化(關(guān)于用戶的)或者是原材料中找不到的概念關(guān)系,那么語義記憶將非常適合您的需求。
程序記憶:行為的演變
程序記憶代表了內(nèi)化的如何做的知識(shí)。它與事件記憶的不同之處在于,它專注于一般化的技能、規(guī)則和行為。對(duì)于 AI 代理,程序記憶是保存在模型權(quán)重、代理代碼和代理提示中的,決定了代理的功能。在 LangMem 中,我們將程序記憶視為通過更新代理提示來保存的學(xué)習(xí)到的指令。
"""
你是一個(gè)樂于助人的助手..
如果用戶詢問天文學(xué)問題,使用真實(shí)世界的例子和當(dāng)前的科學(xué)數(shù)據(jù)清晰地解釋相關(guān)話題。
在有幫助時(shí)使用視覺參考,并根據(jù)用戶的知識(shí)水平做出調(diào)整。
平衡實(shí)際的天文觀察和理論概念,基于用戶需求提供觀測(cè)建議或技術(shù)解釋。
"""
優(yōu)化器會(huì)根據(jù)成功與不成功的交互,識(shí)別出有效的行為模式,并更新系統(tǒng)提示來強(qiáng)化這些行為。這形成了一個(gè)反饋回路,使代理的核心指令根據(jù)觀察到的表現(xiàn)不斷演變。
事件記憶:經(jīng)歷與事件
事件記憶存儲(chǔ)的是過去交互的記憶。它與程序記憶的不同之處在于,它專注于回憶具體的經(jīng)歷,而不是一般化的知識(shí)。它也與語義記憶不同,因?yàn)樗P(guān)注的是過去的事件,而不是普遍的事實(shí),它回答的是“代理如何解決了一個(gè)特定的問題”,而不僅僅是“答案是什么”。事件記憶通常以少量示例的形式存在,每個(gè)示例都提煉自較長(zhǎng)的原始交互。目前,LangMem 還不支持專門為事件記憶設(shè)計(jì)的實(shí)用工具。
立即體驗(yàn)
您可以通過查看 文檔,了解更多關(guān)于如何使用 LangMem 實(shí)現(xiàn)自定義記憶系統(tǒng)的示例,包括以下內(nèi)容:
- 創(chuàng)建一個(gè)能夠主動(dòng)管理自己記憶的代理
- 在代理之間共享記憶
- 為記憶命名空間,以便按用戶或團(tuán)隊(duì)組織信息
- 將 LangMem 集成到您自定義的框架中
通過這種方式,LangMem SDK 為代理提供了一個(gè)全新的長(zhǎng)期記憶管理系統(tǒng),使得 AI 代理能夠在長(zhǎng)期互動(dòng)中不斷進(jìn)化,變得更加智能與個(gè)性化。每種記憶類型的設(shè)計(jì)都緊密圍繞著代理行為的提升與優(yōu)化,您可以根據(jù)具體的應(yīng)用場(chǎng)景來選擇合適的記憶方式,提升您的代理能力。
本文轉(zhuǎn)載自 ??AI小智??,作者: AI小智
