惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MongoDB | Blog
MongoDB | Blog
J
Java Code Geeks
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
D
DataBreaches.Net
腾讯CDC
GbyAI
GbyAI
I
InfoQ
博客园 - Franky
G
Google Developers Blog
Last Week in AI
Last Week in AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
Vercel News
Vercel News
博客园_首页
MyScale Blog
MyScale Blog
Martin Fowler
Martin Fowler
N
Netflix TechBlog - Medium
V
V2EX
T
The Blog of Author Tim Ferriss
M
MIT News - Artificial intelligence
雷峰网
雷峰网
H
Hackread – Cybersecurity News, Data Breaches, AI and More
大猫的无限游戏
大猫的无限游戏
The GitHub Blog
The GitHub Blog

又耳笔记

用AI挣钱之AI建站:二维码生成器工具 用AI挣钱之AI建站:https://markdowntopdf.top Cloudflare Workers实战番外一:用Static Assets托管网站,告别传统方案 Cloudflare Workers实战(五):不止JavaScript,拥抱Python与Rust Cloudflare Workers实战(四):托管和分发静态文件 Cloudflare Workers实战(三):实现认证、重定向与缓存 Cloudflare Workers实战(二):动态修改后端响应 Cloudflare Workers实战(一):随心所欲操作客户端请求 Cloudflare workers不完全指南 使用n8n创作短篇小说 水果风波:信任的代价 用Python将PDF文件转换成图片 rust网络框架Pingora源码阅读3 rust网络框架Pingora源码阅读2 rust网络框架Pingora源码阅读1 Pingora快速入门教程1之总览 Rust模板引擎askama快速入门引擎 使用Loco快速搭建自己的后台系统 用Rust发一封图文并茂的邮件 Rust小项目: 写一个简单的恶意流量阻断器 Rust小项目: 写一个简单的网页爬虫 Rust命令行库Clap快速入门教程 Rust小项目:用Rust写一个端口扫描器 Rust真全栈开发快速入门 rust声明宏快速入门教程 Rust文本处理快速入门教程 RUST web框架axum快速入门教程6之测试 白嫖免费的Rust在线运行时shuttle RUST web框架axum快速入门教程5之中间件 用Rust来做以太坊开发5之事件日志及签名
小龙虾(OpenClaw)源码分析1:整体架构和源码地图
About 又耳宁 关于技术与股票的一些零碎想法 · 2026-04-01 · via 又耳笔记

最近打算系统性地啃一下OpenClaw源码,顺手也开个系列记录一下自己的理解过程。
这一篇是第1篇,目标很简单:先把地图摊开,搞清楚这个项目大致由哪些模块组成,消息是怎么流动的,后面再按模块逐个击破。

先说明一下,本文基于openclaw当前最新源码(我本地拉取时间是写文当天),重点放在工程结构和运行链路,不会一上来就抠每一行实现。

如果只用一句话来概括,我觉得是:

一个自托管的AI助手网关(Gateway),把多种聊天渠道、Agent运行时、工具能力统一在一个控制平面里。

从官方README也能看出来,它不是单纯的聊天机器人,而是一个“中枢”:

  • 一边连各种消息渠道(Telegram/Slack/Discord/WhatsApp等)
  • 一边连Agent(模型、会话、工具)
  • 中间通过Gateway做连接管理、路由、状态与安全控制

所以你可以把它想象成:聊天渠道适配层 + Agent运行编排层 + 控制平面

读源码前先看主链路

很多同学读大项目容易卡住,不是因为代码难,而是因为没先抓住主链路。
我自己总结了一个“先粗后细”的阅读顺序:

  1. 入口在哪(程序怎么启动)
  2. 网关怎么起(核心服务怎么挂起来)
  3. 消息怎么流动(入站 -> 路由 -> Agent -> 出站)
  4. 会话和状态怎么存(上下文连续性)

只要这4个问题通了,后面看队列、插件、安全就顺很多。

一张图看整体架构

先画个非常简化的示意图(不是源码中的官方图,方便理解):

聊天渠道(Discord/Slack/Telegram/...) 
             |
             v
        Gateway(控制平面)
             |
    +--------+--------+
    |                 |
    v                 v
会话/路由/队列      Agent运行时(模型+工具)
    |                 |
    +--------+--------+
             |
             v
          响应回渠道

你会发现,Gateway是中间那层“总调度”,这也是后续系列里会反复出现的核心词。

源码目录地图(先记核心)

这个仓库很大,但第一阶段你只要盯住这几个目录就够了:

  • src/entry.ts:CLI入口之一,处理启动前置逻辑
  • src/index.ts:兼容入口与库导出相关逻辑
  • src/gateway/:网关核心实现(控制平面)
  • src/agents/:Agent相关运行逻辑(上下文、模型、行为)
  • src/channels/:渠道相关实现
  • src/plugins/extensions/:插件化能力和扩展实现
  • docs/concepts/:架构和机制文档(读源码前后都很有帮助)

一句话:先读entry/index/gateway/agents,再扩展到channels/plugins

从启动入口开始看

src/entry.ts里能看到启动前做了不少事情,比如:

  • 环境归一化
  • 参数预处理(比如profile/container相关)
  • 快速路径(如版本和help)
  • 最终进入CLI主流程

这种入口文件很典型:它并不承载业务本身,而是承载“把系统安全且可控地拉起来”的职责。

如果你之前读过一些CLI项目(例如kubectldocker这类工具),会发现套路很像:
先保证启动姿势正确,再把活交给真正的命令执行层。

Gateway为什么是“控制平面”

docs/concepts/architecture.md里明确了一个核心点:Gateway是长期运行的中枢,客户端、节点、Web控制端都围绕它通信。
从工程角度看,这种设计有几个明显好处:

  • 渠道接入统一,不会每个渠道都自己维护一套状态机
  • 会话和路由统一,不会出现“同一个用户在不同入口上下文割裂”
  • 安全策略统一(配对、鉴权、远程访问策略)

你可以理解为:消息面和控制面被清晰地收口到Gateway,后续无论接新渠道还是换模型,都更容易演进。

系列文章安排(含Python番外)

前面规划的系列我这里正式落成目录,方便后续连载时对齐:

  1. 总览:架构和源码地图(本文)
  2. CLI启动链路:从命令到主流程
  3. Gateway启动内幕:控制平面如何建立
  4. 消息主链路:入站到回复全过程
  5. Session机制:上下文如何持续
  6. 队列与并发:如何避免串台和拥塞
  7. 流式输出:回复体验如何做快做稳
  8. Agent工作空间:AGENTS.md等文件如何影响行为
  9. 模型与上下文窗口:多Provider细节
  10. 插件机制:渠道和能力如何扩展
  11. 安全设计:权限边界与生产加固
  12. 可观测性:日志、健康检查与排障
  13. 番外:用Python实现一个迷你版OpenClaw(仅命令行交互)

第13篇会刻意保持“极简可运行”,只提供命令行交互接口,不做Web界面,目的是帮助大家从“读懂架构”走到“自己动手实现”。

本文小结

这一篇我们先完成了三件事:

  • 明确了OpenClaw的定位:它是AI助手网关而不是单点机器人
  • 画出了主链路:渠道 -> Gateway -> Agent -> 渠道
  • 确定了源码阅读顺序和整个系列路线图

下一篇我们就正式进CLI启动链路,看看一条openclaw ...命令是如何一步步进入主执行逻辑的。

参考链接