Clawdbot / OpenClaw 是如何记住一切的

February 01, 2026

Clawdbot (OpenClaw) 是一个开源的个人 AI 助手(MIT 许可证),由 Peter Steinberger 创建。与 ChatGPT 或 Claude 这类运行在云端的模型不同,Clawdbot 完全在你的本地机器上运行,并且可以集成到你已经在使用的聊天平台中,比如 Discord、WhatsApp、Telegram 等。

Clawdbot 与众不同之处在于,它能够 自主处理真实世界的任务:管理邮件、安排日历事件、处理航班值机、以及按计划运行后台任务。但真正吸引我注意的是它的 持久化记忆系统 —— 它可以 7×24 小时保留上下文,记住对话内容,并在未来的交互中持续构建和利用这些记忆。

Clawdbot 不是基于云端、也不是由公司控制记忆,而是 将所有记忆保存在本地,让用户完全拥有自己的上下文和技能。

下面我们来深入看看它是如何工作的。


上下文是如何构建的

在讨论记忆之前,我们先看一次请求中,模型究竟”看到了什么”:

[0] 系统提示词(静态 + 条件指令)
[1] 项目上下文(引导文件:AGENTS.md、SOUL.md 等)
[2] 对话历史(消息、工具调用、压缩摘要)
[3] 当前消息

系统提示词定义了代理的能力和可用工具。而与记忆最相关的是 项目上下文(Project Context),它包含了一些 用户可编辑的 Markdown 文件,并且会被注入到每一次请求中。

这些文件和记忆文件一起,存在于代理的工作区中,使得整个代理的配置 完全透明、可编辑


上下文 vs 记忆

理解 上下文(Context)记忆(Memory) 的区别,是理解 Clawdbot 的关键。

上下文(Context)

上下文是模型在一次请求中看到的所有内容

Context = 系统提示词 + 对话历史 + 工具结果 + 附件

上下文的特点:

  • 短暂的:只在当前请求中存在
  • 有上限的:受模型上下文窗口限制(例如 200K tokens)
  • 昂贵的:每个 token 都影响 API 成本和速度

记忆(Memory)

记忆是 存储在磁盘上的内容

