I. 核心架构 - 5. Memory 系统
📍 课程位置
阶段 :I. 核心架构
课序 :第 5 课
前置知识 :I-4. Session 管理
后续课程:I-6. Compaction
🎯 本课核心问题
如果你问我:"Agent 怎么知道'上次用户说很喜欢蓝色的衣服'?Session 之外还有记忆吗?"
我会这样回答 :这就是 Memory(记忆)系统 ------它给 Agent 提供了跨会话的长期记忆能力。
📚 Memory vs Session
Session 的记忆(短期)
- 存在 Session 文件中
- 随着 Session 结束或重置而消失
- 通常只保留本次对话的内容
Memory 的记忆(长期)
- 独立于 Session
- 永久保存(除非删除)
- 可以跨多个会话访问
类比:
- Session = 短期记忆(今天开会讨论了什么)
- Memory = 长期记忆(用户的基本信息、偏好)
🔍 Memory 的核心机制
1. 向量搜索(Vector Search)
是什么:用数学方法找"相关内容"
类比:
- 你记得"用户说喜欢蓝色"
- 但不记得具体哪句话
- 向量搜索能帮你找到"相关的"内容
工作原理:
1. 把文字转换成"向量"(一串数字)
2. 相似的内容 → 相似的向量
3. 搜索时,找"最接近"的向量
2. 混合搜索(Hybrid Search)
是什么:结合两种搜索方式
两种搜索:
- 向量搜索:语义相似("狗"能找到"宠物")
- 关键词搜索:精确匹配("蓝色"只找到"蓝色")
为什么需要混合:
- 向量搜索可能"太模糊"
- 关键词搜索可能"太死板"
- 混合起来最准确
3. MMR(Maximal Marginal Relevance)
是什么:保证结果"多样性"的算法
问题:
- 如果搜"苹果",可能全是"水果苹果"
- 但用户可能想问"苹果手机"
MMR 的作用:
- 在相关的结果中,选择多样化的
- 避免重复,选择有代表性的
4. 时间衰减(Temporal Decay)
是什么:越新的记忆越"重要"
类比:
- 你记得上周的会议
- 但不记得上个月的会议
- 越近的记忆越清晰
作用:
- 搜索时,优先返回新内容
- 旧内容不会完全消失,但权重降低
🔧 实战:配置 Memory
查看当前 Memory 配置
bash
# 查看配置
openclaw config get agents.defaults.memory
# 查看 Memory 文件
ls -la ~/.openclaw/memory/
配置示例
json5
{
"agents": {
"defaults": {
"memory": {
// 启用 Memory
"enabled": true,
// 向量搜索
"vector": {
"enabled": true,
"provider": "openai", // openai | anthropic
"model": "text-embedding-3-small"
},
// 关键词搜索
"bm25": {
"enabled": true
},
// 搜索策略
"search": {
"mode": "hybrid", // hybrid | vector | bm25
"limit": 5, // 返回多少条
"mmr": true // 是否启用多样性
},
// 时间衰减
"temporal": {
"enabled": true,
"decayRate": 0.99 // 衰减率
}
}
}
}
}
手动添加记忆
bash
# 添加一条记忆
openclaw memory add "用户喜欢蓝色,最尺寸 M"
# 搜索记忆
openclaw memory search "用户偏好"
📁 Memory 文件结构
文件位置
~/.openclaw/memory/
├── index.json # 向量索引
├── memory.jsonl # 记忆内容
└── metadata.json # 元信息
记忆格式
json
{
"id": "mem_xxx",
"content": "用户喜欢蓝色",
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z",
"tags": ["preference", "color"],
"source": "session_xxx"
}
⚠️ 常见陷阱
| 陷阱 | 表现 | 原因 | 解决 |
|---|---|---|---|
| 搜索不到 | "找不到之前说的" | 记忆没被正确索引 | 检查 Memory 是否启用 |
| 结果太杂 | 返回不相关内容 | MMR 没启用 | 启用 MMR |
| 太旧 | 总是返回旧信息 | 时间衰减配置不当 | 调整衰减率 |
| 隐私泄露 | 用户的隐私被其他用户搜到 | Memory 没隔离 | 配置 Memory 隔离 |
📝 学习心得
我学这一课时的体会
我以前以为"记忆"很简单,就是"保存内容"。
学完后才知道:
- 向量搜索是"语义理解"的基础
- 混合搜索比单一搜索更准确
- 时间衰减让记忆更"智能"
最大的收获是:Memory 和 Session 是互补的:
- Session = 本次对话
- Memory = 跨会话的长期记忆
与其他课程的关联
- 前置课程:Session 管理 - Session 是短期记忆
- 后续课程:Compaction - 压缩技术
- 配合课程:Multi-Agent - 多 Agent 的记忆隔离
✅ 你现在应该理解的
- 解释 Memory 和 Session 的区别
- 说出向量搜索的原理
- 解释混合搜索和 MMR
- 知道时间衰减的作用
- 能配置基本的 Memory 参数
📚 快速参考表
| 概念 | 简单说 |
|---|---|
| Memory | 跨会话的长期记忆 |
| 向量搜索 | 用语义相似度找内容 |
| 混合搜索 | 向量+关键词组合搜索 |
| MMR | 保证结果多样性 |
| 时间衰减 | 越新的记忆权重越高 |
🔗 相关资源
官方文档:
- Memory:https://docs.openclaw.ai/concepts/memory
- 配置:https://docs.openclaw.ai/gateway/configuration-reference
相关课程:
- 上一课:I-4. Session 管理
- 下一课:I-6. Compaction
📊 本课总结
最关键的 3 点:
-
Memory = 长期记忆
- 跨会话保存
- 独立于 Session
-
搜索技术
- 向量搜索(语义)
- 混合搜索(更准)
- MMR(多样化)
-
时间衰减
- 新内容权重高
- 旧内容不会被删除
现在你应该理解了 Agent 的"长期记忆"机制。下一课会讲如何"压缩"这些记忆来节省空间(Compaction)。