每次对话都从零开始,是当前AI Agent最大的体验断裂点。你花了20分钟教会它项目背景,关掉窗口再打开——它什么都不记得了。记忆系统,是Agent从"工具"进化为"助手"的关键基础设施。
三种记忆类型
借鉴认知科学的分类,Agent的记忆可以分为三层:
短期记忆(Short-term Memory):就是上下文窗口。Claude的200K、GPT-4o的128K,本质上都是"一次对话能塞多少内容"。优点是零成本、即时可用;缺点是有硬上限,而且会话结束就蒸发。
工作记忆(Working Memory):当前任务的临时状态。比如Agent在执行多步骤任务时,需要记住"我已经完成了第2步,第3步需要用到第1步的输出"。这通常由Agent框架的状态管理机制承担,LangGraph的State、AutoGen的对话历史都属于这一层。
长期记忆(Long-term Memory):跨会话持久化的知识。用户的偏好、项目的上下文、历史决策记录。这是最难做好的部分,也是各框架竞争的焦点。
长期记忆:向量数据库 vs 文件系统
主流方案分两派:
| 维度 | 向量数据库(Pinecone/Chroma/Weaviate) | 文件系统(Markdown/JSON) |
|---|---|---|
| 检索方式 | 语义相似度搜索 | 关键词/路径/全文搜索 |
| 适合场景 | 海量非结构化知识 | 结构化、可人工编辑的记忆 |
| 可解释性 | 低(向量距离难以直观理解) | 高(打开文件就能看) |
| 维护成本 | 需要额外基础设施 | 几乎为零 |
| 精确度 | 语义匹配可能漂移 | 精确但缺乏模糊匹配 |
实际上,2026年越来越多的项目在走混合路线:结构化的元数据用文件存,大量历史对话和文档用向量库索引。
RAG在Agent中的角色
检索增强生成(RAG)不是新概念,但在Agent场景中有了新的意义。传统RAG是"用户问→检索→生成回答"的单次流程。Agent RAG是多轮的、主动的:Agent在规划阶段就会主动检索相关记忆,在执行过程中根据中间结果再次检索,甚至在反思阶段检索历史错误来避免重蹈覆辙。
关键区别:Agent决定何时检索、检索什么,而不是被动等用户触发。
框架实测对比
Mem0:专用记忆层,自动从对话中提取事实并存储。API设计简洁(add/search/get_all),支持用户级和Agent级记忆隔离。适合需要"记住用户偏好"的产品场景。缺点是额外依赖,且提取的事实有时不够精确。
Zep:专注对话记忆,自动做对话摘要和实体提取。亮点是时间感知——它知道"用户三天前说过想吃川菜",能处理时间衰减。适合长期对话助手场景。
LangChain Memory:提供ConversationBufferMemory、ConversationSummaryMemory等多种策略,灵活但需要自己组装。2026年已经与LangGraph深度整合,通过Checkpointer实现状态持久化。
LlamaIndex:强项在文档索引和检索,做知识库型记忆最成熟。但更像"外部知识系统"而非"个人记忆",适合企业知识管理场景。
我的观点:朴素记忆最实用
用了一圈下来,我发现最朴素的方案反而最好用——一个MEMORY.md文件。
OpenClaw的做法是维护一个Markdown文件作为长期记忆,每次会话开始时读取,重要信息随时写入。没有向量数据库,没有复杂的检索管线,就是纯文本。好处是:
- 完全透明:用户可以直接编辑记忆,删除不想被记住的东西
- 零基础设施:不需要任何额外服务
- 可调试:出了问题打开文件就知道Agent"记住"了什么
当然,这在记忆量大了之后会遇到上下文窗口的限制。但对于个人助手场景,几千行的MEMORY.md配合200K的上下文窗口,已经够用了。
技术上最优雅的方案不一定是最好的方案。够用、可控、可理解,才是记忆系统的第一优先级。