在本文中,您将学习如何通过一个简单的决策树,按信息类别逐一处理,为 AI Agent 选择合适的记忆策略。

我们将涵盖的主题包括:

  • Agent 记忆的四种类型——工作记忆、语义记忆、情景记忆和程序记忆——以及每种类型对所存储信息的假设。
  • 一个五问题决策树,用于分类给定类别信息实际需要的记忆类型,以及这些答案如何组合成完整的记忆架构。
  • Agent 记忆实现后常见的陷阱,以及如何修复它们。

让我们开始吧。

选择合适的 AI Agent 记忆策略:决策树方法

引言

记忆AI Agent 的核心能力之一,但它往往被当作事后考虑。有些 Agent 会遗忘用户期望它记住的信息,而另一些则被赋予它们其实不需要的复杂记忆基础设施。这两种情况往往源于同一个未解决的设计问题:不同类型的信息应该存活多久,以及应该如何检索?

Agent 记忆策略值得与编排(orchestration)一样进行审慎设计。然而,与编排模式不同,Agent 记忆很少是单一的架构选择。当前对话、用户陈述的偏好、过去交互历史以及学习到的例程是不同类别的信息,每种通常需要不同类型的记忆。有用的提问方式不是 Agent 应该使用哪种记忆系统,而是每个信息类别实际需要哪一层记忆。

本文涵盖:

  • 区分工作记忆、语义记忆、情景记忆和程序记忆的核心记忆概念
  • 用于分类给定类别信息所需的五问题决策树
  • 这些分类如何组合成 Agent 实际部署的分层记忆设置
  • 记忆实现并使用后出现的陷阱

我们先从为什么这种分类很重要说起。

为什么选择 AI Agent 记忆策略很重要?

在开始决策树之前,值得明确 每个记忆层对分配给它的信息的假设。

  • 工作记忆基于这样一种理念:当前所有相关信息都存在于活跃对话和有限的 token 预算中,修剪或总结旧轮次不会悄然丢失 Agent 仍然需要的信息。
  • 语义记忆假设某些信息足够稳定且可复用,存储规范表示比反复推断、重新询问或重新处理更有价值。这包括持久的用户事实(如姓名、角色和首选语言)、领域知识(如业务规则和产品规格)以及从重复交互中提炼的泛化知识。
  • 情景记忆建立在这样一种预期上:发生过什么的历史本身具有价值,而不仅仅是当前状态:过去决策、投诉或交易的记录应为下一次交互提供信息。
  • 程序记忆假定反复解决同类任务应使 Agent 在下一次尝试时更快或更可靠,而不仅仅是留下过去尝试的记录。

这四层回答了关于信息的不同问题,这就是为什么大多数生产级 Agent 依赖不止一种记忆。

four types of agent memory

例如,客户支持 Agent 可能会将当前工单保存在工作记忆中,将客户的订阅级别保存在语义记忆中,将过去的投诉保存在情景记忆中,将学习到的退款处理例程保存在程序记忆中。每一层都有不同的用途。

当信息存储在错误的层中时,就会出现问题。将本应属于结构化配置文件的稳定事实存储在向量库中,会使检索更慢且更不可靠;而搜索整个交互历史可能会返回陈旧或矛盾的信息,而结构化记录本可覆盖这些信息。对于 有效的上下文工程,记忆只是竞争有限上下文窗口的众多上下文来源之一,因此只有当信息能显著改善 Agent 的响应时才应检索它。

选择合适的 AI Agent 记忆策略的决策树

该决策树包含五个分支问题,每个问题都根据信息的具体属性,缩小特定类别信息所需的记忆类型。每个类别运行一次决策树,而不是为整个 Agent 运行一次。支持 Agent 的“当前工单”“账户详情”和“投诉历史”是三个独立的类别,每个类别都可能落在决策树的不同位置。

问题 1:此信息是否需要持久保存到当前轮次之外?

这个问题区分了真正需要记忆的信息和看起来需要记忆的信息。

  • 自包含、无需延续:一次性分类请求的措辞、仅用于回答当前问题的工具调用中间输出
  • 需要延续、需要记忆:支持 Agent 本次对话已解决的问题、Agent 昨天暂停的编码项目状态

如果信息是自包含的 → 不需要记忆层;该轮次的上下文窗口就足够了。如果需要延续 → 进入问题 2。

问题 2:它是否需要跨单个会话持久保存?

这个问题将工作记忆与需要持久性的任何东西区分开来。

  • 仅会话内:已提出的问题、已调用的工具、已解决的内容 → 对话缓冲区就足够了,通过修剪或总结保持在范围内。 OpenAI Agents SDK 中的基于会话的记忆管理可直接处理此问题。
  • 跨会话:返回客户的偏好、正在进行的项目状态、多日任务 → 仅工作记忆无法满足,因为信息必须独立于任何单一对话而存在。

如果仅需要会话内连续性 → 该类别的工作记忆就是答案。如果需要跨会话持久保存 → 进入问题 3。

⚠️ 一个常见的设计错误是将信息与其生命周期不匹配,要么将会话范围的状态视为永久的,要么为只需在对话期间存在的信息构建持久记忆基础设施。

问题 3:这是稳定事实还是演化事件?

这个问题经常被跳过,所有需要持久保存的信息都被扔进同一个存储,而不考虑其形态。

  • 稳定事实(语义记忆):姓名、订阅级别、首选语气、默认收货地址或其他持久知识,这些知识在会话间保持有效,且存储为规范事实比反复推断或重新询问更有价值。
  • 演化事件(情景记忆):上个月提交的投诉、早期项目阶段做出的决定、多次交互中的行为模式

