检索与知识已更新 2026-08-25 · 版本 1.2

长期记忆

为智能体提供跨会话的持久化记忆,使其能够在单个上下文窗口之外记住事实、用户偏好和先前的结果。写入路径决定存储什么、对其进行摘要并去重;读取路径在需要时仅将相关的记忆检索到上下文中。与缓存完整答案以跳过重复计算的语义缓存不同,长期记忆存储持久的事实和状态,并在每次进行新的推理时重新组合它们。

证据: 生产环境置信度: 来源: 生产系统来源: 个人经验来源: 行业观察

问题

上下文窗口是有限的,并且会在会话之间重置。仅关注当前对话的智能体会遗忘用户声明的偏好、上周做出的决定以及先前任务的结果。在超过一定规模后,将所有历史记录塞进每个提示词中是不可能的,而且随着窗口被低价值 Token 填满,推理质量也会下降。团队需要一种方法来持久化存储少数关键事实,并在它们相关时精准地呈现出来。

适用场景

当智能体需要重复服务相同的用户或处理相同的长期运行任务时,请使用此模式:例如学习偏好的助手、跟踪客户历史记录的支持智能体、记住项目规范的编码智能体,或跨越数天的多步骤工作流。它假设您可以在模型外部存储数据(向量存储、数据库或记忆框架),并且您可以控制何时写入记忆以及如何将记忆检索到提示词中。

解决方案

将写入路径与读取路径分离。在写入路径上,在单轮对话或任务完成后,提取步骤会决定哪些内容值得记住:稳定的事实、偏好、承诺和结果——而不是瞬时的闲聊。候选记忆会被总结为紧凑、自包含的陈述,并与现有记忆进行比对以去重和检测冲突,然后写入带有元数据(记忆类型、时间戳、来源以及所属的用户或范围)的存储中。目标是少写但写好,嘈杂的记忆会污染后续的检索。 在读取路径上,在智能体进行推理之前,您需要检索与当前任务相关的候选记忆(通常通过语义相似度加上范围和时效性过滤器),对其进行排序,并仅将前几个注入到上下文中。将检索视为一个精度问题:少数正确的记忆胜过大量松散相关的记忆。区分记忆类型以便进行有针对性的检索:情景记忆(发生了什么)、语义记忆(持久的事实和偏好)和程序记忆(如何执行循环任务)。定期合并和过期记忆,以保持存储的小型化、最新性且无冲突。

组件

记忆提取器(写入路径)去重与冲突检查记忆存储检索器(读取路径)上下文装配器合并与过期任务

优势

  • 智能体能够召回先前会话中的偏好、决定和结果,因此用户无需重复提供上下文,且智能体随时间推移表现出一致的行为。
  • 仅检索少数相关的记忆可以使窗口专注于高价值 Token,而不是倾倒全部历史记录,从而保证了推理质量并降低了成本。
  • 随着稳定事实和偏好的积累,智能体在每次交互中都能更准确地定制回复,而无需重新训练模型。
  • 由于记忆保存在带有元数据的外部存储中,您可以检查、纠正、导出和删除智能体所知的内容——这对于信任和合规性至关重要。

风险

  • 如果没有合并和过期机制,存储中会积累过时的事实和相互冲突的陈述,导致智能体自信地基于错误的信息采取行动。
  • 持久化用户数据会增加数据保留、同意和访问控制方面的义务;如果未强制执行范围限制,记忆可能会跨会话或跨用户泄露敏感信息。
  • 低精准度会注入无关或错误的记忆,从而误导推理;低召回率会默默丢弃关键记忆,使故障难以诊断。
  • 过度频繁的写入会使存储膨胀、减慢检索速度、增加存储和嵌入成本,并稀释高质量检索所依赖的信号。

不适用场景

  • 如果会话是独立的且不需要传递任何内容,持久化记忆只会增加复杂性、成本和隐私风险,而不会带来任何好处。
  • 当目标是为重复的查询重用以前的答案时,语义缓存是正确的工具;长期记忆用于记住事实和状态,而不是缓存输出。
  • 在法规或政策禁止保留用户数据的情况下,请勿持久化记忆;应依赖会话内上下文或用户控制的、有明确范围限制的显式存储。

技术

Vector storeMemory frameworks (Mem0 / LangMem)RAGSummarization

