《OpenClaw架构与源码解读》· 第 1 章 OpenClaw 是什么?它和 ChatGPT 有什么不一样?

第 1 章 OpenClaw 是什么?它和 ChatGPT 有什么不一样?

1.1 从「聊天机器人」到「会干活的数字同事」

过去几年,我们经历了几波 AI 工具的浪潮:

  • 先是「对话式搜索」:ChatGPT、Claude、文心一言……
  • 然后是「写代码、写文案」:Copilot、Cursor、各种 AI IDE 插件;
  • 接着是「智能客服/机器人」:接入企业微信、Slack、网站客服的各种 Bot。

这些东西的共同点是:主要还停留在「说」的层面

  • 它们可以帮你理解问题、生成文本或代码;
  • 但要真正触达你的世界——你的文件、邮箱、日程、服务器、家里的设备——往往需要你手动复制粘贴结果,再去点各种按钮、跑各种脚本。

这中间存在一个巨大的「最后 10 米」问题:
从「AI 想得明白」到「事情真的被做完」,差了一堵墙。

OpenClaw 试图干的事,就是在你和 AI 之间,把这堵墙拆掉,让 AI 真的动手

  • 可以访问你的邮箱,帮你整理和回复;
  • 可以操作你的浏览器,帮你登录、填表、查资料;
  • 可以在你的电脑上跑脚本、读写文件、开关设备;
  • 可以定时在后台悄悄做事,不打扰你。

你可以把它想象成一个:

「坐在你电脑前、登录了你账号、能使用你所有工具的一位远程同事,但 TA 是 AI。」

1.2 OpenClaw 的核心理念:本地优先、开放、可黑(Hackable)

在深入技术之前,先说说这个名字。「Claw」是龙虾或螃蟹的螯——最有力的那只钳子。OpenClaw 的创始人选择这个词,因为项目的核心理念就是让 AI 不只是「说得好」,而是真的「抓得住」:抓住你的文件系统、邮箱、浏览器、终端,把事情做完。名字里的「Open」则强调完全开源。Logo 也是一只卡通龙虾,社区里大家习惯叫它「那只龙虾」。

从官网和 README 中,可以提炼出三个关键理念:

  • 本地优先(Local-first)
    OpenClaw 默认跑在你的设备上:Mac、Windows、Linux 都可以。
    你的配置、技能、上下文记忆都在你掌控的环境里,外部服务只是被当作「模型提供商」或「远程 API」。
  • 开放
    OpenClaw 是开源的,你可以:
    • 直接阅读源码,理解安全模型、权限边界;
    • Fork 一份,定制自己的版本;
    • 在社区生态中共享、复用他人写好的 Skills。
  • 可黑(Hackable)
    作者和社区反复强调的一点是:你应该能随时「拆开」它
    • CLI 是第一等公民,可以从终端操作几乎所有能力;
    • 配置文件、Skills、连接方式都可以用文本和代码来描述和修改;
    • 甚至有专门的「Hackable 安装方式」,鼓励你从源码开始玩。

这三点让 OpenClaw 和很多云端封闭的「AI 助手产品」有明显不同:
它更像一个开发者用的「个人 Agent 操作系统」,而不是一个最终形态的 SaaS。

1.3 OpenClaw、AI 模型与 Provider:搞懂三者关系

很多第一次听说 OpenClaw 的人会问:

  • 「它和 ChatGPT 什么关系?自己带了一个 AI 模型吗?」
  • 「听说它能有无限长期记忆,大模型的上下文窗口不是有限制吗?」
  • 「怎么就能让 AI 变成某种性格?」

这一节专门回答这些问题。如果你已经理解 LLM API 的工作方式和 Agent 框架的基本原理,可以跳过。

1.3.1 OpenClaw 不是 AI,而是 AI 的「经纪人」

最重要的一点,先说清楚:

OpenClaw 本身不包含任何 AI 模型。
它是一个本地运行的编排层,负责把你的消息、上下文、记忆、工具描述打包好,发给远程(或本地)的大模型 API,再把模型的回答拿回来执行。

打个比方:

  • 大模型(Claude、GPT、DeepSeek……)是一个极其聪明但「没有身体、没有记忆、每次见面都失忆」的专家;
  • OpenClaw 是这个专家的经纪人:帮它记笔记、带它去现场、把工具递到它手里、替它挡掉不该接的活。

