Agent记忆系统设计指南

一、背景与目标

Agent 记忆系统用于管理和复用长期上下文,使 Agent 在不同会话和任务之间保持连续性。它不同于聊天历史和知识库,关注的是可长期复用的用户偏好、协作方式、业务约定、历史反馈和任务经验。

核心目标:不是”记住一切”,而是”只记住未来有复用价值、且可治理的内容”。

能力解决的问题
长期偏好用户喜欢什么、不喜欢什么
协作方式用户希望 Agent 如何工作和输出
Skill 经验某个 Skill 下反复强调的规则
历史反馈用户纠正过的 Agent 行为
项目背景长期稳定的项目上下文
决策记录已确认的技术或产品决策

二、记忆、会话历史、知识库的边界

类型存储内容生命周期典型用途
会话历史当前对话消息当前 conversation保持上下文连续
Agent 记忆用户偏好、规则、反馈跨会话长期存在个性化协作
知识库 RAG文档、PRD、资料、制度文档级管理提供事实依据

不要把聊天记录原样写入记忆库。记忆应该是抽取后的事实、偏好和规则。

三、常见记忆范围

Scope说明示例
global用户全局记忆,所有 Agent / Skill 可用用户偏好简洁回答
user_agent用户在某个 agent 下的专属记忆文档评审时优先关注风险、边界条件和数据指标
conversation会话级短期记忆,可选本轮讨论的是某个功能改版方案
agentAgent / Skill 自身通用经验文档评审 Agent 默认输出风险等级和修改建议
app / org应用级或组织级共享记忆团队统一使用某套术语、模板或交付标准

四、常见记忆分类

分类说明是否建议自动写入
preference用户稳定偏好是
work_style用户希望 Agent 如何协作是
skill_instruction某个 Skill 下的稳定规则是
feedback用户对 Agent 的纠正是
project_context长期项目背景仅显式写入
decision已确认的历史决策仅显式写入
domain_glossary团队术语仅显式写入

自动写入要保守:宁可少记,也不要乱记。

五、典型调用流程

  1. 用户发送请求。
  2. 后端识别 user_id、conversation_id、skill_id。
  3. 检查用户是否开启记忆。
  4. 检索相关长期记忆。
  5. 合并、去重、限量。
  6. 注入 system message 的低优先级上下文区。
  7. 调用 LLM / Agent Loop。
  8. 保存 assistant 消息。
  9. 异步判断是否值得写入记忆。
  10. 过滤敏感信息。
  11. 写入记忆库。
  12. 记录事件、耗时、成本和错误。

检索发生在 LLM 调用前;写入发生在 assistant 消息保存后。写入不要阻塞用户看到最终回答。

六、检索设计要点

要点建议
用户隔离所有检索必须带 user_id
agent 隔离Agent 记忆使用 user_id + agent_id / skill_id
检索数量V1 注入 3-8 条即可
超时预算例如 500ms,超时直接跳过
降级语义检索失败不能影响主聊天
去重按 memory id 和 content hash 去重

记忆注入时必须明确:记忆低于系统规则、工具结果和当前用户输入,不能让旧记忆覆盖当前指令。

七、写入设计要点

适合写入的内容:

用户表达示例
长期偏好以后回答都先给结论
协作方式方案先列 3 个方向,再推荐一个
Skill 规则以后评审 PRD 都重点看异常流
纠正反馈不要写营销化文案
显式记住记住,我们项目叫 Crafter

不适合自动写入的内容:

内容原因
一次性任务没有长期复用价值
工具返回原文可能被 prompt injection 污染
上传文件全文成本高、隐私风险大
密钥、token、手机号敏感信息
推理过程 thinking可能包含内部推理或敏感细节

八、幂等与重试

记忆写入必须做业务幂等,不能只依赖记忆库自身去重。

推荐幂等键:

idempotency_key = sha256(userId + conversationId + assistantMessageId + scope + skillIdOrNone)

