Memory、任务状态与 Checkpoint:Agent 应该记住什么

# Memory、任务状态与 Checkpoint:Agent 应该记住什么

本篇目标

区分消息历史、工作记忆、长期记忆、任务状态和 checkpoint,设计可纠错、可过期、可恢复的记忆系统。

区分五类信息设计读写策略支持暂停恢复保护用户隐私

# 先记住一句话

Memory 保存未来可能复用的信息,任务状态保存当前工作进度,Checkpoint 保存可恢复的执行快照;三者目的不同,不能用一段无限增长的聊天记录代替。

# 五类信息不要混在一起

类型 示例 生命周期
消息历史 用户与助手原始消息 当前 thread,按需裁剪
工作记忆 本轮目标、临时结论、未完成步骤 当前任务结束前
长期记忆 用户确认的技术方向、稳定偏好 跨会话,可更新和删除
任务状态 phase、facts、artifacts、pendingApproval 从任务创建到归档
Checkpoint 某一步执行后的完整可恢复快照 按恢复和审计策略保留

# 记忆不是 “把所有对话向量化”

这里的向量化,是指用 Embedding 模型把文本转换成可计算相似度的数字向量。它适合从大量记录中找出语义相关的候选内容,但不能判断一条信息是否真实、是否值得长期保存,也不能代替原文和结构化任务状态。

好的写入策略要回答四个问题:

  1. 这条信息以后真的有用吗;
  2. 它是事实、偏好还是模型推断;
  3. 是否经过用户确认;
  4. 何时过期、怎样修改和删除。

例如 “我最近关注 AI 全栈和 Web3” 可以作为带时间的用户偏好;模型推断 “用户不喜欢 Python” 则不能未经确认写成长期事实。

# 短期记忆怎样控制长度

可以保留最近消息,对更早内容生成摘要,但关键字段应单独结构化保存。工具输出只保留后续决策需要的摘要和引用,完整原始结果放在外部存储中。

# 长期记忆怎样召回

长期记忆不应每轮全量加载。可以先按用户、作用域和类型过滤,再根据当前问题做语义召回,并把来源、写入时间和置信度交给上下文组装层。

# Checkpoint 与恢复

Checkpoint 通常在工具完成、状态改变、等待审批等边界保存。恢复时必须使用同一 thread 或 task 标识,重新验证权限和过期条件,并确保已完成写操作不会重复执行。

type Checkpoint = {
  taskId: string
  version: number
  status: 'running' | 'requires_action' | 'completed' | 'incomplete'
  state: Record<string, unknown>
  completedActionIds: string[]
  pendingApproval?: { actionId: string; expiresAt: string }
  createdAt: string
}
1
2
3
4
5
6
7
8
9

completedActionIds 可用于恢复时检查幂等;审批信息要有过期时间,不能几天后继续执行一个已经失去上下文的高风险动作。

# 贯穿项目怎样设计

  • threads 保存一次学习或模拟面试会话;
  • task_state 保存当前题目、已追问次数、覆盖知识点和待确认动作;
  • memories 只保存用户确认的目标、掌握程度和复习偏好;
  • checkpoints 在每轮问答和写入学习记录前保存;
  • 用户可查看、修改和删除长期记忆;
  • 记忆召回结果和普通 RAG 文档使用不同标签,避免把偏好当客观知识。

# 高频面试题与回答

回答顺序:先说结论,再解释原因,最后补一个例子或工程边界。不要逐字背诵,记住这条表达主线即可。

1. 30 秒回答:Memory 和 RAG 有什么区别参考答案

可以简单记成:RAG 是查资料,Memory 是记住过去。RAG 从外部知识库找当前问题需要的证据;Memory 保存用户和任务在过去交互中产生、以后仍可能有用的信息。两者都不会自动被模型知道,必须按需取出并放进当前 Context,也不应该每轮全部加载。

2. 哪些状态必须由宿主应用保存?参考答案

凡是任务恢复、验收和安全判断需要的信息,都要由宿主应用结构化保存,例如目标、当前阶段、已验证事实、产物、已执行动作、重试次数、预算和待审批操作。它们不能只写在聊天记录里,否则上下文裁剪或服务重启后,系统就不知道任务真正进行到哪里。

3. 为什么长期记忆必须可修改和删除?参考答案

因为用户偏好会变化,模型总结出来的记忆也可能一开始就是错的。如果错误记忆不能修改,就会持续影响后续回答;如果隐私信息不能删除,也不符合数据生命周期要求。因此用户应该能看到系统记住了什么,并能更正、删除或关闭个性化。

4. Checkpoint 和日志有什么区别?参考答案

日志回答 “刚才发生了什么”,主要用于排查和审计;Checkpoint 回答 “从哪里可以安全继续”,保存恢复执行所需的状态。即使日志很完整,也不代表可以直接重放,因为恢复还要知道状态版本、哪些写操作已生效,以及是否正在等待审批。

5. 怎样避免错误记忆不断影响后续回答?参考答案

首先要区分用户明确说过的事实和模型自己的推断,并记录来源、时间和置信度。重要记忆写入前让用户确认,召回时再按相关性和有效期过滤。最后还要提供更正和删除入口,避免一条错误记忆被每轮重复加载,越用越像真的。

# 接下来学什么

下一篇学习 MCP,重点理解 Host、Client、Server 的分工,以及工具、资源和提示模板怎样以标准方式接入 Agent。

# 参考资料

上次更新时间: 2026年09月10日 00:05:23