11.04概念更新于 2026年9月17日

长期记忆

写入什么、如何召回、如何纠错与遗忘。

11.04 · 课时讲解

长期记忆

难点不是存下来,而是存对、取准、会改、会忘。

1 / 14

一句话理解:长期记忆的难点不是“存下来”,而是“存对、取准、会改、会忘”:只写入未来确实有用且无法从源头重新获取的信息,按需召回,带上来源与时间,并允许被纠正和删除。

想象一个销售分析 Agent 跟用户合作了三个月。理想状态下,它知道用户看周报习惯按大区汇总、华东区的口径要剔除退货、“大客户”指年采购额 500 万以上的客户,上个月还被纠正过一次“不要把预售订单算进当月销售额”。用户再也不用每次重复这些背景。

现实中更常见的是另一种局面:记忆库里堆了几百条“用户问过华东销售额”这类没用的记录;某条口径已经改了,旧记忆还在起作用;有条记忆来自一封被注入了恶意指令的邮件。Agent 并没有更懂用户,反而更难预测。

长期记忆做得好是护城河,做不好是隐患。这一课讲四件事:写什么、怎么写、怎么取、怎么改和忘。

四件事首尾相连,构成一个循环:

长期记忆的写入、召回、使用、纠错与遗忘循环,中心是带类型、作用域、来源与时间的记忆库 记忆库 类型 · 作用域 来源 · 时间 写什么 · 怎么写 写入 未来有用?别处拿不到? 两个都是才写 怎么取 召回 索引常驻 + 按需读取 按作用域过滤 怎么用 使用 带来源与时间进入上下文 影响动作前回业务系统确认 怎么改和忘 纠错与遗忘 冲突 · 纠正 · 过期 定期整理合并 防投毒:处理网页、邮件等不可信内容时,限制记忆写权限或加审核
图 1 · 长期记忆的循环:存对、取准、会改、会忘,四件事缺一不可

写什么:值得长期记住的四类信息

Claude Code 的自动记忆功能给出了一个很实用的分类。它让模型把笔记分为四类,并明确规定不记录能从代码库推导出来的内容,也不记录项目说明文件中已经写过的内容:

类别 含义 销售分析 Agent 的例子
用户 用户的角色、专长、工作偏好 区域销售总监;周报按大区汇总
反馈 用户给出的纠正,以及确认有效的做法 “预售订单不算当月销售额”
项目 进行中的工作、截止时间、无法从数据推导的决定 Q4 目标于 10 月 8 日调整
参考 在哪里能找到外部信息 口径说明在某个 Wiki 页面

另一种常用的划分来自 LangChain 的文档,借用了心理学的概念:语义记忆(事实与概念)、情景记忆(过去发生的事件与经验)、程序记忆(完成任务的规则,对 Agent 来说体现在提示词和代码里)。两种划分可以互相对照。

不该写入长期记忆的

不该写 原因 应该去哪
业务数据(“华东 8 月销售额 3,200 万”) 会变化、有唯一事实来源 每次实时查询
能从源头推导的信息(代码结构、表结构) 冗余,且会与源头不一致 需要时重新读取
一次性的对话内容 对未来没有价值 会话历史
任务进度 随任务结束而失效 任务状态
密码、API Key、令牌 会被原样带入之后的每次会话 凭据管理系统
未经用户同意的敏感个人信息 隐私与合规风险 不存,或经明确授权后隔离存储

判断标准可以浓缩为一句话:这条信息在未来的会话中有用,且无法可靠地从别处重新获得吗? 两个条件同时满足才写。

怎么写:时机与结构

写入时机

方式 做法 优点 缺点
在主流程中写 Agent 在对话过程中决定并写入 立即生效;用户能看到“已记住” 增加延迟;模型分心
在后台写 会话结束后由单独流程提炼记忆 不影响主流程体验 有延迟;用户不易察觉
用户显式要求 “记住:以后报表都用万元” 意图明确、准确率高 依赖用户主动

LangChain 文档把前两种称为“在热路径中写入”和“在后台写入”。实际产品常常组合使用:用户显式要求的立即写入,其他候选记忆在后台提炼,并由用户确认或可随时查看。

记忆结构

结构 做法 适合
档案(Profile) 一份持续更新的用户或项目档案 字段明确的偏好与画像
集合(Collection) 许多独立的小条目,不断追加和更新 零散的纠正、经验、事件
文件目录 按主题分文件,加一个索引文件 需要人能直接阅读和编辑

Claude Code 的自动记忆采用“索引 + 主题文件”的目录结构:一个 MEMORY.md 索引文件(每条记忆一行)和若干主题文件。每次会话开始只加载索引的前 200 行或前 25KB(以先达到者为准),主题文件则在需要时才用文件工具读取。这是 渐进式披露 在记忆上的应用:常驻上下文的只有目录,细节按需加载。

这种结构的加载方式如下:

索引加主题文件的记忆结构:MEMORY.md 索引在会话开始时常驻上下文,主题文件只在需要时读取 索引 · 每次会话开始加载 MEMORY.md 只加载前 200 行或前 25KB 主题文件 · 需要时才读取 偏好.md 口径.md 约定.md 上下文窗口 索引(目录) 常驻 被读取的主题文件 只在需要时进入 常驻 模型判断需要时读取
图 2 · 渐进式披露:常驻上下文的只有索引,细节按需加载

