乐于分享
好东西不私藏

OpenClaw Memory 深度解析:AI是如何记住一切的?

OpenClaw Memory 深度解析:AI是如何记住一切的?

你有没有遇到过这种情况?

昨天跟AI聊了一个需求,今天再问,它完全忘了你是谁。

我不是说的那种"车轱辘话来回说"的忘,是真的把你辛辛苦苦解释了几十分钟的背景忘得一干二净。

就很离谱。

今天聊聊OpenClaw的Memory机制,看看它是怎么让AI"记住"一切的。

先说架构

要理解Memory,得先搞清它在整个系统中的位置。

根据官方文档,OpenClaw的核心概念包括这几个部分:

  • Agent Loop: 执行循环
  • Session: 会话管理
  • Memory: 长期记忆
  • Compaction: 会话压缩
  • Context Engine: 上下文引擎

它们的关系是这样的:

用户消息 → Session → Context Engine → Agent Loop → 生成回复 → Memory 存储
                              ↓
                         Compaction

Session是容器,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. 1. 提取关键信息:从历史对话中提取事实、决策、代码片段
  2. 2. 生成摘要:用LLM把长对话压缩成短摘要
  3. 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
-
 状态管理用Pinia

Session:会话隔离

官方文档说:

"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. 1. 窗口管理:把历史对话压缩成摘要
  2. 2. 优先级排序:重要的记住,不重要的扔掉
  3. 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. 1. 摘要有损耗
    压缩后的摘要不可能100%保留原意。官方文档说:
  2. "Compaction summarization preserves opaque identifiers by default."
  3. 一些细节可能会丢失。

  4. 2. 上下文窗口限制
    再怎么压缩,也还是受限于上下文窗口。超长对话一定有信息损失。
  5. 3. 隐私考虑
    Memory文件是明文存储,敏感信息不建议往里放。

总结

OpenClaw的Memory不是简单的"记住",而是一套复杂的信息管理系统:

       
                                           
组件作用
Session会话隔离
Context Engine上下文管理
Compaction会话压缩
Memory长期存储
Pruning临时清理
       
     

它们配合起来,才实现了在有限上下文内"记住一切"的效果。

官方文档说:

"Memory system lets the AI remember important information across sessions, enabling true 'memory'."

现在你再看到这句话,应该知道它背后是一套多么精妙的设计了。


觉得有用就点个赞、在看、转发吧。想第一时间收到推送,给个星标。谢谢阅读,下次见。