Open Craw架构学习

根据前面讨论和代码/文档,可以这样概括 OpenClaw 的架构和核心元素:


1. 架构总览(一句话)

一个 Gateway 做控制面,上面挂多种「资源」和「连接」:用户从 Channel 进来,路由到某个 Agent 的某条 Session,Agent 跑的时候用 Skills、并通过 Gateway 对 Node 做 invoke。


2. 核心元素(按角色分)

元素 是什么 作用
Gateway 控制面进程 收消息、做路由、管会话、鉴权、下发 node.invoke、驱动 Agent 运行;Session/Agent 状态的归属方。
Channel 消息入口/出口 Telegram、WhatsApp、Slack、WebChat、飞书等;只负责「谁在跟系统对话」,不参与执行逻辑。
Agent 按资源建模的「大脑」 由 agentId 标识,有独立 workspace、配置、会话目录;被路由选中后「挂载」运行,不常驻成多进程。
Session Agent 下的一条对话 由 sessionKey 标识,存历史与状态;同一 Agent 可有多个 Session(不同群、不同人)。
Binding 路由规则 把「channel + account + peer(群/人)」映射到 agentId;决定这条消息进哪个 Agent(及 Session)。
Node 已连接的能力端点 设备/应用连上 Gateway 后注册,带 nodeId、caps、commands;执行 node.invoke 时接收请求并执行。
Device 节点身份 设备侧的密钥与 deviceId,用于认证、配对;nodeId 常取 device.id。
Skills Agent 的能力包 从该 Agent 的 workspace/skills 与共享目录加载,只在该 Agent 运行时可见、可用。

3. 关系简图

                    ┌─────────────────────────────────────────┐
                    │              Gateway                     │
                    │  (控制面:路由、会话、鉴权、下发)          │
                    └─────────────────────────────────────────┘
                      │         │           │            │
        ┌─────────────┼─────────┼───────────┼────────────┼─────────────┐
        │             │         │           │            │             │
        ▼             ▼         ▼           ▼            ▼             ▼
   ┌─────────┐   ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐
   │ Channel │   │ Agent   │  │ Session │  │Binding  │  │  Node   │  │ Device  │
   │(入口/出口)│   │(资源)   │  │(会话)   │  │(路由规则)│  │(执行端)  │  │(身份)   │
   └─────────┘   └────┬────┘  └────┬────┘  └─────────┘  └─────────┘  └────┬────┘
                      │            │                          │            │
                      │            │                          │            │
                      │     ┌──────┴──────┐                   │   nodeId 常取
                      └────►│   Skills    │                   │   device.id
                            │ (Agent 的能力)│                   │
                            └─────────────┘                   │
                                                              │
   User ──► Channel ──► Gateway ──[Binding]──► Agent+Session ──► 运行 LLM+Tools
                                                      │
                                                      └──► node.invoke ──► Node(Device)

4. 数据/请求流(精简)

  1. 入站:用户从某 Channel 发消息 → Gateway 收到。
  2. 路由:用 Binding 根据 channel/account/peer 得到 (agentId, sessionKey),不读消息内容。
  3. 运行:Gateway 在该 Agent 的该 Session 上跑一轮(加载该 Agent 的 Skills、配置、会话历史),LLM + 工具执行。
  4. 调设备:工具里发 node.invoke → Gateway 转给对应 Node(带 Device 身份)执行,结果回给 Agent。
  5. 出站:Agent 的回复经 Gateway 从原 Channel 发回用户。

5. 一句话记核心元素

  • Gateway:唯一控制面。
  • Channel:入口/出口。
  • Agent:按资源建模的「大脑」(agentId + workspace + 配置)。
  • Session:Agent 下的一条对话(sessionKey)。
  • Binding:入站到 Agent/Session 的路由规则。
  • Node:连上 Gateway 的可执行端点(caps/commands)。
  • Device:Node 的身份(认证/配对)。
  • Skills:挂在 Agent 上的能力,随 Agent 加载。

这就是 OpenClaw 的架构和核心元素概览。

参考资料

opencraw架构拆解--不错的博客
https://ai-coding.wiselychen.com/openclaw-architecture-deep-dive-what-claude-code-didnt-tell-you/

Agent as resource
https://www.cnblogs.com/aibi1/p/19627963

Device架构
https://www.cnblogs.com/aibi1/p/19625375

记忆设计(提示词)
https://liruifengv.com/posts/openclaw-prompts/

posted @ 2026-02-19 20:50  向着朝阳  阅读(291)  评论(0)    收藏  举报