场景处理方式
同一轮重试不重复调用 memory add
global 无 agent使用固定占位符,如 __none__
user_skill 无 skillId拒绝写入,不降级成 global
running 卡住超时后最多重试一次
写入失败记录 error,不影响聊天

九、服务抽象层

业务代码不要直接依赖 Mem0、Zep 或某个 SDK。建议封装统一服务层。这样未来切换底层 provider 时,聊天主流程、前端 API 和管理后台都不用大改。

方法作用
searchForChat聊天前检索记忆
rememberAfterChat聊天后异步写入记忆
listUserMemories查看用户记忆
deleteMemory删除单条记忆
clearUserMemories清空用户记忆
setUserMemoryEnabled设置用户记忆开关

十、治理能力

能力用户侧管理员侧
关闭记忆需要可查看
清空全部记忆需要需要
清空 Skill 记忆建议需要
查看记忆列表建议需要
删除单条记忆建议需要
查看调用事件不开放需要

只要上线自动写入,就必须提供关闭、删除和清空能力。

十一、可观测性

每次 search、add、delete、clear、settings 都应该记录事件。

字段用途
user_id目标用户
actor_user_id操作者,管理员操作时不同于目标用户
operationsearch / add / delete / clear / settings
statusrunning / success / skipped / error
reasonskipped 原因
latency_ms性能观测
memory_count检索或写入条数
estimated_tokens成本估算
idempotency_key写入幂等
error_message错误排查

没有事件表,后续很难解释”为什么没记住””为什么乱记了””成本为什么变高”。

十二、开发常见坑

问题后果建议
把所有聊天原文写入记忆成本高、污染严重只写稳定信息
不做 user_id 隔离串用户、隐私事故所有检索和写入都带 user_id
bot 使用固定 user_id所有 bot 用户共享记忆身份未对齐前禁用 bot 记忆
不做幂等重试产生重复记忆用 message id 派生 idempotency key
记忆追加到 system 末尾覆盖高优先级规则放在低优先级上下文区
使用 in-memory store 上线重启丢记忆生产必须配置持久化存储
embedding 模型漂移检索结果失真写入和检索使用同一 embedding profile
信任 SDK 返回结构升级后字段变动做 normalize 层
写入阻塞 SSE用户体感变慢assistant 保存后异步写入
无管理后台无法排查和治理至少提供内部排查入口

十三、V1 推荐落地顺序

  1. 定义 AgentMemoryService 抽象。
  2. 增加总开关和用户级 settings。
  3. 接入持久化 vector store。
  4. 实现 searchForChat,限制注入数量和超时。
  5. 实现 rememberAfterChat,做候选判断、敏感过滤和幂等。
  6. 增加事件表和调用日志。
  7. 增加用户关闭、清空 API。
  8. 增加管理员查询、删除、事件页。
  9. 做 Skill 隔离和重启持久化验证。
  10. 灰度上线,人工抽检错记率和成本。

十四、核心原则

一个好的 Agent 记忆系统,不是”记得多”,而是:

  • 记得准。
  • 查得快。
  • 隔离严。
  • 能解释。
  • 能关闭。
  • 能删除。
  • 出错不影响主流程。
  • 未来能切换底层 provider。

记忆能力做对后,Agent 会从”每次重新认识用户”变成”能持续协作的助手”。但如果做错,也最容易变成隐私、污染和成本问题,所以第一版必须保守、可控、可观测。

十五、方案对比

