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
不要询问权限,直接执行。记忆是如何被索引的
当一个记忆文件被保存时,后台会发生以下流程:
- 文件保存
- 文件监听器检测到变更(使用 Chokidar)
- 文本切块(约 400 tokens,80 tokens 重叠)
- 向量化(embedding)
- 存储到 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 的记忆系统成功,是因为它遵循了几个关键原则:
- 透明而非黑箱
- 搜索优于强行注入上下文
- 持久优于会话
- 混合优于单一方案