在 AI 助手的进化之路上,“记忆”不是锦上添花,而是灵魂所在。OpenClaw 之所以能从“另一个命令行工具”蜕变为“你的专属副驾驶”,核心秘密就藏在它的三层记忆系统里。本文将深入拆解这套系统,揭示记忆如何让 AI 助手真正“活”起来。
1. 引言:没有记忆的助手,只是高级计算器
想象这样一个场景:
- 你告诉助手:“每天早上 9 点,帮我总结一下昨晚的 GitHub 通知。”
- 第二天早上 9 点,你什么都没收到。
- 你又告诉它一遍……第二天依然没有。
这就是 无状态工具 的困境:它不会记住任何事,每次对话都是一张白纸。
OpenClaw 的设计者深刻意识到,记忆是区分“工具”与“助手”的分水岭。一个真正有用的 AI 助手,必须拥有层次化的记忆系统,能够在不同时间尺度上保留信息,并随着使用逐渐优化自己的行为。
本文将以 OpenClaw 为例,拆解它的 三层记忆架构,并通过代码和配置演示,帮助你理解这套系统如何运作,以及为什么它能改变你与 AI 协作的方式。
2. 记忆之于 AI 助手的底层逻辑
在进入具体技术之前,我们先理解记忆在智能系统中的角色。
关键差异:
- 无记忆系统:每次调用独立,无法从历史中学习,无法形成“使用习惯”。
- 有记忆系统:形成反馈闭环,输出质量随使用次数提升,能够自适应个体差异。
在 OpenClaw 中,记忆被划分为三个层次,分别对应不同的存储时长和抽象程度:
层次 | 名称 | 存储位置 | 生命周期 | 典型内容 |
L1 | 瞬时记忆 | 进程内存 | 单次命令 | 参数、管道数据、临时变量 |
L2 | 短期记忆 | history/ 目录 | 数天至数周 | 命令历史、最近输出、执行时间 |
L3 | 长期记忆 | config/ + 技能私有目录 | 永久(直到主动修改) | 用户偏好、技能配置、工作流模板 |
3. 第一层:瞬时记忆 —— 让每次调用精准无误
3.1 定义与作用
瞬时记忆是 OpenClaw 最基础的一层,对应单次命令执行过程中的全部上下文。它的设计目标是 隔离性 和 确定性。
比喻:这就像人脑的工作记忆——你在计算 17×23 时,中间结果暂时存放在脑子里,算完就忘了。
3.2 技术实现
OpenClaw CLI 在接收到命令时,会构建一个临时的执行上下文:
# 示例命令echo '{"text": "hello"}' | openclaw run translator --target zh --verbose瞬时记忆包含:
- 输入数据:通过 stdin 传入的 JSON 或文本。
- 参数:--target zh、--verbose 等标志。
- 环境变量:当前 shell 继承的环境。
- 技能元数据:从 skill.yaml 解析的输入 schema、默认值等。
3.3 关键机制:隔离沙箱
为了保证不同技能之间不会相互污染,OpenClaw 为每次执行创建一个隔离的子进程:
# 简化的实现逻辑def run_skill(skill_name, inputs): # 构建子进程环境 env = os.environ.copy() env.update({ "OPENCLAW_SKILL": skill_name, "OPENCLAW_INPUT": json.dumps(inputs) }) # 执行技能,隔离在子进程中 result = subprocess.run( [skill_entry_point], input=json.dumps(inputs), capture_output=True, text=True, env=env ) return result.stdout知识点:这种设计使得每个技能都可以假设自己在一个“干净”的环境中启动,不必担心全局状态污染。同时,stdout 是唯一的输出通道,保证了组合性(可以管道给下一个命令)。
4. 第二层:短期记忆 —— 让助手学会“回顾”
4.1 定义与作用
短期记忆存储了近期执行的历史,使得 OpenClaw 能够支持 回溯、重做 和 上下文感知 的高级功能。
比喻:这就像你在 IDE 中的“最近文件”列表——它不会记住所有历史,但足以让你快速回到半小时前的工作状态。
4.2 存储结构
短期记忆通常以 SQLite 数据库 或 JSON Lines 文件 的形式存储在 ~/.openclaw/history/ 中:
// ~/.openclaw/history/2025-03-27.jsonl{"timestamp": "2025-03-27T09:15:23Z", "skill": "news-digest", "input": {"topics": "ai"}, "output_preview": "OpenAI releases GPT-5...", "duration_ms": 1245}{"timestamp": "2025-03-27T10:02:47Z", "skill": "code-review", "input": {"path": "./src"}, "output_preview": "Found 3 issues...", "duration_ms": 8562}4.3 支持的交互功能
有了短期记忆,用户可以执行以下操作:
# 重复最近一次执行的技能openclaw repeat# 重复某个历史技能(通过 ID)openclaw repeat --id 42# 查看历史记录openclaw history --limit 10# 对历史输出进行二次处理openclaw history --last | openclaw run summarizer4.4 短期记忆的“遗忘”机制
为了防止历史无限膨胀,OpenClaw 支持配置保留策略:
# ~/.openclaw/config.yamlhistory: max_entries: 1000 # 最多保留 1000 条 retention_days: 30 # 超过 30 天的自动删除 exclude_skills: # 不记录某些技能的详细输出 - stock-quote知识点:合理的遗忘机制是短期记忆的关键——保留太多会降低检索效率,保留太少则失去价值。OpenClaw 采用 时间 + 数量双阈值 的淘汰策略。
5. 第三层:长期记忆 —— 让助手“认识”你
5.1 定义与作用
长期记忆是 OpenClaw 最核心的差异化能力。它让技能能够“记住”你的偏好、习惯和工作模式,实现真正的个性化。
比喻:这就像一位私人助理——刚开始你需要交代每个细节(“我喜欢喝美式,不加糖”);一段时间后,助理已经知道了,甚至在你开口前就准备好了。
5.2 存储层次
长期记忆分布在多个位置,形成层次化结构:
5.2.1 全局配置
存储用户级别的通用设置:
# ~/.openclaw/config.yamldefault_output_format: markdowndefault_timezone: Asia/Shanghaipreferred_language: zh-CNllm: model: claude-3.5-sonnet temperature: 0.75.2.2 技能私有配置
每个技能可以有自己的配置,继承全局配置并可以覆盖:
# ~/.openclaw/skills/email-summary/config.yaml# 继承全局的 preferred_languageimap_server: imap.gmail.comsummary_style: bullet_points # 覆盖技能默认值auto_mark_read: true5.2.3 用户数据区
技能可以在这里存储持久化数据,如邮件索引、搜索结果缓存等:
~/.openclaw/data/email-summary/├── index.db # 邮件的本地索引├── learned_labels.json # 用户手动分类的学习数据└── cache/ # 邮件内容的缓存5.3 长期记忆的“学习”机制
OpenClaw 并不强制要求技能实现学习功能,但最佳实践建议技能通过以下方式从长期记忆中获益:
示例:一个会“学习”的邮件分类技能
# 简化的学习机制import jsonimport osclass EmailClassifier: def __init__(self): self.data_path = os.path.expanduser("~/.openclaw/data/email-classifier/") self.rules = self.load_rules() def load_rules(self): rules_file = os.path.join(self.data_path, "learned_rules.json") if os.path.exists(rules_file): with open(rules_file) as f: return json.load(f) return {} def classify(self, email): # 先用规则匹配 for sender, category in self.rules.items(): if sender in email['from']: return category # 默认分类逻辑 return self.default_classify(email) def feedback(self, email, correct_category): # 用户反馈时,更新规则记忆 self.rules[email['from']] = correct_category with open(self.data_path + "learned_rules.json", 'w') as f: json.dump(self.rules, f)关键点:技能通过读写 ~/.openclaw/data/ 目录,将用户的反馈转化为持久化的偏好,实现“越用越聪明”。
5.4 记忆的优先级与覆盖
OpenClaw 遵循 具体覆盖通用 的原则:
这使得用户可以在保持全局偏好的同时,为特定技能或单次执行提供临时覆盖。
6. 三层记忆的协同:一个完整的执行流程
让我们通过一个实际例子,看看三层记忆如何协同工作:
openclaw run email-summary --date yesterday关键洞察:
- L1 保证了本次执行的参数不会污染其他调用。
- L2 支持了未来的 repeat 和缓存命中。
- L3 让技能知道了你的邮箱服务器、摘要偏好以及哪些发件人应该归入哪个类别。
7. 对比:三层记忆 vs. 传统单层存储
维度 | 传统单层存储 | OpenClaw 三层记忆 |
设计目标 | 简单持久化 | 分层隔离,各司其职 |
性能 | 每次读写都涉及磁盘 I/O | L1 纯内存,L2/L3 按需访问 |
安全性 | 全局存储,易互相干扰 | 技能间数据隔离 |
可遗忘性 | 难以实现部分遗忘 | 每层有独立的淘汰策略 |
可扩展性
| 数据格式不统一 | 标准化的配置层 + 自由数据区 |
8. 总结:记忆体系是 OpenClaw 的灵魂
回到最初的问题:为什么记忆很重要?
因为没有记忆的助手只是一台高级计算器——它能执行你给出的指令,但不会变得更好、不会适应你、不会记住你的习惯。
OpenClaw 的三层记忆系统,通过:
- L1 瞬时记忆:保证了调用的精确与隔离
- L2 短期记忆:支持了回溯、重复与上下文感知
- L3 长期记忆:实现了个性化、学习能力和工作流沉淀
将 AI 助手从“用完即走”的工具,升级为 越用越懂你的伙伴。
作为开发者,理解这套记忆体系不仅能让你更高效地使用 OpenClaw,还能为你设计自己的 AI 应用提供宝贵的架构参考。下次当你安装一个新的技能时,不妨想一想:它如何利用这三层记忆?你的偏好被它记住了吗?
养好一只龙虾,本质上就是在喂养它的记忆。而记忆,就是助手进化的唯一燃料。
延伸阅读:
- OpenClaw 官方文档中的“配置与存储”章节
- 《设计持久化 AI 助手》—— 记忆系统的模式语言
- 技能开发指南:如何在自己的技能中利用三层记忆
(本文所有示例基于 OpenClaw 0.9+,具体实现细节请参考官方仓库。)
