LangMem 发布:任何人都能轻松构建智能体记忆! 精华

发布于 2025-2-21 11:51
浏览
0收藏

今天,我们正式发布了 LangMem SDK——一个帮助您的代理通过长期记忆不断学习和改进的工具库。

这个 SDK 提供了一些工具,能够从对话中提取信息、通过更新提示词优化代理行为,并保持关于行为、事实和事件的长期记忆。

您可以将 LangMem 的核心 API 与任何存储系统配合使用,也能在任何代理框架中集成。它还与 LangGraph 的长期记忆层原生兼容。我们还推出了一项托管服务,提供额外的长期记忆功能,并且免费提供——如果您希望在生产环境中使用,您可以通过此链接注册。

我们的目标是让任何人都能够更容易地构建那些随着时间推移,变得更加智能和个性化的 AI 体验。这项工作建立在我们之前推出的 LangMem alpha 服务和 LangGraph 的持久化 长期记忆层的基础上。

安装方法很简单,只需运行:

pip install -U langmem

记忆与自适应代理

代理通过记忆来学习,但其记忆的形成、存储、更新和调用方式,会影响代理能够学到哪些知识,或者执行哪些任务。在 LangChain,我们发现,首先识别代理所需学习的能力,并将这些能力与特定的记忆类型或方法对应起来,之后再在代理中实现这些功能,是非常重要的。在添加记忆之前,您应该先考虑以下几个问题:

  • 哪些行为应该由用户反馈学习,哪些应该是预定义的?
  • 应该跟踪哪些类型的知识或事实?
  • 什么条件下记忆应该被调用?

尽管有一些重叠,每种记忆类型在构建自适应代理时都有其独特的功能:

记忆类型

目的

代理示例

人类示例

典型存储方式

语义记忆

知识与事实

用户偏好、知识三元组

知道 Python 是一种编程语言

配置文件或集合

事件记忆

过去的经验

少量示例、过去对话的总结

记得第一天上班的情景

集合

程序记忆

系统行为

核心个性和响应模式

知道如何骑自行车

提示规则或集合

回到上面的问题:

  • 哪些行为应该被学习,哪些应该是固定的?您的代理行为中的某些部分可能需要根据用户反馈和经验进行调整,而其他部分应该保持一致。这个问题将帮助您决定是否需要程序记忆来让行为模式不断进化,还是固定的提示规则就能满足需求。这类似于 OpenAI 模型规范中的“指挥链”概念,因为学习的行为是通过与用户的互动来塑造的。
  • 应该跟踪哪些类型的知识或事实?不同的应用场景需要不同类型的记忆持久化。您可能需要语义记忆来存储有关用户或领域的事实,事件记忆来从成功的交互中学习,或者两者结合使用。
  • 什么条件下应该回忆起记忆?有些记忆(如核心程序记忆)是数据独立的——它们始终存在于提示词中。其他记忆可能是数据相关的,根据语义相似度来调用。有些记忆则可能根据应用上下文、相似度、时间等因素来触发回忆。

另一个需要关注的问题是记忆的隐私性。在 LangMem 中,每条记忆都有一个命名空间。最常见的命名空间是使用 ​​use_id​​,以避免不同用户之间的记忆交叉。一般来说,记忆可以限定在特定的应用路由、特定的用户,或者跨团队共享,代理也可以学习所有用户的核心行为模式。记忆的共享程度由隐私和性能需求决定。

这些记忆类型旨在处理超越单一对话的记忆。在 LangGraph 中,给定对话或线程内的记忆已经通过检查点功能得到了合理处理(只要它不超出模型的有效上下文窗口),这充当了代理的“短期”或“工作”记忆系统。

这与标准的 RAG 系统有所不同,具体体现在两个方面:首先是信息获取的方式:是通过交互,而不是通过离线数据摄取。其次是优先处理的信息类型。接下来,我们将详细介绍这些记忆类型。

语义记忆:事实

语义记忆存储关键的事实和它们之间的关系,以及其他能为代理提供支持的信息。它让代理能够记住那些模型无法“预训练”的重要细节,而这些信息在网页搜索或通用检索器中是无法获取的。

LangMem 发布:任何人都能轻松构建智能体记忆!-AI.x社区

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 发布:任何人都能轻松构建智能体记忆!-AI.x社区

"""
你是一个乐于助人的助手..
    如果用户询问天文学问题,使用真实世界的例子和当前的科学数据清晰地解释相关话题。
    在有帮助时使用视觉参考,并根据用户的知识水平做出调整。
    平衡实际的天文观察和理论概念,基于用户需求提供观测建议或技术解释。
"""

优化器会根据成功与不成功的交互,识别出有效的行为模式,并更新系统提示来强化这些行为。这形成了一个反馈回路,使代理的核心指令根据观察到的表现不断演变。

事件记忆:经历与事件

事件记忆存储的是过去交互的记忆。它与程序记忆的不同之处在于,它专注于回忆具体的经历,而不是一般化的知识。它也与语义记忆不同,因为它关注的是过去的事件,而不是普遍的事实,它回答的是“代理如何解决了一个特定的问题”,而不仅仅是“答案是什么”。事件记忆通常以少量示例的形式存在,每个示例都提炼自较长的原始交互。目前,LangMem 还不支持专门为事件记忆设计的实用工具。

立即体验

您可以通过查看 文档,了解更多关于如何使用 LangMem 实现自定义记忆系统的示例,包括以下内容:

  • 创建一个能够主动管理自己记忆的代理
  • 在代理之间共享记忆
  • 为记忆命名空间,以便按用户或团队组织信息
  • 将 LangMem 集成到您自定义的框架中

通过这种方式,LangMem SDK 为代理提供了一个全新的长期记忆管理系统,使得 AI 代理能够在长期互动中不断进化,变得更加智能与个性化。每种记忆类型的设计都紧密围绕着代理行为的提升与优化,您可以根据具体的应用场景来选择合适的记忆方式,提升您的代理能力。

本文转载自 AI小智​,作者: AI小智


收藏
回复
举报
回复
相关推荐