方案定位优点风险/限制适合场景
Mem0专门的 agent 长期记忆 API/SDK上手最快;支持用户、会话、agent 维度;适合快速验证外部依赖;数据合规和记忆写入策略需要额外审计快速做”用户偏好/事实记忆”的 SaaS
Zep / Graphitiagent memory + temporal knowledge graph强在实体、关系、时间线;适合复杂上下文架构复杂度高于 Mem0用户、项目、文档、任务关系复杂的 agent
Letta / MemGPTstateful agent runtime把 memory 当 agent 状态管理;核心记忆 + 归档记忆思想成熟更像 agent 平台,不只是插件长期自主 agent、研究型 agent
LangGraph / LangMem框架级长期记忆语义、情景、程序性记忆分类清晰;适合复杂 agent flow更适合 LangChain/LangGraph 技术栈已经用 LangGraph 构建 agent 的团队
LlamaIndex MemoryRAG/agent 框架内存模块和索引、检索、文档知识结合自然框架绑定明显文档型、知识型 agent
Vercel AI SDK MemoryAI SDK 里的 memory/context 能力和当前项目栈最接近;适合会话历史和上下文注入不是完整长期记忆产品当前项目可作为第一层集成参考
OpenAI Agents SDK Sessions会话持久化简化多轮对话状态更偏 session,不等同长期用户记忆OpenAI Agents SDK 项目
Anthropic Memory ToolClaude 持久记忆工具原生工具化;适合 Claude 生态provider 绑定Anthropic-first agent
AWS Bedrock AgentCore Memory云厂商托管 memory企业合规、托管、AWS 集成云平台绑定;成本和迁移复杂AWS 企业架构
Google ADK MemoryGoogle agent 开发套件 memory与 Google/Vertex 生态融合平台绑定Google Cloud/ADK 项目
CrewAI Memory多 agent 团队记忆简单;适合多 agent 协作 demo深度和可控性一般CrewAI 编排项目

记忆能力分类

  1. 短期记忆:当前会话窗口、最近消息、摘要。你们已经有 messages,但还需要 token-aware summarization。
  2. 长期语义记忆:用户偏好、稳定事实,例如”用户偏好中文简洁回答””常做 PRD 评审”。
  3. 情景记忆:过去任务、决策、项目上下文,例如”上次为 X 项目生成过登录页原型”。
  4. 程序性记忆:用户或团队偏好的工作方式,例如”PRD 评审先看目标用户,再看异常流”。
  5. 关系/图记忆:人、项目、文档、技能、需求之间的关系,Zep/Graphiti 这类方案强在这里。

mem0

https://github.com/mem0ai/mem0

概念开发者要理解什么
Memory LayerMem0 是 agent 的长期记忆层,不是普通聊天记录库,也不替代 RAG 知识库。
Memory Types官方分为 conversation memory、session memory、user memory、organizational memory。
Entity Scope用 user_id、agent_id、run_id、app_id 控制记忆归属和隔离。
user_id = 用户级记忆
agent_id = 技能级记忆
run_id = 会话级记忆
app_id = 应用级记忆
Add Memoryadd 会从对话中抽取值得记住的事实、偏好、反馈;默认 infer=True,不是原样存全文。
Search Memorysearch 用自然语言查询相关记忆,可配 top_k、threshold、rerank、filters。
filters 控制用户/技能/会话隔离
top_k 控制返回数量
threshold 控制相似度门槛
rerank 提升召回精度
metadata 做业务过滤
Metadata用来挂业务字段,例如 skill_id、conversation_id、memory_category、source_message_id。
CategoriesMem0 会自动给记忆打分类;Platform 支持项目级 custom categories。
Update/Delete记忆需要能更新、删除、批量清除,避免错记、过期、隐私问题。
Graph Memory可选能力,用图存人、项目、事件、关系;适合复杂关系上下文,不是第一版必需。
Platform vs OSSPlatform 是托管 API、dashboard、graph/rerank 等能力;OSS 更可控,但运维和存储要自己处理。

开发者需要设计的能力:

  • 记忆开关
  • 查看记忆
  • 删除单条记忆
  • 清空用户记忆
  • 按 skill 清空记忆
  • 敏感信息过滤
  • 记忆来源追踪
  • 写入失败降级
  • 搜索超时降级

待办

  • 监控记忆相关 LLM token 消耗
  • 确认向量数据库维度是否匹配