每条记忆建议至少包含这些元数据:

# 一条记忆的建议结构(示意)
type: feedback
scope: user:zhang / project:east-sales
content: 预售订单不计入当月销售额,按发货月份计入
source: 2026-08-21 会话中用户的纠正
created: 2026-08-21
updated: 2026-09-10
confidence: 用户明确声明

来源与时间特别重要。Claude Code 在 Claude 写入带 YAML 头信息的记忆文件时,会自动记录一个 modified 时间戳,用来提示这条事实有多新,对人和模型都有用。

怎么取:召回策略

记忆存得再好,取不出来或取错了都没用。三种常见策略:

策略 做法 优点 风险
全量常驻 每次都把全部记忆放进上下文 简单,不会漏 记忆一多就挤占上下文、干扰推理
索引常驻 + 按需读取 常驻简短索引,模型判断需要时再读详情 兼顾覆盖与成本 依赖模型判断何时读取
检索召回 按当前问题语义检索相关记忆 可扩展到大量记忆 可能召回不相关或漏掉关键条目

Claude API 提供的记忆工具(memory tool)走的是“让模型自己管理文件目录”的路线:模型通过查看、创建、替换、插入、删除、重命名等命令操作 /memories 目录,而实际存储由你的应用实现,可以是本地文件、数据库或云存储。它强调的是按需取用:把学到的东西记下来,需要时再读回来,而不是一次性全部装入上下文。

召回时还要注意 作用域:用户 A 的偏好不能出现在用户 B 的会话里;项目甲的约定不能影响项目乙。多用户隔离的做法见 记忆的隐私与可控。

怎么改、怎么忘

记忆一定会出错和过期。设计时要为这些情况留出路径:

冲突:新信息与旧记忆矛盾时,默认以新的、来源更可靠的为准,并更新或删除旧条目,而不是两条并存让模型猜。

纠正:用户说“不对,大客户的门槛上个月改成 800 万了”,Agent 应该找到并修改原记忆,而不是新增一条。Claude 的应用中,用户可以直接告诉 Claude 要记住、修改或忘记什么,更新会在下一次对话中生效。

过期:给不同类型的记忆设定复审或过期策略。偏好类可以长期有效;“Q4 目标”这类项目信息应在季度结束后过期。Claude API 记忆工具的文档也建议定期清理长时间未访问的记忆文件,并限制单个文件的大小。

整理:记忆会碎片化、重复。定期合并同类条目、删除失效条目,保持索引简洁。Claude Code 在 MEMORY.md 接近读取上限时,会提醒 Claude 精简索引、合并或删除过时条目。

防投毒:如果 Agent 会处理不可信内容(网页、邮件、第三方工具输出),一次成功的 Prompt 注入 可能把恶意内容写进记忆,之后每个会话都会把它当作可信信息读取。Claude Managed Agents 的记忆存储文档就专门提醒:只需要读取参考资料的会话,应以只读方式挂载记忆库。

例子:一条记忆的生命周期

以销售分析 Agent 的一条口径记忆为例:

一条“预售订单不计入当月”记忆从写入、召回、纠正、确认到复审的生命周期 8 月 21 日 写入 用户纠正预售口径 写入 feedback 记忆 8 月 28 日 召回 索引命中后读详情 按发货月份统计 9 月 10 日 纠正 口径改为按付款月 更新原条目留说明 9 月 12 日 确认 用户在设置页查看 确认表述无误 12 月 31 日 复审 年度口径复审提醒 这条还有效吗? 时间
图 3 · 一条记忆的一生:写入之后还会被召回、纠正、确认和复审

常见误区

  • “能记的都记下来,总有一天用得上。” 无用记忆会稀释有用记忆,增加召回错误和隐私风险。
  • “用向量检索就解决了记忆问题。” 检索只解决“取”,写入标准、纠错、过期和隔离一个都没解决。
  • “记忆是 Agent 自己的事,用户不需要看到。” 用户看不到的记忆无法被纠正,错误会一直影响后续结果。

设计要点

  • 写入前问两个问题:未来有用吗?能从别处可靠获得吗?
  • 记忆带类型、作用域、来源、时间,必要时带置信度。
  • 常驻上下文的只放索引或摘要,细节按需读取。
  • 冲突以新的、可靠来源为准,更新而非追加。
  • 为项目类、时效类记忆设置过期或复审机制。
  • 处理不可信内容的 Agent,对记忆写入设置审核或限制写权限。

练习

为「销售分析 Agent」设计长期记忆方案,用时约 50 分钟:

  1. 列出 10 条候选记忆,逐条用“未来有用吗?能从别处获得吗?”筛选,保留下来的标明类型与作用域。
  2. 选择一种召回策略,说明理由。
  3. 写出三条规则:遇到冲突怎么办、用户纠正怎么办、多久复审一次。
  4. 找出一条“看起来应该记,但其实应该实时查询”的信息,说明原因。

延伸阅读

下一步

记忆越有用,越涉及隐私。下一课「记忆的隐私与可控」讨论如何让用户看得见、改得了、删得掉,以及多用户之间如何隔离。

试试:上下文、MCP、沙箱、Prompt 注入、外链