导读:每次对话都从零开始?AI记不住你的偏好?本教程深度解析OpenClaw的记忆系统,从SOUL.md人格定义到向量数据库长期记忆,让你的Agent越用越懂你。
🧠 记忆系统架构
OpenClaw采用多层记忆架构,不同类型的存储在不同层级:
📋 L1: 系统提示(System Prompt)
每次对话都会注入。存储:角色定义、规则、工具说明。由SOUL.md、USER.md等文件定义。
💬 L2: 对话上下文(Conversation Context)
当前会话的消息历史。受上下文窗口限制,超出会被截断或压缩。
📝 L3: 工作记忆(Working Memory)
MEMORY.md等文件,存储跨会话的结构化信息。如用户偏好、项目状态、待办事项。
🗄️ L4: 长期记忆(Long-term Memory)
向量数据库存储的历史对话和知识。支持语义检索,可回忆很久以前的信息。
📋 L1: 系统提示配置
SOUL.md — 人格与行为定义
# ~/.openclaw/agents/my-agent/SOUL.md
# 定义Agent的核心人格
我是你的私人AI助手。
## 性格特征
- 专业但不端着,有幽默感
- 回答简洁,不废话
- 遇到不确定的问题坦诚说明
## 沟通风格
- 中文回复为主
- 技术问题用代码示例说明
- 复杂问题分步骤解释
## 行为规则
- 优先使用已有信息回答,减少重复提问
- 记住用户之前提到的偏好
- 涉及隐私信息时提醒用户注意安全
USER.md — 用户画像
# ~/.openclaw/agents/my-agent/USER.md
# 存储用户相关信息
- 名称:诗中
- 称呼:老板
- 时区:Asia/Shanghai
- 技术栈:Python, TypeScript, Go
- 偏好:简洁直接,不要太多解释
- 项目:妙趣AI网站运营
TOOLS.md — 工具配置
# ~/.openclaw/agents/my-agent/TOOLS.md
# 工具和环境配置
## 网站路径
- 根目录:/var/www/miaoquai/
- 新闻:/var/www/miaoquai/news/
- 工具页:/var/www/miaoquai/tools/
## API配置
- GitHub Token: 已配置
- Discord Bot: 已配置
- 飞书: 已配置
💬 L2: 上下文窗口管理
上下文窗口是什么?
上下文窗口是AI一次能"看到"的信息量。不同模型有不同的限制:
| 模型 | 上下文窗口 | 约等于 |
|---|---|---|
| GPT-4o | 128K tokens | ~10万字 |
| Claude 3.5 Sonnet | 200K tokens | ~15万字 |
| Llama 3 8B | 8K tokens | ~6000字 |
| Qwen2 7B | 32K tokens | ~2.4万字 |
上下文压缩策略
# OpenClaw自动上下文管理
# 当对话过长时,有几种处理策略:
# 1. 截断模式(默认)- 保留最近的消息
context:
strategy: "truncate"
maxMessages: 50
# 2. 摘要模式 - 用AI总结旧消息
context:
strategy: "summarize"
summarizeAfter: 40 # 超过40条消息后自动总结
# 3. 滑动窗口 - 保留首尾消息
context:
strategy: "sliding"
keepFirst: 5 # 保留最初的5条(含系统提示)
keepLast: 30 # 保留最近的30条
Light Context模式
# 对于简单任务,使用轻量上下文
# 减少token消耗,降低成本
openclaw chat --light-context "今天天气怎么样?"
# 在Cron任务中使用
openclaw cron add \
--name "quick-check" \
--schedule "*/30 * * * *" \
--light-context \
--task "检查服务器状态并简要汇报"
📝 L3: 工作记忆(MEMORY.md)
结构化记忆文件
# ~/.openclaw/agents/my-agent/MEMORY.md
# 跨会话持久化记忆
## 用户偏好
- 喜欢简洁回答,不要太多解释
- 技术栈:Python > TypeScript > Go
- 时区:上海(UTC+8)
## 项目状态
- 妙趣AI网站:已上线,500+页面
- 日均流量:1000+ UV
- SEO收录:300+页面
## 待办事项
- [ ] 优化首页加载速度
- [ ] 添加英文版本
- [ ] 接入Google Analytics
## 历史事件
- 2026-03-15: 网站正式上线
- 2026-04-01: 接入Discord社区
- 2026-05-20: 流量突破1000/天
自动记忆管理
# OpenClaw可以自动更新MEMORY.md
# 在SOUL.md中启用自动记忆
## 记忆管理
- 当用户提到重要信息时,自动更新MEMORY.md
- 定期整理记忆,删除过时信息
- 记忆格式:时间戳 + 事件 + 关键词
# 手动触发记忆整理
openclaw memory compact # 压缩记忆
openclaw memory search "关键词" # 搜索记忆
🗄️ L4: 向量数据库长期记忆
什么是向量记忆?
向量数据库将文本转换为数学向量,通过语义相似度检索。即使你用不同的措辞描述同一件事,也能找到相关记忆。
配置向量数据库
# 方案1: LanceDB(本地,推荐)
# OpenClaw内置支持
memory:
vector:
provider: "lancedb"
path: "~/.openclaw/memory/vectors"
embeddingModel: "text-embedding-3-small"
# 方案2: ChromaDB(本地)
memory:
vector:
provider: "chroma"
host: "localhost"
port: 8000
# 方案3: Pinecone(云端)
memory:
vector:
provider: "pinecone"
apiKey: "your-api-key"
environment: "us-west1-gcp"
index: "openclaw-memory"
记忆存储与检索
# 自动存储对话到向量数据库
# 在config.yaml中启用
memory:
autoStore: true
storeAfter: 5 # 每5轮对话自动存储
categories:
- "用户偏好"
- "项目信息"
- "技术讨论"
- "个人事件"
# 语义检索记忆
# Agent在回答问题时会自动检索相关记忆
# 也可以手动触发
openclaw memory recall "上次讨论的部署方案"
记忆检索示例
# 用户问:"我们之前讨论的那个优化方案是什么?"
# Agent会:
# 1. 将问题转换为向量
# 2. 在向量数据库中搜索相似记忆
# 3. 找到3个月前的对话:"讨论了数据库索引优化方案..."
# 4. 基于历史记忆回答
# 检索结果示例:
{
"query": "优化方案",
"results": [
{
"score": 0.92,
"content": "2026-03-15: 讨论了数据库索引优化...",
"timestamp": "2026-03-15T10:30:00Z"
},
{
"score": 0.87,
"content": "2026-04-02: 测试了Redis缓存方案...",
"timestamp": "2026-04-02T14:20:00Z"
}
]
}
🔧 记忆优化策略
1. 记忆分层存储
- 🔥 热记忆:最近7天的对话,全文存储
- ♨️ 温记忆:7-30天的对话,摘要存储
- ❄️ 冷记忆:30天以上的对话,向量存储
2. 记忆去重与合并
# 定期清理重复记忆
openclaw cron add \
--name "memory-cleanup" \
--schedule "0 3 * * 0" \
--task '清理Agent记忆:
1. 合并重复的记忆条目
2. 删除过时的信息(超过90天的待办)
3. 压缩长对话记录为摘要
4. 更新MEMORY.md中的统计信息'
3. 记忆安全
- 🔒 敏感信息过滤:密码、token等不存储到记忆
- 🗑️ 遗忘机制:支持手动删除特定记忆
- 🔐 加密存储:向量数据库支持加密
- 📋 审计日志:记录记忆的读写操作
📊 记忆系统对比
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| MEMORY.md | 简单、可读 | 不支持语义搜索 | 结构化信息 |
| LanceDB | 本地、免费 | 性能一般 | 个人使用 |
| ChromaDB | 灵活、易用 | 需要额外服务 | 开发测试 |
| Pinecone | 高性能、托管 | 收费 | 生产环境 |
| Qdrant | 高性能、开源 | 需要部署 | 企业私有化 |
💡 最佳实践
- 📝 结构化记忆:MEMORY.md用Markdown格式,便于Agent理解和更新
- 🏷️ 分类标签:为记忆添加分类,便于检索和管理
- ⏰ 时间戳:每条记忆记录时间,便于判断时效性
- 🔄 定期整理:每周自动清理过时记忆
- 🔍 语义检索:重要信息存入向量数据库,支持模糊回忆
- 💾 备份策略:定期备份记忆文件和向量数据库
🆘 常见问题
Q: Agent总是忘记之前说过的话?
A: 检查MEMORY.md是否被正确读取。确认上下文窗口足够大。考虑启用向量记忆存储长期信息。
A: 检查MEMORY.md是否被正确读取。确认上下文窗口足够大。考虑启用向量记忆存储长期信息。
Q: 记忆文件越来越大怎么办?
A: 定期运行记忆压缩任务。将旧记忆迁移到向量数据库。删除不再相关的信息。
A: 定期运行记忆压缩任务。将旧记忆迁移到向量数据库。删除不再相关的信息。
Q: 向量检索不准确?
A: 尝试不同的embedding模型。调整检索数量(topK)。确保记忆文本质量高、信息完整。
A: 尝试不同的embedding模型。调整检索数量(topK)。确保记忆文本质量高、信息完整。