2 / 98 min read

Part 2 : 理解技术架构

如果你把 OpenClaw 当成“会回消息的机器人”,很快就会看不懂它的很多设计。把它当成一个常驻运行的 Agent 系统,架构就顺了。

01 三层架构:Gateway、Node、Channel

OpenClaw 使用的是 Gateway -> Node -> Channel 三层结构。

层级作用关键点
Gateway中央控制平面维护 WebSocket、Session、调度 Agent
Node设备执行层负责本地命令、摄像头、录屏、系统操作
Channel消息接入层负责 Telegram、飞书、钉钉、Discord 等渠道

消息是怎么流动的

一次完整交互,大致是下面这条链路:

用户发消息 -> Channel 接收 -> Gateway 路由 -> Agent 思考 -> Node 执行 -> 再回到用户

为什么默认只监听本地

OpenClaw 的默认设计是 Loopback-First,也就是 Gateway 默认只绑定 127.0.0.1

这样做有三个好处:

  • 默认不暴露公网端口,更安全。
  • 本机 Node 直接走本地 WebSocket,延迟低。
  • 需要远程访问时,再通过 Tailscale 或隧道显式暴露。

一个实用原则是:每台主机尽量只跑一个 Gateway 实例。尤其是像 WhatsApp Web 这类需要独占会话的渠道,多实例容易相互冲突。

02 记忆系统:OpenClaw 为什么“记得住”

记忆系统是 OpenClaw 区别于普通聊天机器人最核心的部分之一。通常可以把它分成四层。

层级存储位置作用
SOULSOUL.md不可变人格、价值观、核心身份
TOOLSSkills / Extensions当前可用的工具与扩展能力
USERMEMORY.md + 向量库用户偏好、长期事实、决策记录
Session内存 + sessions.json当前会话的即时上下文

Daily Logs

每天的交互会以追加方式写入 memory/YYYY-MM-DD.md。新 Session 启动时,Agent 会优先读取今天和昨天的日志,形成短期连续性。

Pre-Compaction

当上下文接近 Token 上限时,OpenClaw 会静默执行一个压缩流程:

  1. 检测 Token 使用接近阈值。
  2. 把重要信息写入 MEMORY.md 和 Daily Log。
  3. 压缩旧上下文,释放窗口。

用户通常看不到这个过程,但正是它让 OpenClaw 不会像普通聊天窗口那样“聊久了就失忆”。

语义搜索

系统默认支持记忆搜索,结合两类方式:

  • Embedding 向量搜索:适合模糊召回。
  • BM25 关键词搜索:适合精确匹配。

常见工具包括:

  • memory_search:找相关记忆片段
  • memory_get:读取完整记忆文件

03 Agent 工作区:一切皆文件

OpenClaw 的很多“高级能力”,本质上都来自它把系统状态落到了文件里。

workspace/
├── AGENTS.md
├── SOUL.md
├── USER.md
├── MEMORY.md
├── HEARTBEAT.md
├── memory/
│   └── YYYY-MM-DD.md
├── skills/
└── sessions.json

这些文件分别管什么

文件作用
AGENTS.mdAgent 身份、边界、回复风格
SOUL.md更底层、更稳定的人格内核
USER.md用户资料和偏好
MEMORY.md长期记忆
HEARTBEAT.md定时任务与主动行为
skills/当前工作区私有 Skills
sessions.json会话元数据

这套设计非常符合 OpenClaw 的工程哲学:用最普通的文本文件,表达最复杂的 Agent 状态。

04 Session 与认证

OpenClaw 在“谁能和我说话、不同上下文怎么隔离”这件事上设计得很严格。

DM Pairing

默认情况下,陌生人第一次给 Agent 发私聊,不会直接进入对话,而是会收到一个一次性配对码。只有你批准之后,对方才能继续使用。

这一步的意义非常大:

  • 防止陌生人滥用你的 Agent
  • 防止别人直接消耗你的 API 额度
  • 防止私聊入口变成未授权公网接口

allowFrom 白名单

如果你希望某些账号直接跳过配对,可以在 AGENTS.md 里预授权:

allowFrom:
  - telegram:123456789
  - whatsapp:+8613800138000
  - discord:user#1234

requireMention 群聊策略

群聊里默认只响应 @Agent 的消息,而不是扫描整个群。

这能明显减少两件事:

  • 群聊噪音
  • 无意义 Token 消耗

Session 隔离

场景行为是否加载长期记忆
私聊进入共享的 main session
群聊每个群独立 Session
跨渠道私聊同一用户可共享主 Session

所以 OpenClaw 的设计意图很明确:私聊是你的长期空间,群聊是公开场合。

05 设计哲学:为什么它看起来这么“工程师”

OpenClaw 背后有一套很鲜明的设计思想。

Unix 风格

项目明显继承了 Unix 的思路:

  • 小工具
  • 可组合
  • 文本流

它不试图把所有能力都做成平台内专有协议,而是尽量让 Agent 通过命令行和文件系统直接触达真实环境。

极简工具集

OpenClaw 的核心工具非常少,重点是:

  • Read
  • Write
  • Edit
  • Bash

少工具的好处是 system prompt 更短、Token 更省、模型决策更聚焦。

不迷信 MCP

OpenClaw 并没有把 MCP 当成唯一正道,而是倾向于直接调用 CLI,必要时再通过 mcporter 这类桥接方案兼容。

这背后的思路是:如果 Agent 自己会写工具、会调用命令,那它的上限更高。

支持自我扩展

OpenClaw 很强调一件事:Agent 不只是“用工具”,还可以“自己补工具”。

常见流程就是:

  1. 发现现有能力不够。
  2. 写一个 Skill 或脚本补上。
  3. 测试、重载、继续执行原任务。

这也是为什么它在很多场景下看起来更像一个真的“会做事的系统”,而不是单轮对话机器人。

06 规模与性能

从现有规模来看,OpenClaw 并不算轻量级。

指标数值
代码规模约 43 万行 TypeScript
运行内存约 1 GB
启动时间3 到 5 秒
官方扩展40+
内置 Skills55

这说明两件事:

  • 它已经不是玩具项目,而是一个完整平台。
  • 你部署它时,应该用“长期运行服务”的心态去规划,而不是只把它当一个临时脚本。