记忆架构借用了认知科学对人类记忆的分类方式,将稳定知识与特定过去事件的记忆区分开来。一些框架直接在存储层中构建时间维度。例如,Zep 在知识图谱上建模事实,每个事实都带有有效性窗口,因此被取代的事实会被标记为无效,而不是让它默默地与新事实矛盾。

semantic-vs-episodic-memory

稳定事实属于持久知识存储,无论是用于用户属性的结构化记录、用于关系的知识图谱,还是用于语义可搜索领域知识的 向量数据库。演化事件更接近日志,条目会累积,旧条目可能需要总结或修剪。

如果该类别主要是事实和领域知识 → 语义记忆。如果主要是历史 → 情景记忆。下一个问题是这个日志如何大规模检索,这引出问题 4。

问题 4:如何检索此记忆?

这个问题是关于将检索策略与记忆存储的大小、结构和增长率相匹配,而不是到处使用相同的检索策略。

  • 小型、有界存储(少量用户事实或单个配置文件):在会话开始时读取整个存储。Anthropic 的记忆工具就是这样工作的,因为存储足够小,全量读取成本很低。
  • 大型、可搜索存储(交互历史、文档语料库或不断扩展的知识库):使用语义搜索或混合检索仅获取最相关的条目,因为读取全部内容很快变得不切实际。Google 的 Memory Bank 就是为这种规模设计的,Mem0 等记忆框架提供了可与 LangGraph 或 CrewAI 等框架一起使用的类似、与提供商无关的方法。

一个 Agent 同时需要两种检索模式很常见:小型语义存储的全量读取配置文件,以及对较大情景日志或语义知识库的相似性搜索。

一旦检索策略与每个存储的实际大小和结构相匹配,进入问题 5。

问题 5:Agent 是否需要学习可复用的程序?

这就是程序记忆发挥作用的地方,它位于已有的语义和情景层之上,而不是取代它们。

  • 应通过重复而改进的重复任务形态(同类重构、同类工单):值得提炼到程序记忆中,让 Agent 应用经过优化的例程,而不是仅仅重放过去的尝试。
  • 一次性或非重复任务:跳过这一层;之前选择的语义或情景记忆就足够了。

Agent 的记忆模块通常与其规划和工具层并存,将学习到的上下文反馈到未来计划的制定中。关键的设计决策是写入什么。原始运行日志捕获情景记忆,而程序记忆存储从这些经验中提取的提炼教训、成功步骤和可复用策略。一个有用的程序存储是为未来应用而编写的,允许 Agent 直接将经过验证的工作流和模式应用于类似任务。

以上问题应该会给你一个如下所示的决策树:

Agent memory strategy decision tree

记忆层如何组合

为每个信息类别运行决策树会产生一个记忆画像,而不是为整个 Agent 给出一个单一答案。组合这些画像会揭示最适合 Agent 需求的记忆架构。

例如,编码 Agent 可能会使用工作记忆处理当前会话的编辑,使用语义记忆存储用户偏好和工具知识,使用情景记忆记录跨项目的变更历史,使用程序记忆存储通过重复使用而改进的可复用测试与验证工作流。另一方面,一个简单的 FAQ Agent 可能只需要工作记忆,因为它的任何信息都不需要跨当前对话持久保存。

Combining agent memory types

两者都是同一决策过程的有效结果;区别在于 Agent 需要保留的信息类型以及它需要如何使用这些信息。

用途 典型实现
无持久化 无需延续的自包含信息 仅依赖上下文窗口;无记忆层
工作记忆 单个会话内的连续性 带修剪或总结的对话缓冲区
语义记忆 跨会话持久的稳定事实和泛化知识 存储在结构化配置文件、知识图谱或向量数据库中以进行语义检索;小型存储通过全量读取检索,大型知识库通过相似性搜索检索
情景记忆 跨会话持久的演化历史 增长的日志,通过时效性或相关性搜索在大规模下检索
程序记忆 应通过重复而改进的重复任务模式 提炼出的可复用例程,叠加在现有的语义或情景存储之上

常见的 AI Agent 记忆陷阱(及修复)

即使为每个类别选择了正确的层,记忆实现仍倾向于以可预测的方式失败。下表将常见症状映射到其通常原因和修复方法。

问题 可能原因 修复
Agent 重新询问本会话已提供的信息 工作记忆修剪过于激进,或总结丢失了相关细节 扩大保留窗口或改进总结保留的内容,而不是添加长期记忆层
检索返回无关或矛盾的结果 稳定事实和演化事件混入同一个未区分的存储 拆分它们:使用小型结构化存储存储事实,使用单独的日志存储事件
语义记忆被错误信息覆盖 写入时没有验证或版本控制 在事实替换现有记录前添加确认、版本控制或审核步骤
程序记忆似乎从未改进任何内容 存储保存的是过去运行的原始重放,而不是提炼的教训 写入消化后的经验教训,而不是尝试的记录
一个记忆系统同时处理事实、历史和会话状态 每个信息类别都被强制通过同一个存储,而不是单独分类 按类别运行决策树,让每个类别落在它实际需要的层上

总结与后续步骤

决策树将记忆设计转变为一组清晰的选择,而不是单一的默认方法。它在构建任何存储之前提出关键问题:此信息应持久保存多久,它是稳定事实还是过去事件,以后如何检索,以及它是否代表可改进未来任务的可复用行为?

许多记忆问题源于将 Agent 处理的所有信息视为同一类型的数据。如前所述,工作记忆、语义记忆、情景记忆和程序记忆服务于不同的目的,需要不同的存储和检索策略。有效的 Agent 根据需要持久保存的信息、检索方式以及是否应改进未来行为来组合这些层。

下一步是探索 可用的 Agent 记忆框架和工具。在未来的文章中,我们将介绍如何评估这些框架,并根据应用需求选择合适的框架。

暂无评论。