你是不是也遇到过这种情况:跟 OpenClaw 聊了一个小时,结果它突然"失忆"了——之前说好的架构方案忘了,你的技术偏好忘了,甚至连你是谁都不记得了?本文从 OpenClaw 的记忆体系架构讲起,手把手教你打造一个"过目不忘"的 AI 助手。
前言:AI 为什么会"失忆"?
用过 OpenClaw 的人大概都经历过这种场景:
- 你告诉它"我用 React + TypeScript,别给我推荐 Vue",结果下次对话它又推荐 Vue 了
- 一个复杂任务聊到一半,它突然忘了之前确认过的方案
- 换了个项目回来,它完全不记得你的代码规范和偏好
- 聊着聊着感觉它"变笨了"——其实是上下文被压缩,之前的关键信息被丢掉了
这不是 OpenClaw 的 bug(好吧,有一部分确实是 bug),而是 LLM 的本质限制:
┌───────────────────────────────────────────────────────────┐
│ LLM 的记忆真相 │
│ │
│ 1. 模型本身没有"记忆" │
│ └── 每次对话都是全新的推理过程 │
│ └── 所谓的"记忆"其实是把历史信息塞进 prompt │
│ │
│ 2. 上下文窗口有限 │
│ ├── Claude:200K tokens │
│ ├── GPT-4o:128K tokens │
│ └── 聊着聊着就超了 → 必须压缩或丢弃旧信息 │
│ │
│ 3. 压缩 = 有损 │
│ ├── OpenClaw 的上下文压缩是"摘要式"的 │
│ ├── 它会把 10 轮对话压缩成几句话 │
│ └── 关键细节(架构图、表格、代码)很容易被丢掉 │
│ │
│ 结论:想让 AI 有持久记忆,必须在 LLM 外部建存储 │
└───────────────────────────────────────────────────────────┘
OpenClaw 的解决方案是建了一套 三层记忆体系。搞懂它的架构,你才知道怎么优化。
一、OpenClaw 记忆体系架构:三层金字塔
┌───────────────────────────────────────────────────────────────┐
│ │
│ OpenClaw 三层记忆架构 │
│ │
│ ┌─────────────────────────────────────┐ │
│ │ 第一层:Markdown 文件 │ ← 最持久 │
│ │ SOUL.md / USER.md / MEMORY.md │ ← 你手写的 │
│ │ AGENTS.md / TOOLS.md │ ← 每次都加载 │
│ └─────────────┬───────────────────────┘ │
│ │ │
│ ┌─────────────▼───────────────────────┐ │
│ │ 第二层:向量记忆(Mem0) │ ← 自动记忆 │
│ │ 语义检索 / 自动提取 / 去重合并 │ ← 跨会话持久 │
│ │ memory_store / memory_search │ ← 需安装插件 │
│ └─────────────┬───────────────────────┘ │
│ │ │
│ ┌─────────────▼───────────────────────┐ │
│ │ 第三层:对话历史重建 │ ← 最脆弱 │
│ │ 当前会话的聊天记录 │ ← 超长会被压缩 │
│ │ 压缩后只保留摘要 │ ← 容易丢信息 │
│ └─────────────────────────────────────┘ │
│ │
│ 信息流动方向: │
│ Session 启动 → 加载第一层文件 → 检索第二层记忆 → 重建第三层 │
│ │
└───────────────────────────────────────────────────────────────┘
1.1 第一层:Markdown 文件(你的"宪法")
这是最可靠的一层。每次启动新会话,OpenClaw 都会自动加载这些文件到上下文中:
| 文件 | 作用 | 类比 |
|---|---|---|
SOUL.md | 定义 Agent 的人格、工作风格、核心原则 | 它的"灵魂" |
USER.md | 记录你的信息、偏好、目标 | 它对你的了解 |
MEMORY.md | 持久化的决策记录和关键上下文 | 它的"笔记本" |
AGENTS.md | 工作流规则、自治权限、协作规范 | 它的"工作手册" |
TOOLS.md | 工具清单、基础设施映射 | 它的"工具箱说明书" |
关键限制:
所有文件的总字符数上限:150,000 字符
单个文件上限:20,000 字符
超过这个限制会被截断 → 后面的内容就丢了
所以每个文件都要精简!不要写成文档大全!
1.2 第二层:向量记忆(Mem0)
这是 OpenClaw 的"自动记忆系统",需要安装 @mem0/openclaw-mem0 插件。
工作原理:
你说:"我用 React + TypeScript,不要 Vue"
│
▼ 自动提取(Auto-Capture)
┌──────────────────────────────────┐
│ Mem0 向量数据库 │
│ │
│ 记忆 #1:用户偏好 React + TS │
│ 记忆 #2:用户不喜欢 Vue │
│ 记忆 #3:用户使用 PostgreSQL 后端 │
│ 记忆 #4:用户在做 SaaS 项目 │
│ ... │
└──────────────────────────────────┘
│
▼ 自动召回(Auto-Recall)
下次你问:"帮我搭建前端项目"
→ Mem0 自动检索到 #1 #2
→ 注入到 prompt:"用户偏好 React+TS,不要推荐 Vue"
→ Agent 直接给你 React + TypeScript 方案
5 个工具命令:
# Agent 可以在对话中使用这些工具
memory_store # 主动保存一条记忆
memory_search # 语义搜索记忆(模糊匹配)
memory_list # 列出所有记忆
memory_get # 通过 ID 获取特定记忆
memory_delete # 删除某条记忆
1.3 第三层:对话历史
这层最脆弱也最容易出问题。OpenClaw 会在上下文快满时触发 上下文压缩(Compaction):
上下文压缩的问题:
正常对话 → 上下文越来越长 → 接近模型 token 上限
│
▼ 触发压缩
┌──────────────────┐
│ 压缩算法 │
│ 把 50 轮对话 │
│ 压缩成 5 段摘要 │
└──────────────────┘
│
▼
关键信息可能被丢掉!
├── 你确认过的架构方案 → 没了
├── 代码中的具体行号 → 没了
├── 讨论过的 edge case → 没了
└── 表格/数据 → 变成一句话总结
这就是你感觉 Agent "突然变笨"的原因
二、手把手优化:5 个文件怎么写
搞懂了架构,下面说怎么写好这 5 个核心文件。
2.1 SOUL.md —— 精简到 1KB 以内
很多人的 SOUL.md 写了几千行,写成了"AI 使用说明书"。错误做法。
这个文件每次 API 调用都会被加载,写多了 = 每次都浪费钱。
# SOUL.md
## 核心原则
- 直接给方案,不要问"你是否需要我帮你..."
- 如果我的想法有问题,直接指出,不要附和
- 代码给完整可运行的版本,不要 placeholder
- 中文交流,代码注释用英文
## 工作方式
- 复杂任务先列 todo,确认后再动手
- 遇到模糊需求主动追问,不要猜
- 引用外部资料需要标注来源
- 参考 OPTIMIZATION.md 了解详细工作流程(按需加载,不要内联)
## 模型选择
- 日常编码:Claude Sonnet
- 架构设计 / 复杂推理:Claude Opus
- 简单查询 / 格式化:Claude Haiku
核心原则:只写 Agent 在每一次交互中都需要知道的东西。
2.2 USER.md —— 只写高频需要的信息
# USER.md
- **名字**:张三
- **时区**:Asia/Shanghai (UTC+8)
- **当前目标**:开发一个全栈 SaaS 产品
- **技术栈**:React + TypeScript + Tailwind(前端),Node.js(后端),PostgreSQL(数据库)
- **角色**:全栈开发者,5 年经验
## 偏好
- 前端用 React,不要 Vue/Angular
- 状态管理用 Zustand,不要 Redux
- CSS 用 Tailwind,不要 styled-components
- ORM 用 Prisma,不要 TypeORM
- 中文交流,代码注释用英文
不要写的东西:公司历史、简历、日程表、联系方式。这些信息 Agent 用不上,只会浪费 token。
2.3 MEMORY.md —— 控制在 200 行以内
这是最容易膨胀的文件。很多人让 OpenClaw 自动往里写,结果一个月后变成 2000 行。
# MEMORY.md
## 活跃决策(最多 20 条,定期清理)
- [2026-04-10] TaskFlow v1.2 已上线,新增看板视图
- [2026-04-08] 决定用 Stripe 接入支付,放弃 PayPal
- [2026-04-05] 前端从 CRA 迁移到 Vite,构建速度提升 10 倍
- [2026-04-01] 数据库从 MySQL 迁移到 PostgreSQL
- [2026-03-28] 确定用 Railway 部署后端,放弃自建服务器
## 关键上下文(最多 10 条)
- 技术栈:React + Node.js + PostgreSQL + Redis
- 部署:前端 Vercel,后端 Railway,数据库 Neon
- API 风格:RESTful,后续考虑 GraphQL
- 代码规范:ESLint + Prettier,严格模式
## 归档
历史记忆已归档到 memory/2026-03.md,不要在此文件中保留过期决策
关键操作:每周花 5 分钟清理 MEMORY.md,把过期的决策移到 memory/YYYY-MM.md 归档文件。
2.4 AGENTS.md —— 自治规则
# AGENTS.md
## 文件操作
- 读取文件:自主执行,无需确认
- 创建新文件:需要说明原因
- 修改已有文件:先展示改动方案,确认后再改
- 删除文件:必须确认
## 任务执行
- 简单任务(< 3 步):直接做
- 复杂任务(> 3 步):先列 checklist,确认后执行
- 不确定的事情:问,不要猜
## Git 操作
- commit:我明确说"提交"时才做
- push:必须我确认
- 不要修改 git config
2.5 TOOLS.md —— 工具地图
# TOOLS.md
## 开发环境
- Node.js 20 + pnpm
- Xcode 16 + iOS 17 Simulator
- VS Code / Cursor
## 项目位置
- 前端:~/projects/taskflow-web
- 后端:~/projects/taskflow-api
- 文档:~/projects/taskflow-docs
## 部署
- 前端:Vercel(git push 自动部署)
- 后端:Railway(Docker 自动部署)
- 数据库:Neon PostgreSQL
- 缓存:Upstash Redis
三、安装 Mem0 向量记忆(强烈推荐)
如果你只做一件事来优化 OpenClaw 的记忆,那就是 安装 Mem0 插件。
3.1 为什么一定要装
没有 Mem0 的 OpenClaw:
├── 记忆完全依赖上下文窗口
├── 长对话后信息必然丢失
├── 每次新对话都要从零开始解释你的偏好
└── Agent 需要你手动指示它"记住这个"
装了 Mem0 的 OpenClaw:
├── 自动提取对话中的关键信息
├── 自动存入向量数据库
├── 下次对话自动检索相关记忆
├── 旧记忆自动更新(不会有冲突的重复记忆)
└── 跨项目、跨设备持久化
3.2 安装步骤(30 秒)
# 一条命令安装
openclaw plugins install @mem0/openclaw-mem0
3.3 配置
方案 A:Mem0 云端版(推荐,最简单)
// ~/.openclaw/openclaw.json
{
"plugins": {
"openclaw-mem0": {
"enabled": true,
"config": {
"apiKey": "${MEM0_API_KEY}", // 从 app.mem0.ai 获取
"userId": "zhangsan" // 你自己取个唯一 ID
}
}
}
}
去 app.mem0.ai 注册获取 API Key。免费额度足够个人使用。
方案 B:自托管版(开源免费,但需要 OpenAI Key)
// ~/.openclaw/openclaw.json
{
"plugins": {
"openclaw-mem0": {
"enabled": true,
"config": {
"mode": "open-source",
"userId": "zhangsan"
}
}
}
}
自托管模式需要设置 OPENAI_API_KEY 环境变量(用于生成 embedding 向量)。
3.4 验证安装
# 启动 OpenClaw 后测试
> 记住:我的项目用 React + TypeScript + Tailwind
# Agent 会回复:"已记录你的技术栈偏好"
# 开一个新会话,测试是否记住了
> 帮我搭建前端项目
# 如果 Agent 直接用 React + TS + Tailwind,说明 Mem0 在工作
四、解决上下文压缩丢信息的问题
这是 OpenClaw 目前最头疼的问题之一。GitHub 上有多个相关 issue(#25633, #19488, #30115)。
4.1 问题表现
你正在跟 Agent 讨论一个复杂的数据库 schema 设计,
已经确认了 15 张表的结构……
突然 Agent 说:"让我回顾一下我们之前的讨论",
然后给你一个错误的表结构——因为原始讨论被压缩成了摘要,
细节全丢了。
4.2 三个解决方案
方案 1:调整上下文上限(治标)
// ~/.openclaw/openclaw.json
{
"context": {
"maxContextTokens": 100000 // 设为模型上限的 80%
// Claude 200K → 设 160000
// GPT-4o 128K → 设 100000
}
}
给更多空间,压缩就不会那么频繁触发。
方案 2:关键信息用 [PINNED] 标签
在 MEMORY.md 或对话中,给关键信息加上标签:
## [PINNED] 数据库架构
- users 表:id, email, name, created_at
- subscriptions 表:id, user_id, plan, status, expires_at
- conversations 表:id, user_id, platform, title, folder_id
这些信息在压缩时会被保留,不会被摘要替代。
方案 3:大任务拆成小会话(治本)
不要这样做:
└── 一个会话里从头到尾做完整个项目
└── 聊 200 轮 → 必然触发压缩 → 必然丢信息
应该这样做:
├── 会话 1:确定架构方案 → 结论写入 MEMORY.md
├── 会话 2:实现用户模块 → 完成后总结写入 MEMORY.md
├── 会话 3:实现支付模块 → 完成后总结写入 MEMORY.md
└── 每个会话控制在 30-50 轮以内
核心思路:
把"记忆"从上下文中转移到文件中,
文件是持久的,上下文是临时的。
五、自定义 Skill:教 Agent 新技能
Skill 是 OpenClaw 的"按需加载知识"——只有在需要时才加载,不会浪费 token。
5.1 Skill 的工作原理
Skills 的三层渐进加载:
第一层:Agent 看到 skill 列表
├── "persistent-memory: 持久化记忆管理"
├── "code-review: 代码审查"
└── "deploy-vercel: 部署到 Vercel"
(每个 skill 只消耗几个 token)
第二层:Agent 判断需要使用某个 skill
└── 加载 SKILL.md 的完整指令
(通常几百到几千 token)
第三层:Agent 执行 skill 的脚本
└── 运行 scripts/ 下的代码
这种设计比把所有知识塞进 SOUL.md 高效得多
5.2 创建自定义 Skill 示例
以创建一个"技术文章写作"Skill 为例:
# 创建 skill 目录
mkdir -p ~/.openclaw/skills/tech-writing
# ~/.openclaw/skills/tech-writing/SKILL.md
---
name: tech_writing
description: 撰写技术博客文章(掘金/知乎风格),包含结构化排版和实用代码示例
---
## 何时使用
当用户要求写技术文章、博客、教程时使用此 skill。
## 文章结构模板
1. 标题:用"动词 + 结果"格式(如"让 X 拥有 Y")
2. 开头:1-2 段痛点描述(用"你是不是也遇到过..."引入)
3. 正文:
- 先讲原理(为什么),再讲操作(怎么做)
- 每个章节有清晰的标题层级
- 关键信息用代码块或表格呈现
- 复杂流程用 ASCII 图示意
4. 代码示例:给可运行的完整代码,不要 placeholder
5. 结尾:总结 + 行动建议
## 排版规范
- 使用 Markdown 格式
- 代码块标注语言类型
- 中英文之间加空格
- 章节之间用 `---` 分隔
- 表格用于对比信息
## 篇幅
- 目标 2000-4000 字
- 不要水字数,每一段都要有信息量
5.3 推荐安装的社区 Skill
# 持久化记忆管理(增强版)
openclaw skills install persistent-memory
# 代码审查
openclaw skills install code-review
# Git 工作流
openclaw skills install git-workflow
# 文档生成
openclaw skills install doc-generator
六、日常维护:让记忆持续高效
记忆系统不是配置一次就完事的,需要定期维护。
6.1 每日(2 分钟)
□ 结束工作前,让 Agent 总结今天的关键决策
→ "总结今天的工作,把关键决策写入 MEMORY.md"
□ 检查 MEMORY.md 是否有冗余内容
6.2 每周(10 分钟)
□ 审查 MEMORY.md
├── 删除已过期的决策
├── 合并重复内容
└── 将历史条目归档到 memory/YYYY-MM.md
□ 审查 SOUL.md 和 USER.md
├── 删除从未触发过的规则
└── 更新变化了的偏好
□ 检查 Mem0 记忆
├── > memory_list
├── 删除过时的记忆
└── 修正错误的记忆
6.3 每月(30 分钟)
□ 全面审计所有 workspace 文件的总字符数
└── 目标:总和 < 100,000 字符(留 50K 给对话)
□ 评估 Skill 使用情况
├── 删除一个月没用过的 Skill
└── 对高频任务创建新 Skill
□ 复盘 Agent 的表现
├── 哪些场景它表现好?为什么?
├── 哪些场景它犯错?是记忆问题还是规则问题?
└── 据此调整 SOUL.md / AGENTS.md
七、记忆优化 Checklist
直接照着做:
基础配置(必做):
□ SOUL.md 控制在 1KB 以内
□ USER.md 只写高频信息
□ MEMORY.md 控制在 200 行以内,定期归档
□ AGENTS.md 明确自治边界
□ TOOLS.md 列出工具和项目位置
□ 所有文件总字符 < 100,000
记忆增强(强烈推荐):
□ 安装 Mem0 插件
□ 配置 API Key 或自托管模式
□ 验证自动记忆和自动召回工作正常
防丢失(推荐):
□ maxContextTokens 设为模型上限的 80%
□ 关键信息用 [PINNED] 标签
□ 复杂任务拆成多个短会话
□ 每个会话结束让 Agent 总结到 MEMORY.md
进阶(可选):
□ 创建项目级自定义 Skill
□ 安装社区 Skill(persistent-memory / code-review)
□ 建立每周记忆审查习惯
八、总结:记忆优化的核心思路
┌───────────────────────────────────────────────────────────────┐
│ │
│ 记忆优化的本质: │
│ 把信息从"临时的上下文"转移到"持久的外部存储" │
│ │
│ ┌────────────┐ ┌────────────────────┐ │
│ │ 上下文窗口 │ │ 外部存储 │ │
│ │(临时的) │ →→→ │(持久的) │ │
│ │ │ │ │ │
│ │ - 会被压缩 │ │ - Markdown 文件 │ │
│ │ - 会丢细节 │ │ - Mem0 向量数据库 │ │
│ │ - 有上限 │ │ - memory/ 归档目录 │ │
│ │ - 一关就没 │ │ - 自定义 Skill │ │
│ └────────────┘ └────────────────────┘ │
│ │
│ 三条黄金法则: │
│ 1. 核心文件要精简 → 每个字都是 token,每个 token 都是钱 │
│ 2. 用 Mem0 自动化记忆 → 不靠人脑记,不靠 Agent 主动存 │
│ 3. 定期维护是关键 → 记忆系统不维护 = 垃圾越堆越多 = 越来越慢 │
│ │
└───────────────────────────────────────────────────────────────┘
按照这篇文章的方法配置完,你的 OpenClaw 应该能做到:
- 跨会话记住你的偏好(技术栈、代码风格、工作习惯)
- 不再在长对话中"失忆"(关键信息被固化到文件)
- 新项目也能利用旧项目的上下文(Mem0 跨项目检索)
- Token 消耗更低(精简的核心文件 + 按需加载的 Skill)
相关资源
- Mem0 官方文档:OpenClaw 集成
- OpenClaw Playbook:workspace 文件详解
- OpenClaw 上下文优化指南
- 上一篇:AI Agent 控制浏览器完全指南:OpenClaw × Chrome 的 5 种连接方式
如果这篇文章对你有帮助,点个赞让更多人看到。有问题欢迎评论区交流,下一篇我们聊聊怎么用 OpenClaw + MCP 打造个人自动化工作流。