LangMem:AI代理的長效記憶系統(tǒng)
LangMem 是 LangChain 设计的一款 SDK,旨在为 AI 代理提供长期记忆。它使代理能够随着时间从其交互中学习和适应,存储对话中的重要信息,优化其提示和行为,并跨会话保持知识。总之,LangMem 帮助 AI 代理记住用户的偏好、事实和过去事件,从而在多次交互后也能提供更连贯、个性化的响应,并具有情境感知。
LangMem的主要特点包括:
- 与任何存储系统兼容的核心内存API: 一个核心内存API,可以与任何存储系统一起工作,允许你连接不同的后端(如内存或数据库)。
- 内置的“热路径”内存工具: 内置工具,让代理在实时会话中即时保存并检索相关信息(“热路径”)。这意味着代理可以在对话进展时保存相关信息并随时检索它们。
- 后台内存管理器: 一个后台进程,可以自动提取、汇总并更新代理的知识,不受当前对话流程的约束。这有助于代理持续改进,通过从对话中学习,即使在不同会话之间也能做到。
- LangGraph集成: 与LangGraph的长期内存存储(LangChain的持久存储层)的原生集成。如果你使用LangChain的LangGraph平台,长期记忆默认启用,这使得记忆可以在会话之间持久保存并共享。
LangMem的目的是使AI代理更健壮,减少它们的“健忘症”。传统的LLM代理是无状态的,在会话结束或上下文窗口被超出时会丢失上下文。LangMem通过给代理提供一种记忆来解决这一问题——使它们能够回忆过去的互动,记住用户的指令/偏好,并根据经验调整其行为。这将代理从简单的反应系统转变为动态且适应性强的助手,能够随着时间的推移保持上下文的连贯性并变得更聪明且实用。
安装LangMem软件并创建一个AI助手设置 LangMem 需要您先安装 SDK 并将其集成到您的代理中。以下是安装 LangMem 并创建一个带有长期记忆功能的 AI 代理的一步一步指南:
1. 安装 LangMem 软件开发工具包使用pip在您的环境里安装LangMem这个语言处理工具。
运行以下命令来更新langmem包:
pip install -U langmem
确保你为所选的语言模型提供商(例如 OpenAI 或 Anthropic)设置了一个 API 密钥,并将其设置为环境变量(例如 export OPENAI_API_KEY="sk-..."
或 export ANTHROPIC_API_KEY="sk-..."
),这样代理就可以访问 LLM 了。
在你的 Python 代码中,从 LangChain 的 LangGraph 库导入创建代理的函数和内存存储,同时导入 LangMem 的内存工具。
从langgraph.prebuilt导入create_react_agent # 代理框架模块
从langgraph.store.memory导入InMemoryStore # 内存存储后端模块
从langmem导入create_manage_memory_tool, create_search_memory_tool # LangMem 工具
这些是构建模块:create_react_agent
是一个用来创建具备工具支持的代理的工具,InMemoryStore
是一个简单的内存存储器,而 LangMem 的 create_manage_memory_tool
和 create_search_memory_tool
则可以让代理保存和检索记忆。
你可以为代理设置一个内存存储后端。内存存储后端指的是数据存储在内存中,而非持久化存储设备上。在最简单的情况下,你可以使用纯内存存储。
store = 内存存储(
index={
"dims": 1536, # 维度数
"embed": "openai:text-embedding-3-small", # 嵌入模型
}
)
这创建了一个内存中的向量索引(例如,这里是1536维的),用于存储记忆的嵌入。embed
参数指定了嵌入函数或模型(这里使用的是 OpenAI 提供的文本嵌入)。使用 InMemoryStore
表示代理的记忆存储在 RAM 中——这在测试时没问题,但请注意,如果程序重启,这些记忆将会丢失(稍后再详细讨论持久化)。
我们现在启动代理并包含LangMem的记忆管理功能。
agent = create_react_agent(
"anthropic:claude-3-5-sonnet-latest", # 要使用的LLM模型,
tools=[
create_manage_memory_tool(namespace=('memories',)), # 命名空间为('memories',)
create_search_memory_tool(namespace=('memories',)), # 命名空间为('memories',)
],
store=store,
).
在这个代码中,我们创建了一个使用Anthropic Claude模型(你可以使用任何支持的LLM)的React风格的代理。我们传入一个工具列表:create_manage_memory_tool
(允许代理在对话过程中保存新信息)和create_search_memory_tool
(使其能够通过语义搜索查找旧信息)。这两个工具都使用了一个命名空间(这里为 "memories"
)来标记记忆记录。我们还提供了初始化的store
,这样代理就知道在哪里保存/检索其长期记忆。经过这一步后,代理已经准备就绪,具备了长期记忆功能。
像平时一样和这个代理对话。LangMem工具会在后台运行,代理会自行决定何时存储或检索,你无需使用特殊命令,只需正常对话即可。
例如,你可以指示代理:“记得我喜欢暗模式。” 这个用户消息会触发代理的记忆管理工具来存储这一偏好。稍后,如果你问 “我的照明偏好是什么?” ,代理可以使用搜索记忆工具找到存储的事实并相应地回答。在这种情况下,代理会回答类似: “你之前说过你喜欢暗模式。” 这表明代理记住了我们之前的对话内容。
幕后,LangMem的内存管理工具提取了关键信息(用户偏好暗模式)并将其保存到内存存储里。当有人问起“照明偏好”时,搜索内存工具进行了相似性查找。所有这些都在代理内部自动完成——开发人员无需为每个记忆手动编写存储和检索逻辑。
保持 LangMem 记忆的持久性默认情况下,如果你使用的是内存存储,代理的记忆不会持久存在超出进程的运行时间。换句话说,如果服务器重启,所有 InMemoryStore
中的记忆都会被清除。要使代理的长期记忆真正持久(跨越重启或不同部署),你需要使用持久化存储解决方案。以下是一些持久化 LangMem 数据的最佳实践和技术方案:
将易失的内存存储替换为持久化的数据库或向量存储。LangChain 提供了 AsyncPostgresStore
(以及同步的 PostgresStore
),这些存储使用 PostgreSQL 将记忆持久化到磁盘上。实际上,你需要通过连接字符串(connection string)将此存储连接到你的数据库,并在创建代理时将其用作 InMemoryStore
的替代。
例如,你可以创建一个基于 Postgres 的存储,并运行配置来初始化表格。
from langgraph.store.postgres import AsyncPostgresStore
store = await AsyncPostgresStore.from_conn_string("postgresql://user:password@host:5432/dbname")
await store.setup() # 运行数据库迁移
这确保数据被写入数据库并在不同会话之间保持持久性。(如上所述,在上述代码片段中,setup()
运行所需的迁移——通常只需运行一次。)
LangMem 将每个记忆条目与一个 命名空间 相关联,你可以将其视为记忆的“分区”或“标签”。使用命名空间来隔离不同的环境或用户是一种良好的实践。例如,如果你的代理为多个用户提供服务,可以在每个用户的 ID 前面加上命名空间,以区分他们的记忆。这可以防止用户间的数据交叉污染,并保护隐私。
同样,你可能会为不同类型的记忆使用不同的命名空间(例如 "偏好"
与 "事实"
),这取决于你的应用的具体情况。适当的命名空间有助于在数据库中存储持久内存时保持其条理清晰。这样可以在数据库中更好地组织持久内存。
LangMem的内存API是与存储无关的,因此你可以根据需要集成其他持久化机制。重要的是存储后端能保存内存项并支持语义搜索(比如通过嵌入技术)。
如果不使用内置的Postgres存储,你可以连接一个向量数据库,甚至是一个简单的文件或键值存储系统,只要实现了保存和检索记忆的接口即可。LangMem工具可以与任何遵循预期模式(存储内容及其嵌入,以便进行检索)的自定义存储一起使用。
保持并优化长期的记忆随着时间的推移,您的代理进行互动,存储的记忆量会逐渐增加。一个好做法是定期整理或总结旧的记忆,以确保代理的活跃记忆保持最新和相关。LangMem的后台记忆管理器可以协助这一过程,通过提取关键信息并在后台清理冗余。
此外,考虑存储什么:关注重要事实或成功的互动模式,而不是每一个细节,以保持记忆存储的有效性。这确保了长期记忆成为一个有用的资产而不是杂乱无章的记录。
通过遵循这些实践,您可以可靠地保持 LangMem 数据持久。简而言之,使用持久性存储后端(如数据库)进行长期保留,使记忆条目更清晰和更安全,并使用 LangMem 提供的工具来管理内存的生命周期。正确的设置下,您的 AI 代理将在每次运行之间保留知识,并在每次交互中不断改进,实现基于长期记忆的智能承诺。
来源:
- LangChain LangMem 文档
- LangChain GitHub — LangMem 读我文件
- VentureBeat — “利用长期记忆增强 AI 代理:LangMem SDK 的视角 …”
- LangChain 博客文章 — “LangMem SDK 帮助代理实现长期记忆 ”
共同學(xué)習(xí),寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章