
LangMem 发布:任何人都能轻松构建智能体记忆! 精华
今天,我们正式发布了 LangMem SDK——一个帮助您的代理通过长期记忆不断学习和改进的工具库。
这个 SDK 提供了一些工具,能够从对话中提取信息、通过更新提示词优化代理行为,并保持关于行为、事实和事件的长期记忆。
您可以将 LangMem 的核心 API 与任何存储系统配合使用,也能在任何代理框架中集成。它还与 LangGraph 的长期记忆层原生兼容。我们还推出了一项托管服务,提供额外的长期记忆功能,并且免费提供——如果您希望在生产环境中使用,您可以通过此链接注册。
我们的目标是让任何人都能够更容易地构建那些随着时间推移,变得更加智能和个性化的 AI 体验。这项工作建立在我们之前推出的 LangMem alpha 服务和 LangGraph 的持久化 长期记忆层的基础上。
安装方法很简单,只需运行:
pip install -U langmem
记忆与自适应代理
代理通过记忆来学习,但其记忆的形成、存储、更新和调用方式,会影响代理能够学到哪些知识,或者执行哪些任务。在 LangChain,我们发现,首先识别代理所需学习的能力,并将这些能力与特定的记忆类型或方法对应起来,之后再在代理中实现这些功能,是非常重要的。在添加记忆之前,您应该先考虑以下几个问题:
- 哪些行为应该由用户反馈学习,哪些应该是预定义的?
- 应该跟踪哪些类型的知识或事实?
- 什么条件下记忆应该被调用?
尽管有一些重叠,每种记忆类型在构建自适应代理时都有其独特的功能:
记忆类型 | 目的 | 代理示例 | 人类示例 | 典型存储方式 |
语义记忆 | 知识与事实 | 用户偏好、知识三元组 | 知道 Python 是一种编程语言 | 配置文件或集合 |
事件记忆 | 过去的经验 | 少量示例、过去对话的总结 | 记得第一天上班的情景 | 集合 |
程序记忆 | 系统行为 | 核心个性和响应模式 | 知道如何骑自行车 | 提示规则或集合 |
回到上面的问题:
- 哪些行为应该被学习,哪些应该是固定的?您的代理行为中的某些部分可能需要根据用户反馈和经验进行调整,而其他部分应该保持一致。这个问题将帮助您决定是否需要程序记忆来让行为模式不断进化,还是固定的提示规则就能满足需求。这类似于 OpenAI 模型规范中的“指挥链”概念,因为学习的行为是通过与用户的互动来塑造的。
- 应该跟踪哪些类型的知识或事实?不同的应用场景需要不同类型的记忆持久化。您可能需要语义记忆来存储有关用户或领域的事实,事件记忆来从成功的交互中学习,或者两者结合使用。
- 什么条件下应该回忆起记忆?有些记忆(如核心程序记忆)是数据独立的——它们始终存在于提示词中。其他记忆可能是数据相关的,根据语义相似度来调用。有些记忆则可能根据应用上下文、相似度、时间等因素来触发回忆。
另一个需要关注的问题是记忆的隐私性。在 LangMem 中,每条记忆都有一个命名空间。最常见的命名空间是使用 use_id
,以避免不同用户之间的记忆交叉。一般来说,记忆可以限定在特定的应用路由、特定的用户,或者跨团队共享,代理也可以学习所有用户的核心行为模式。记忆的共享程度由隐私和性能需求决定。
这些记忆类型旨在处理超越单一对话的记忆。在 LangGraph 中,给定对话或线程内的记忆已经通过检查点功能得到了合理处理(只要它不超出模型的有效上下文窗口),这充当了代理的“短期”或“工作”记忆系统。
这与标准的 RAG 系统有所不同,具体体现在两个方面:首先是信息获取的方式:是通过交互,而不是通过离线数据摄取。其次是优先处理的信息类型。接下来,我们将详细介绍这些记忆类型。
语义记忆:事实
语义记忆存储关键的事实和它们之间的关系,以及其他能为代理提供支持的信息。它让代理能够记住那些模型无法“预训练”的重要细节,而这些信息在网页搜索或通用检索器中是无法获取的。
memories = [
ExtractedMemory(
id="27e96a9d-8e53-4031-865e-5ec50c1f7ad5",
cnotallow=Memory(
cnotallow="Alice 管理着 ML 团队,并且指导 Bob,Bob 也是团队成员。"
),
),
ExtractedMemory(
id="e2f6b646-cdf1-4be1-bb40-0fd91d25d00f",
cnotallow=Memory(
cnotallow="Bob 现在领导 ML 团队并负责 NLP 项目。"
),
),
]
在我们经验中,语义记忆是工程师在首次寻求添加记忆层时最常想要的记忆类型(可能在短期“对话历史”记忆之后)。
它(可以说)与传统的 RAG 系统最为相似。如果某些知识可以从其他存储(如文档、代码库等)中获取,且该存储被认为是权威来源(而非交互本身),那么您的代理可以通过直接检索该知识库中的信息来正常工作。或者,您也可以定期将这些知识引入语义记忆系统。如果这些知识涉及个性化(关于用户的)或者是原材料中找不到的概念关系,那么语义记忆将非常适合您的需求。
程序记忆:行为的演变
程序记忆代表了内化的如何做的知识。它与事件记忆的不同之处在于,它专注于一般化的技能、规则和行为。对于 AI 代理,程序记忆是保存在模型权重、代理代码和代理提示中的,决定了代理的功能。在 LangMem 中,我们将程序记忆视为通过更新代理提示来保存的学习到的指令。
"""
你是一个乐于助人的助手..
如果用户询问天文学问题,使用真实世界的例子和当前的科学数据清晰地解释相关话题。
在有帮助时使用视觉参考,并根据用户的知识水平做出调整。
平衡实际的天文观察和理论概念,基于用户需求提供观测建议或技术解释。
"""
优化器会根据成功与不成功的交互,识别出有效的行为模式,并更新系统提示来强化这些行为。这形成了一个反馈回路,使代理的核心指令根据观察到的表现不断演变。
事件记忆:经历与事件
事件记忆存储的是过去交互的记忆。它与程序记忆的不同之处在于,它专注于回忆具体的经历,而不是一般化的知识。它也与语义记忆不同,因为它关注的是过去的事件,而不是普遍的事实,它回答的是“代理如何解决了一个特定的问题”,而不仅仅是“答案是什么”。事件记忆通常以少量示例的形式存在,每个示例都提炼自较长的原始交互。目前,LangMem 还不支持专门为事件记忆设计的实用工具。
立即体验
您可以通过查看 文档,了解更多关于如何使用 LangMem 实现自定义记忆系统的示例,包括以下内容:
- 创建一个能够主动管理自己记忆的代理
- 在代理之间共享记忆
- 为记忆命名空间,以便按用户或团队组织信息
- 将 LangMem 集成到您自定义的框架中
通过这种方式,LangMem SDK 为代理提供了一个全新的长期记忆管理系统,使得 AI 代理能够在长期互动中不断进化,变得更加智能与个性化。每种记忆类型的设计都紧密围绕着代理行为的提升与优化,您可以根据具体的应用场景来选择合适的记忆方式,提升您的代理能力。
本文转载自 AI小智,作者: AI小智
