TL;DR: AI Agent 最大的痛点之一是"金鱼记忆"——每次对话都从零开始。本文详细介绍基于 mem0 + OpenSearch/S3 Vectors 构建的 OpenClaw Agent 分层记忆系统,涵盖完整架构设计、四条自动化管道、以及如何实现跨会话记忆保持。
0. 写在前面
如果你的 Agent 经常出现以下情况,这篇文章值得花几分钟看看:
- 刚告诉它的事情,下一个 session 就忘了
- 不同 Agent 之间无法共享知识,各管各的
- 每次重启都要重新解释背景
这些问题不是 Agent 的"智商"问题,而是架构层面的天然缺陷——每次会话都是全新的开始。
我们花了很长时间才想明白:给 Agent 加记忆,不只是"存数据"那么简单。怎么存、存多久、什么时候该忘、如何让多个 Agent 互相学习……每一个问题背后都是一堆坑。
这篇文章不讲大道理,而是把我们的思考过程和设计方案原原本本分享出来。
1. 问题的本质:Session 是无状态的
OpenClaw 每天会重置活动会话(默认凌晨 4:00 本地时间),或者在空闲超时后重置。每个新会话从空的上下文窗口开始。
这是有意为之的设计——
- 保持上下文新鲜,避免 token 膨胀
- 每次对话都是一个全新开始
但它带来了一个根本问题:Agent 需要外部机制来维持连续性。
2. 我们走过的弯路
最早的解决方案很简单:写文件。
MEMORY.md ← 长期记忆(手动维护)
memory/
├── 2025-03-15.md ← 每日笔记
├── 2025-03-16.md
└── ...
每次对话开始时,把这些文件读出来塞进 Context。能用,但问题越积越多:
| 问题 | 真实的痛 |
|---|---|
| 搜不到 | 只能靠关键词匹配。问"上次部署遇到什么问题",搜"部署"可能什么都没有,但换成"上线"就有了 |
| 重复膨胀 | 同一件事说了800遍,文件越来越臃肿 |
| Agent 孤岛 | dev agent 记住的,blog agent 根本不知道 |
| 没有过期 | 三年前的"临时决定"还在文件里 |
| token 浪费 | 整个 MEMORY.md 塞进去,90% 跟当前对话无关 |
我们意识到:这不是加个存储就能解决的问题。
3. 核心设计理念:分层 + 自动化
经过反复思考,我们确定了两个核心原则:
3.1 为什么要分层?
因为不是所有记忆都同样重要。
你告诉 Agent 的是"技术偏好"(长期有效),还是"今天我们要讨论什么"(用完就废)?如果混在一起:
- 全部永久保存 → 垃圾越堆越多
- 全部过期删除 → 重要信息丢失
所以我们设计了分层存储:
| 类型 | 生命周期 | 存储内容 |
|---|---|---|
| 长期记忆 | 永久 | 技术决策、踩坑经验、用户偏好 |
| 短期记忆 | 7 天 | 日常讨论、临时决定、任务进度 |
| 归档 | 自动评估 | 活跃→升级长期,不活跃→遗忘(梦境沉淀) |
3.2 为什么要自动化?
因为靠人工维护记忆是不可持续的。
你不可能每次对话结束都手动整理"这节课的重点";你也不可能记得每天去清理过期的临时记录。
所以我们选择了全自动化:
- 会话自动快照(每5分钟)
- 记忆自动提取(每15分钟增量)
- 过期自动归档(每天)
人唯一需要做的,就是开口说话。
3.3 为什么要用 mem0?
我们最终选择了 mem0,因为它是真正理解"记忆"概念的框架:
| 能力 | 含义 |
|---|---|
| 语义提取 | 从对话中自动提取关键事实,不需要手动结构化 |
| 智能去重 | 说两次同样的事,不会存两条 |
| 冲突处理 | 发现矛盾的内容,会自动判断该替换还是保留 |
mem0 解决的是"怎么记住",而不仅仅是"存在哪里"。
3.4 mem0 负责什么?我们负责什么?
mem0 本身不区分"短期事件"和"长期知识"。我们在这基础上增加了记忆生命周期管理:
| 职能 | 负责方 |
|---|---|
| 语义提取、智能去重、向量检索 | mem0 |


1235

被折叠的 条评论
为什么被折叠?