所以当你说「OpenClaw 帮我整理了邮箱」,实际发生的是:

  1. OpenClaw 收到你的消息;
  2. OpenClaw 把消息 + 你的历史上下文 + 可用工具列表,打包成一个 API 请求,发给模型;
  3. 模型回复「我需要调用 Gmail 工具,查询未读邮件」;
  4. OpenClaw 在你本地 执行这个工具调用,拿到结果;
  5. 把结果再发给模型,模型说「已整理完毕,给你总结……」;
  6. OpenClaw 把最终回复发回给你的聊天窗口。

整个过程中,模型只负责「想」,OpenClaw 负责「记」和「做」。

1.3.2 Provider:模型从哪来

OpenClaw 支持多种模型提供商(Provider),你可以在安装时选择:

Provider说明
AnthropicClaude 系列,OpenClaw 默认推荐
OpenAIGPT 系列
Google AIGemini 系列
Ollama / LM Studio本地运行的开源模型(完全离线)
其他兼容 API任何提供 OpenAI 兼容接口的服务

对 OpenClaw 来说,Provider 就是一个 HTTP API 端点 + 一把 API Key,仅此而已。你甚至可以同时配置多个 Provider,设定优先级和 Failover 策略(详见第 16 章运维部分)。

1.3.3 「无限长期记忆」是怎么实现的

大模型本身有上下文窗口限制(比如 128K token),而且每次 API 调用之间并不共享状态——模型「看完即忘」。

那 OpenClaw 的「长期记忆」是怎么来的?答案是 OpenClaw 在本地帮模型「记笔记」

  1. 对话历史存在本地:每次你和 OpenClaw 的对话,都被完整保存在本机的数据文件里;
  2. 自动摘要与修剪:当历史太长时,OpenClaw 会自动对旧对话做摘要压缩,保留关键信息,丢弃细节;
  3. 关键偏好持久化:你说过的「周末别打扰我」「GitHub 通知帮我归档」之类的偏好,会被提取存入长期记忆;
  4. 按需注入上下文:每次给模型发请求时,OpenClaw 会从本地记忆中检索出跟当前话题最相关的内容,拼到提示词里一起发送。

用一张简化的流程图来看:

远程模型 APIOpenClaw(本地)你远程模型 APIOpenClaw(本地)你alt[模型要求调用工具]发送消息① 查本地记忆,找相关上下文② 拼装提示词(系统人设 + 长期记忆 + 近期对话 + 工具列表 + 新消息)③ HTTP 请求④ 模型推理⑤ 返回结果⑦ 本地执行工具调用⑧ 把工具结果再送模型返回最终回复⑨ 保存本次对话到本地记忆回复

关键点在于:模型本身没有记忆,记忆全在 OpenClaw 这一侧。 模型每次只是在回答「一个信息量很丰富的提问」,而 OpenClaw 负责让每个提问都包含足够的背景。

这就是为什么 OpenClaw 可以做到「跨天、跨周甚至跨月」的上下文连贯——不是因为模型记住了,而是 OpenClaw 每次都把该记的东西重新告诉它。

1.3.4 「人格化」与「性格」是怎么做到的

当你觉得 OpenClaw 「有性格」——比如说话风格像一个靠谱的技术同事,或者像一个温和的私人助理——背后的机制其实很简单:

系统提示词(System Prompt)注入。

OpenClaw 在你的本地有一个工作区目录(~/.openclaw/workspace/),里面有几个关键的 Markdown 文件:

  • SOUL.md:定义 Agent 的「灵魂」——说话风格、性格特征、价值观;
  • AGENTS.md:定义有哪些 Agent 角色、各自负责什么;
  • TOOLS.md:定义工具使用偏好与安全规则。

每次 OpenClaw 向模型发送请求时,都会把这些文件的内容拼装成系统提示词的一部分。模型收到的第一段话就是在被告知「你是谁、你该怎么做」。

举个极简的例子,如果你的 SOUL.md 里写的是:

你是一个经验丰富的技术同事,说话简洁、不废话。 遇到不确定的事情,优先确认而不是猜测。 用中文回复,技术术语保留英文。 

那么每次请求模型 API 时,OpenClaw 发给模型的大致是:

系统提示词: "你是一个经验丰富的技术同事……" 长期记忆摘要: "用户偏好:周末少打扰;GitHub 通知归档……" 最近 5 轮对话: [...] 可用工具: [Gmail, Browser, Shell, ...] 用户新消息: "帮我看看今天有什么重要邮件" 

模型拿到这些信息后,就会按照你设定的人格来回答和行动。换一套 SOUL.md,模型的表现风格就会完全不同——但 OpenClaw 的代码一行都不用改。

1.3.5 一句话总结

角色负责什么在哪里运行
OpenClaw记忆、调度、工具执行、人格注入、安全管控你的本地机器
Provider / 模型理解语义、推理、生成回复、决定调什么工具远程 API(或本地 Ollama)
聊天平台收发消息的「传话筒」各平台服务器

理解了这一层关系之后,后面所有的「Session」「Agent Runtime」「Skills」「Channels」就都有了着力点:它们都是 OpenClaw 这个「经纪人」身上的不同器官,各自负责一块具体工作。

1.4 功能速览:多通道聊天、浏览器控制、系统访问、后台任务、技能平台

从功能角度,OpenClaw 可以被粗略拆成几块(后面章节会详细展开):

  • 多通道聊天入口(Channels)
    • 支持 Slack、iMessage、Discord、Google Chat、Teams、Matrix、Feishu、LINE、IRC、Mattermost、Twitch、WebChat……
    • 你和朋友/同事可以在任何一个自己熟悉的聊天平台里,像跟真人一样跟它说话;
  • Gateway 控制平面(Gateway)
    • 统一管理 Session、配置、通道状态、心跳、Cron、Webhooks;
    • 提供 Web 控制台和 WebChat 前端;
    • 是所有 Agent、Skills、Nodes 的「中枢」。
  • Agent 运行时(Agent Runtime)
    • 管理和模型之间的对话、工具调用(tool streaming)、分块输出(block streaming);
    • 支持多 Agent 配置:可以为不同场景(代码、生活、运营)定制不同人格和能力。
  • Nodes & Browser
    • Nodes 代表各种「有手有脚的设备」:Mac/iOS/Android 等;
    • Browser 工具可以启动和控制专用浏览器,截图、交互、上传下载、执行复杂网页操作。
  • Skills 平台
    • 类似应用商店:有官方自带(bundled)、托管(managed)、工作区自定义(workspace)三种;
    • 你可以装别人写好的,也可以在它的帮助下写出自己的技能。
  • 自动化与后台任务
    • Cron 任务、Webhooks、Gmail Pub/Sub 等,让 OpenClaw 可以在你不在线的时候替你「守着」;
    • 可以实现每日简报、异常监控、自动整理文档等常驻任务。

1.5 从官网与 README 解读产品定位

官网用大量用户反馈来传达一个核心感受:「这不像一个传统软件,更像一个有生命的伙伴。」

  • 人们说它「在后台运行公司」;
  • 说「这才是个人 AI 应该有的样子」;
  • 说「感觉像二十年前第一次装上 Linux」:自由、可控、可以无限折腾。

而 README 的开头则更技术向一些:

  • 它强调 Gateway 是控制平面;
  • 强调 Node ≥ 22、npm/pnpm 安装方式、不同发布通道(stable/beta/dev);
  • 列出一长串已经实现的功能模块与文档链接。

综合来看,OpenClaw 的定位可以概括为:

一个以开发者为核心用户的本地 AI 助手运行时,兼顾「开箱即用」和「极致可扩展」。

1.6 本书路线图与阅读建议(按读者画像)

这本书会沿着这样的节奏展开:

  • Part I:帮你站在「产品和用户」视角,看清 OpenClaw 的整体样子;
  • Part II:梳理核心抽象和数据模型:Session、Agent、Channel、Node;
  • Part III:深入 Gateway 与运行时的实现,从仓库结构和调用链入手;
  • Part IV:聚焦 Skills 与自动化,教你写出自己的技能和工作流;
  • Part V:从安全、部署、运维角度看「如何在真实环境长期跑 OpenClaw」;
  • Part VI:做一次架构复盘,讨论哪些模式值得你在其他项目中复用。