Memory = MEMORY.md + memory/*.md + 会话转录

记忆的特点:

  • 持久的:重启、隔天、隔月都不会丢失
  • 无上限的:可以无限增长
  • 廉价的:存储不产生 API 成本
  • 可搜索的:支持语义检索

记忆工具(Memory Tools)

Clawdbot 通过两个专用工具访问记忆:


1. memory_search

用途:在所有记忆文件中查找相关内容

{
  "name": "memory_search",
  "description": "强制回忆步骤:在回答有关过往工作、决策、日期、人物、偏好或待办事项的问题前,语义搜索 MEMORY.md + memory/*.md",
  "parameters": {
    "query": "我们对 API 做了什么决定?",
    "maxResults": 6,
    "minScore": 0.35
  }
}

返回结果:

{
  "results": [
    {
      "path": "memory/2026-01-20.md",
      "startLine": 45,
      "endLine": 52,
      "score": 0.87,
      "snippet": "## API 讨论\n决定为了简化采用 REST 而不是 GraphQL...",
      "source": "memory"
    }
  ],
  "provider": "openai",
  "model": "text-embedding-3-small"
}

2. memory_get

用途:在 memory_search 找到结果后,读取具体内容

{
  "name": "memory_get",
  "description": "在 memory_search 之后读取指定记忆文件的具体行",
  "parameters": {
    "path": "memory/2026-01-20.md",
    "from": 45,
    "lines": 15
  }
}

返回结果:

{
  "path": "memory/2026-01-20.md",
  "text": "## API 讨论\n\n与团队讨论了 API 架构。\n\n### 决策\n我们选择 REST 而不是 GraphQL,原因如下:
1. 实现更简单
2. 更好的缓存支持
3. 团队更熟悉\n\n### 接口
- GET /users
- POST /auth/login
- GET /projects/:id"
}

写入记忆(Writing to Memory)

Clawdbot 没有专门的 memory_write 工具。它直接使用标准的 写入 / 编辑文件工具 来修改 Markdown 文件。

因为记忆本质上就是普通的 Markdown,你也可以 手动编辑这些文件(系统会自动重新索引)。

写入到哪里,由 AGENTS.md 中的提示词逻辑决定。

此外,在 会话压缩前会话结束时,也会自动写入记忆(后文会详细说明)。


记忆存储结构

Clawdbot 的设计理念是:

“记忆就是代理工作区里的普通 Markdown 文件。”

两层记忆系统

默认路径:~/clawd/

~/clawd/
├── MEMORY.md              # 第二层:长期整理后的知识
└── memory/
    ├── 2026-01-26.md      # 第一层:当天记录
    ├── 2026-01-25.md
    ├── 2026-01-24.md
    └── ...

第一层:每日日志(Layer 1)

路径:memory/YYYY-MM-DD.md 特点:只追加,不修改

代理会在以下情况写入这里:

  • 想要记住某件事
  • 用户明确要求”记住”某件事

示例:

# 2026-01-26

## 10:30 AM - API 讨论
与用户讨论了 REST vs GraphQL。
决定:使用 REST。
关键接口:/users, /auth, /projects。

## 2:15 PM - 部署
已将 v2.3.0 部署到生产环境,无问题。

## 4:00 PM - 用户偏好
用户提到他们更偏好 TypeScript 而不是 JavaScript。

第二层:长期记忆(Layer 2)

文件:MEMORY.md

这里存放的是 经过整理、长期有效的知识。当代理认为某些信息是 重要的决定、观点、经验或结论 时,就会写入这里。

示例:

# 长期记忆

## 用户偏好
- 偏好 TypeScript 而不是 JavaScript
- 喜欢简洁的解释
- 正在开发 "Acme Dashboard" 项目

## 重要决策
- 2026-01-15:选择 PostgreSQL 作为数据库
- 2026-01-20:采用 REST 而不是 GraphQL
- 2026-01-26:使用 Tailwind CSS 作为样式方案

## 关键联系人
- Alice(alice@acme.com)- 设计负责人
- Bob(bob@acme.com)- 后端工程师

代理如何知道要读取记忆?

这一切由 AGENTS.md 驱动(该文件会自动加载):

## 每次会话开始前,必须执行:
1. 读取 SOUL.md —— 你是谁
2. 读取 USER.md —— 你在帮助谁
3. 读取 memory/YYYY-MM-DD.md(今天和昨天)
4. 如果是主会话(直接与用户对话),也要读取 MEMORY.md
不要询问权限,直接执行。

记忆是如何被索引的

当一个记忆文件被保存时,后台会发生以下流程:

  1. 文件保存
  2. 文件监听器检测到变更(使用 Chokidar)
  3. 文本切块(约 400 tokens,80 tokens 重叠)
  4. 向量化(embedding)
  5. 存储到 SQLite 数据库

向量搜索由 sqlite-vec 支持,关键词搜索由 SQLite FTS5 支持,两者结合实现 混合搜索


记忆是如何被搜索的?

Clawdbot 同时执行两种搜索:

  • 向量搜索(语义)
  • BM25 关键词搜索(精确匹配)

最终评分公式:

finalScore = (0.7 * 向量得分) + (0.3 * 文本得分)

这样既能找到”意思相同”的内容,也不会漏掉 ID、日期、名字等精确关键词。


多代理记忆隔离(Multi-Agent Memory)

Clawdbot 支持多个代理,每个代理的记忆 完全隔离

~/.clawdbot/memory/
├── main.sqlite
└── work.sqlite

~/clawd/        # main 代理工作区
~/clawd-work/   # work 代理工作区

默认情况下:

  • 不会跨代理读取记忆
  • 每个代理拥有独立人格与上下文

这非常适合将 个人聊天工作聊天 分离。


上下文压缩(Compaction)

所有模型都有上下文窗口限制。当接近上限时,Clawdbot 会自动进行 对话压缩

  • 老对话 → 摘要
  • 最近对话 → 保留原文
  • 摘要 → 写入磁盘

压缩是 持久化的,不会在下一次会话中丢失。


预压缩记忆刷新(Memory Flush)

由于压缩是有损的,Clawdbot 在压缩前会触发一次 静默记忆刷新

  • 扫描当前对话
  • 将重要信息写入记忆文件
  • 用户完全无感知

这样可以确保 重要信息不会在压缩中丢失


剪枝(Pruning)

工具输出可能非常巨大(例如构建日志)。剪枝会在 不修改磁盘历史 的前提下,裁剪发送给模型的内容,降低成本。


会话生命周期

会话默认每天重置,也可以配置为其他模式。每次使用 /new 开启新会话时,可以触发 会话记忆钩子,自动保存上一个会话的核心内容。


结论

Clawdbot 的记忆系统成功,是因为它遵循了几个关键原则:

  1. 透明而非黑箱
  2. 搜索优于强行注入上下文
  3. 持久优于会话
  4. 混合优于单一方案

Profile picture

Written by Armin Li , a venture capitalist. [Mail] [RSS]