你有没有遇到过这种情况?
昨天跟AI聊了一个需求,今天再问,它完全忘了你是谁。
我不是说的那种"车轱辘话来回说"的忘,是真的把你辛辛苦苦解释了几十分钟的背景忘得一干二净。
就很离谱。
今天聊聊OpenClaw的Memory机制,看看它是怎么让AI"记住"一切的。
先说架构
要理解Memory,得先搞清它在整个系统中的位置。
根据官方文档,OpenClaw的核心概念包括这几个部分:
- • Agent Loop: 执行循环
- • Session: 会话管理
- • Memory: 长期记忆
- • Compaction: 会话压缩
- • Context Engine: 上下文引擎
它们的关系是这样的:
用户消息 → Session → Context Engine → Agent Loop → 生成回复 → Memory 存储
↓
CompactionSession是容器,Context Engine管上下文,Memory管长期存储,Compaction负责压缩。
每个模块各司其职,缺一不可。
核心问题:上下文窗口
在讲Memory之前,得先搞清楚一个问题:为什么需要Memory?
答案是:上下文窗口有限。
官方文档是这么说的:
"Every model has a context window (max tokens it can see). Long-running chats accumulate messages and tool results; once the window is tight, OpenClaw compacts older history to stay within limits."
每个模型都有上下文窗口限制。聊久了之后,消息越来越多,token快用完了怎么办?
这就是Compaction要解决的问题。
Compaction:会话压缩机制
官方文档定义:
"Compaction summarizes older conversation into a compact summary entry and keeps recent messages intact."
翻译过来就是:把旧的对话压缩成摘要,保留最近的对话。
举个例子:
你跟AI聊了100轮,大约50000token。压缩后,可能变成:
- • 摘要:2000token(包含关键信息)
- • 最近10轮对话:8000token
总token从50000降到10000,够模型处理了,但关键信息还在。
压缩的具体流程
官方文档提到,Compaction会:
- 1. 提取关键信息:从历史对话中提取事实、决策、代码片段
- 2. 生成摘要:用LLM把长对话压缩成短摘要
- 3. 替换原始内容:用摘要替代原始对话
// 伪代码示例
class Compaction {
async compact(session: Session): Promise<Summary> {
// 1. 提取关键事实
const facts = await this.extractFacts(session.messages);
// 2. 提取决策
const decisions = await this.extractDecisions(session.messages);
// 3. 提取代码
const code = await this.extractCode(session.messages);
// 4. 生成摘要
return {
facts,
decisions,
code,
timestamp: Date.now()
};
}
}自动压缩 vs 手动压缩
官方文档说:
"Auto-compaction (default on)"
默认是自动压缩。当会话接近上下文窗口限制时,OpenClaw会自动触发压缩。
你也可以手动触发:
/compact Focus on decisions and open questions这就是为什么AI能记住一切的原因:不是不忘记,而是忘记之前先压缩保存。
Memory:长期记忆存储
官方文档定义:
"Memory system lets the AI remember important information across sessions."
Memory是长期记忆的存储层。每次对话结束后,关键信息会自动写入MEMORY.md。
Memory 和 Compaction 的关系
官方文档提到:
"Before compaction, OpenClaw can run a silent memory flush turn to store durable notes to disk."
翻译:在压缩之前,OpenClaw会先执行一次静默的内存刷新,把持久化笔记存到磁盘。
这就是Memory和Compaction的配合:
- • Compaction:管理当前会话的上下文窗口
- • Memory:跨会话的长期记忆
Memory 文件位置
~/.openclaw/workspace-media/MEMORY.md本质就是一个Markdown文件,你可以直接编辑。
# 项目配置
- 技术栈: Vue3 + TypeScript
- 部署: Vercel
# 关键决策
- 采用Composition API
- 状态管理用PiniaSession:会话隔离
官方文档说:
"Gateway is the single source of truth for sessions, routing, and channel connections."
每个用户、每个群聊、每个项目,都有独立的Session。Session之间是隔离的。
这意味着:
- • A项目和B项目的对话不会互相影响
- • 切换项目时,AI自动知道当前在哪个项目
Context Engine:上下文引擎
官方文档定义:
"Context Engine is responsible for managing the context window, balancing performance and memory."
Context Engine负责管理上下文窗口,在性能和记忆之间取得平衡。
它做的事情:
- 1. 窗口管理:把历史对话压缩成摘要
- 2. 优先级排序:重要的记住,不重要的扔掉
- 3. 动态调整:根据任务类型调整上下文长度
可配置的压缩模型
官方文档提到一个很实用的配置:
{
"agents": {
"defaults": {
"compaction": {
"model": "openrouter/anthropic/claude-sonnet-4-5"
}
}
}
}你可以通过配置指定用哪个模型来做压缩摘要。
官方文档说:
"This is useful when your primary model is a local or small model and you want compaction summaries produced by a more capable model."
如果你的主模型是个小模型,可以用更强的模型来做摘要,提升质量。
对比:Compaction vs Pruning
官方文档专门区分了这两个概念:
"Compaction: summarizes and persists in JSONL."
"Session pruning: trims old tool results only, in-memory, per request."
| 机制 | 作用 | 持久化 |
|---|---|---|
| Compaction | 压缩会话,生成摘要 | 持久化到JSONL |
| Pruning | 修剪旧的工具结果 | 仅内存,不持久化 |
简单理解:
- • Compaction:长期记忆,持久化
- • Pruning:短期清理,不持久化
实际应用场景
说了这么多原理,来几个实际场景:
场景1:多项目并行
我同时做3个项目,AI自动知道当前在哪个项目、用的什么技术栈。切换时不用重复解释。
场景2:技术栈记忆
告诉AI一次:
这个项目用Vue3 + Pinia + TypeScript之后聊代码规范、组件设计,AI自动按这个背景来。
场景3:代码复用
之前写过的工具函数,后来需要用。直接问AI就能找回来。
配置选项
官方文档提到的几个关键配置:
{
"agents": {
"defaults": {
"compaction": {
"mode": "auto",
"targetTokens": 16000,
"model": "openrouter/anthropic/claude-sonnet-4-5"
}
}
}
}- • mode: 压缩模式(自动/手动)
- • targetTokens: 目标token数
- • model: 用于压缩的模型
局限性
说几个需要注意的点:
- 1. 摘要有损耗
压缩后的摘要不可能100%保留原意。官方文档说: - "Compaction summarization preserves opaque identifiers by default."
一些细节可能会丢失。
- 2. 上下文窗口限制
再怎么压缩,也还是受限于上下文窗口。超长对话一定有信息损失。 - 3. 隐私考虑
Memory文件是明文存储,敏感信息不建议往里放。
总结
OpenClaw的Memory不是简单的"记住",而是一套复杂的信息管理系统:
| 组件 | 作用 |
|---|---|
| Session | 会话隔离 |
| Context Engine | 上下文管理 |
| Compaction | 会话压缩 |
| Memory | 长期存储 |
| Pruning | 临时清理 |
它们配合起来,才实现了在有限上下文内"记住一切"的效果。
官方文档说:
"Memory system lets the AI remember important information across sessions, enabling true 'memory'."
现在你再看到这句话,应该知道它背后是一套多么精妙的设计了。
觉得有用就点个赞、在看、转发吧。想第一时间收到推送,给个星标。谢谢阅读,下次见。
夜雨聆风