针对不同读者:

  • 个人玩家:可以快速扫一遍 Part I → 重点看 Part II 的概念 → 直接跳到 Part IV 第 11、13 章,按案例写出第一个 Skill;
  • 集成工程师:在上述基础上,多花时间啃 Part III 的第 8、10 章,搞清消息链路再下手改代码;
  • 架构/平台负责人:建议完整阅读,再结合自己团队的现有系统,思考第 14、15、16、17 章提出的那些权衡。

1.7 架构鸟瞰:单机上的「个人 Agent OS」

在真正展开详细架构(第 3 章)之前,我们先粗略勾勒 OpenClaw 的骨架。下面这张图展示了从用户到执行层的完整分层:

执行层:手脚与器官

模型 Provider

Agent Runtime 智能体运行时

Gateway 控制平面

Channels 通道层

用户与外部世界

HTTP 请求

返回结果

执行结果

执行结果

执行结果

👤 你

Slack

iMessage

Discord

CLI / Web UI

SlackAdapter

iMessageAdapter

DiscordAdapter

...更多适配器

Gateway 进程

Session 管理

Agent 路由

Cron / Webhooks

配置与状态

Agent Runtime

提示词构造
SOUL.md + 记忆 + 工具列表

工具调用决策

远程模型 API
Anthropic / OpenAI / Ollama

Skills
Gmail / Todo / CRM

Nodes
macOS / iOS / Android

Browser
专用浏览器实例

从外到内,大致可以这样理解:

  1. 用户与外部世界
    • 你和你的同事/家人,通过 Slack、iMessage、Discord 等各种聊天 App 给 OpenClaw 发消息;
    • 有时也会通过 CLI 或 Web 前端直接和它交互。
  2. Channels(通道层)
    • 每一种聊天平台都有一个对应的「适配器」:负责连接官方 API、收发消息、处理各自奇怪的格式和限制;
    • 这些适配器把外部世界五花八门的消息,统一转换成内部的标准事件。
  3. Gateway(控制平面)
    • 所有来自 Channels 的事件,最终都会汇聚到本地运行的 Gateway 进程;
    • Gateway 维护:会话(Session)、当前在线通道、已安装技能、定时任务、运行中的 Agent 等等;
    • 它通过 WebSocket/HTTP 为 CLI、Web UI 和其他客户端提供统一入口。
  4. Agent Runtime(智能体运行时)
    • 当 Gateway 判定一条消息需要某个 Agent 处理时,会把消息交给对应的 Agent Runtime;
    • Runtime 负责和模型对话、组织提示词、发起工具调用(Skills/Browser/Nodes)、把中间结果流式返回给 Gateway。
  5. Tools / Skills / Nodes / Browser(「手脚」与「器官」)
    • Skills:围绕特定任务或系统(如 Todo 管理、邮箱、CRM)的扩展逻辑;
    • Nodes:macOS/iOS/Android 等执行环境,可以控制本机应用、摄像头、屏幕;
    • Browser:专用浏览器实例,可以独立于你日常浏览活动执行自动化操作。

用一句话概括:

Channels 把外部世界接进来,Gateway 负责「分发和管控」,Agent Runtime 负责「思考和决策」,Skills/Nodes/Browser 负责「真正动手」。

在后面的章节里,我们会一层层把这张示意图拆开:
从「一条消息」出发,顺着它在这些组件间的流动轨迹,把架构和源码一起讲清楚。

1.8 源码索引约定:从概念跳到代码的大致路径

从这一章开始,书中提到的每一个核心概念,都会尽量给出「大致可以去看哪一块代码」的指引。由于 OpenClaw 本身在快速演进,具体文件名和路径可能会有调整,这里只给出模块级别的导向:

  • Gateway 相关代码
    • 主要集中在仓库的 src/apps/ 下面:负责启动 Gateway 进程、管理 WebSocket/HTTP 接入、维护 Session 和通道状态。
    • 当你在书里看到「Gateway 如何路由一条消息」这类描述时,可以在源码中搜索 Gateway 入口和路由相关的模块来比对。
  • Channels(通道适配器)相关代码
    • 每种聊天平台是 src/ 下的独立顶层目录:src/slack/src/discord/src/imessage/ 等;
    • 适配器里包含:连接初始化、事件监听、消息入站/出站的转换逻辑,共享工具函数集中在 src/plugin-sdk/
  • Agent Runtime 与会话模型
    • 在源码中会有专门负责 Session、Agent 配置与调用链的模块;
    • 这些模块定义了「一条消息如何变成一次模型调用」「调用过程中如何接入工具」等核心逻辑。
  • Skills 与插件系统
    • 仓库根目录有 skills/ 目录:每个 Skill 一个子目录,核心是一个 SKILL.md Markdown 文件(不是 TypeScript/JavaScript 代码);
    • Skill 的工作方式是把说明文本注入 Agent 的提示词,由模型调用 bash 命令来执行;
    • Skill 的加载、扫描和提示词注入逻辑在 src/agents/src/gateway/agent-prompt.ts 中实现。