示例

  • 跨会话记住语气、格式、常用联系人和现行指令,仅检索适用于当前请求的少数内容,而不是重新询问。
  • 在每次联系时,它会检索该账户范围内的客户先前问题、权益和解决方案,从而继续对话而不是重新开始。
  • 它存储程序记忆——构建命令、命名规则、评审偏好——并在跨多个会话在同一个代码库中工作时召回它们。

生产实践证据

上下文
在 57 天(161 个会话 / 2,776 轮)内观察到的单操作员、本地优先的 OpenClaw 部署,数据从智能体自身的轨迹追踪中聚合而来。
场景
智能体持久化工作区记忆文件和每个会话的追踪,以实现跨轮次和跨会话的连续性,并可根据需要使用语义召回插件。
技术
工作区记忆文件(MEMORY.md、IDENTITY.md、SOUL.md、USER.md、HEARTBEAT.md)、持久化会话 ID 和生命周期事件,以及活动记忆插件(memory_search/get/recall)。
负载
在 57 天的窗口期内共有 134 个持久化会话文件;语义召回被调用了一次。
结果
通过结构化工作区记忆,在 57 天内的 134 个持久化会话中保持了连续性;在此自主工作负载中,极少需要显式语义召回(仅调用一次)。单操作员本地优先部署。

KPI

注入记忆的检索精准率
在放入上下文的记忆中,实际相关的比例。这是最直接决定回答质量的指标;表现良好意味着注入的记忆集几乎完全切题,极少出现无关记忆。
依赖记忆的任务的检索召回率
在需要已知存储事实的任务中,该事实实际被检索到的频率。表现良好意味着正确的记忆能够可靠地呈现;持续遗漏则表明存在提取或索引差距。
记忆库大小和增长率
总记忆量以及每个活跃用户的累积速度。表现良好意味着增长与真正新增的持久事实保持同步,而不是无限制地攀升——失控的曲线表明写入过于频繁。
陈旧率和冲突率
检索到的记忆中已过时或与更新的事实相冲突的比例。表现良好意味着该比例低且稳定,这证明整合和过期机制跟上了变化的速度。

已观测到的失效模式

  • 记录所有内容会导致记忆库充斥噪音;检索时就会呈现低价值或错误的记忆。解决方法是提高写入内容的门槛,并审查提取质量。
  • 在事实发生变化后,检索并执行了旧的事实,且没有任何其已过时的信号。通过时间戳、基于新鲜度权重的排序以及在写入时显式更替来缓解此问题。
  • 由于缺少或错误的范围过滤器,导致某个用户、租户或项目的记忆被检索到了另一个的上下文中——这同时属于隐私和正确性故障。
  • 为了弥补排序不佳的问题,团队注入了大量记忆,导致窗口中充斥着边缘 Token,从而降低了记忆本应支持的推理能力。

经验教训

  • 质量取决于你选择记住什么。一个小型、干净、去重的记忆库,其检索效果远好于一个庞大且嘈杂的记忆库。
  • 少数正确的记忆胜过大量弱相关的记忆。应针对相关性进行微调并严格排序,而不是最大化注入量。
  • 存储元数据并提供查看、编辑、过期和删除记忆的方法。这对于调试、建立信任以及履行隐私义务至关重要。
  • 事实会变陈旧并相互冲突。尽早构建整合、更替和过期机制;在已被污染的大型记忆库上进行后期改造会非常痛苦。

常见问题

这与语义缓存有什么不同?
语义缓存存储并重放完整的回答,以避免重复计算相似的请求。长期记忆则存储持久的事实、偏好和结果,然后针对每个新任务将它们重新组合成全新的推理。前者重用输出,后者记住状态。
智能体实际上应该记住什么?
稳定、可重用的信号:用户偏好、决策与承诺、先前任务的结果以及循环往复的流程。避免记录瞬时的闲聊以及任何无法证明保留合理性的内容。写得少但写得好,才能保证后续检索的精准。
如何处理 PII 和隐私?
将记忆库视为受治理的数据:强制执行范围限制,确保记忆绝不跨用户或租户,尽量减少持久化的内容,支持知情同意 and 删除,并设置保留和访问控制。可检查性和过期策略是履行这些义务的一部分。

参考文献