在后续深入章节(尤其是第 8、10、11、14 章),我们会在介绍某个概念时,给出更具体的「可以从哪几个文件/模块看起」的建议,帮你把抽象概念和真实代码一一对上。

下一篇 第 2 章 从安装到第一句“Hello“:快速体验 OpenClaw

Read more

连接管理模块和搭建客户端

连接管理模块和搭建客户端

1. 连接管理 在客户端这边,RabbitMQ 弱化了客户端的概念,因为用户所需的服务都是通过信道来提供的,因此操作思想转换为先创建连接,通过连接创建信道,通过信道提供服务这一流程。 这个模块同样是针对 muduo 库客户端连接的二次封装,向用户提供创建 channel 信道的接口,创建信道后,可以通过信道来获取指定服务。 #ifndef__M_CONNECTION_H__#define__M_CONNECTION_H__#include"muduo/proto/dispatcher.h"#include"muduo/proto/codec.h"#include"muduo/base/Logging.h"#include"muduo/base/

By Ne0inhk

Node.js 安装指南(Windows 版本)

第一部分:Node.js 简介与安装前准备 1.1 Node.js 是什么? Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够使用 JavaScript 编写服务器端应用程序。Node.js 的出现彻底改变了 JavaScript 只能运行在浏览器中的局面,使其成为一门全栈开发语言。 主要特点: * 事件驱动、非阻塞 I/O 模型 * 轻量且高效 * 单线程但支持高并发 * 拥有庞大的包生态系统(npm) 1.2 为什么选择 Node.js? 1. 前后端统一语言:使用相同的编程语言开发前端和后端 2. 高性能:基于 V8 引擎,执行速度快

By Ne0inhk

用 Rust 从零开发一个隐写工具

隐写术是一门古老而又充满现代感的技术,它能将信息隐藏在看似普通的载体中,比如图片。最近,我用 Rust 从零开始开发了一个隐写工具,既能通过命令行使用,也有一个现代化的 Web 界面。今天就来分享一下这个过程中的收获和思考。 项目背景 隐写术(Steganography)源于希腊语,意为"隐秘书写"。与加密不同,隐写术的目标是隐藏信息的存在,而不是其内容。在数字时代,我们可以通过修改图像的最低有效位(LSB)来隐藏数据,而人眼几乎察觉不到差异。 我选择 Rust 来实现这个项目,是因为它在系统编程方面表现出色,内存安全性和性能都很优秀,非常适合处理图像数据。 技术栈 项目使用了以下主要技术栈: * Rust - 核心编程语言 * image - 图像处理库 * clap - 命令行参数解析 * axum - Web 框架 * Vue.

By Ne0inhk
SQL 查询语句

SQL 查询语句

目录 什么是 SELECT 语句? 为什么要学习SELECT 语句? 查询单列数据 查询多列数据 查询所有列 查询不同的值(去重) 限制返回行数 分页查询(从第几行开始取多少行) 使用注释(3种写法) 本篇文章有对应教学视频,可点击下方链接跳转 SQL 查询语句_哔哩哔哩_bilibili 什么是 SELECT 语句?         在 SQL 语言中,SELECT 语句是最基础、也是最常用的语句类型之一。它的核心作用是从数据库表中查询数据,并将符合条件的结果以表格的形式返回。几乎所有与数据库交互的操作,查询通常都是最频繁使用的场景,而 SELECT 就是执行这类操作的首选语句。 一条完整的 SELECT 语句至少包含两个基本组成部分: 查询的字段(列名):指明希望从表中检索哪些列的数据,例如产品名称、价格、编号等。 数据来源的表名:指明数据是从哪个表中获取的,例如

By Ne0inhk