乐于分享
好东西不私藏

【原理篇】OpenClaw 架构详解:Gateway + Agent + Skill 如何协同工作

【原理篇】OpenClaw 架构详解:Gateway + Agent + Skill 如何协同工作

【原理篇】OpenClaw 架构详解:Gateway + Agent + Skill 如何协同工作

前面几篇文章讲完了”是什么”和”怎么用”,这篇文章讲”是怎么跑起来的”。OpenClaw 的架构像一座分工明确的工厂:Gateway 是门卫,Agent 是工人,Skill 是工具箱,Channels 是不同的入口。理解了这套协作机制,你就能更自如地配置、扩展和排障。


一、先从一道面试题说起

有人问:OpenClaw 和普通 AI 对话有什么本质区别?

普通 AI 对话,模型直接输出回答,结束。

ounter(line用户 → AI模型 → 回答

OpenClaw 的运行链路要复杂得多:

ounter(line用户 → Channel → Gateway → Agent → Skill/工具 → 模型 → 回复

这中间多了几层:Channel 负责接收消息、Gateway 负责路由和安全、Agent 负责调度 Skill 和工具、Skill 提供专业能力、模型负责生成内容。

每层各司其职,分工协作。这就是它比普通 AI 更强大的原因。


帮忙点一下吧,非常感谢!\(≧▽≦)/



二、核心架构图:一张图看清全局


三、Gateway:永不关门的”门卫”

3.1 Gateway 是什么?

Gateway 是 OpenClaw 的 HTTP/WebSocket 服务器,运行在本地端口 28789。它像一栋大楼的门卫,负责:

  • 接收消息:所有入口(微信、Telegram、Web)的消息都先到 Gateway
  • 路由分发:把消息转发给对应的 Agent
  • 身份验证:检查 Token,确保是合法请求
  • 会话关联:把消息归到正确的会话
  • 心跳监控:检测各 Channel 是否存活,断线自动重连

3.2 Gateway 的配置

从真实配置文件中提取关键参数:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line{  "gateway": {    "port"28789,              // 监听端口    "mode""local",            // 本地模式(非远程代理)    "bind""loopback",         // 仅监听本地(127.0.0.1)    "auth": {      "mode""token",          // Token 认证      "token""457f2c..."      // 认证 Token    },    "controlUi": {      "allowedOrigins": ["null""file://"]    },    "tailscale": {      "mode""off"             // 未使用 Tailscale    }  }}

bind 模式说明

模式
含义
适用场景
loopback
仅监听本地 127.0.0.1
本机使用,最安全
lan
监听局域网 IP
同局域网设备访问
tailnet
通过 Tailscale 暴露
远程访问,安全隧道
auto
自动选择
按需调整

⚠️ 重要:默认 loopback 模式,Gateway 只在本地监听。即使别人知道你的端口,也无法从外部访问。这是安全设计,不是 bug。

3.3 Gateway 的心跳监控

Gateway 内置了通道健康检查机制:

ounter(lineounter(lineounter(lineounter(lineounter(line{  "channelHealthCheckMinutes"5,          // 每 5 分钟检查一次  "channelStaleEventThresholdMinutes"30// 30 分钟无活动视为断线  "channelMaxRestartsPerHour"10          // 每小时最多重启 10 次}

这意味着:

  • 如果微信连接断了,Gateway 会自动重试
  • 如果重试太频繁(>10次/小时),会暂停保护,防止死循环
  • 你不需要手动监控,Gateway 会自己管自己

四、Agent:调度一切的”工人”

4.1 Agent 是什么?

如果说 Gateway 是门卫,那 Agent 就是工厂里的工人——它真正处理你的请求。

OpenClaw 支持同时运行多个 Agent。从配置文件可以看到:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line{  "agents": {    "defaults": {      "model": { "primary""qclaw/modelroute" },      "workspace""C:\\Users\\10696\\.qclaw\\workspace",      "timeoutSeconds"72000,      "maxConcurrent"3    },    "list": [      { "id""main""name""QClaw" },      { "id""agent-eace0fdc""name""智能Agent" },      { "id""agent-71cdf34c""name""无不言" }    ]  }}

当前配置了三个 Agent:

  • main:默认 Agent(QClaw),就是你现在对话的这个
  • 智能Agent:专门配置了 skills 的 Agent
  • 无不言:另一个专用 Agent

4.2 Agent 的工作流程

当你发一条消息,Agent 的处理过程如下:

收到消息    │    ├── 1. 理解意图:这条消息想做什么?    │    ├── 2. 加载上下文:    │       - 读取 SOUL.md(人设)    │       - 读取 USER.md(用户信息)    │       - 读取 MEMORY.md(长期记忆)    │       - 读取今日日志    │    ├── 3. 匹配 Skill:根据 description 找到最合适的 Skill    │    ├── 4. 调用工具:    │       - 需要文件?→ read / write    │       - 需要执行命令?→ exec    │       - 需要发消息?→ message    │       - 需要搜索?→ web_search    │    ├── 5. 生成回复:综合所有信息,生成最终回答    │    └── 6. 更新记忆:把重要信息写入记忆文件

4.3 Sub-Agent:多线程并行工作

OpenClaw 支持”子 Agent”机制,主 Agent 可以派生多个子 Agent 同时处理不同任务:

{  "defaults": {    "maxConcurrent": 3,           // 主 Agent 同时处理 3 个任务    "subagents": {      "maxConcurrent": 8          // 子 Agent 最多 8 个并行    }  }}

使用场景

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line你:帮我查一下这三家公司的最新股价,并整理成表格主 Agent 分解任务:  ├── 子 Agent 1:查 A 公司股价  ├── 子 Agent 2:查 B 公司股价  └── 子 Agent 3:查 C 公司股价三个子 Agent 并行执行,主 Agent 汇总结果生成表格

五、Channel:OpenClaw 的”入口”

5.1 Channel 是什么?

Channel 是 OpenClaw 连接外部世界的方式,就像大楼的多个入口:正门、侧门、地下车库。

当前配置了以下 Channel:

{  "channels": {    "wechat-access": {      "enabled": true,      "token": "17521d4d...",      "wsUrl": "wss://mmgrcalltoken.3g.qq.com/agentwss",      "userId": "630346413"    },    "openclaw-weixin": {      "enabled": true,      "transport": "local"    }  }}
  • wechat-access:微信公众号接入,通过 WebSocket 连接到腾讯服务器
  • openclaw-weixin:OpenClaw 自带的微信通道

5.2 多 Channel 同时在线

OpenClaw 支持多个 Channel 同时在线,你在任何入口说话,它都能回应:

微信说:帮我写一篇文章  → Channel 识别:wechat-access  → 路由到 Agent  → 生成回复  → 从微信回复Telegram 说:继续写  → Channel 识别:telegram  → 路由到同一个 Session  → Agent 知道是同一个对话  → 继续生成

Session 的 dmScope 策略

{  "session": {    "dmScope": "per-channel-peer"  }}

per-channel-peer 意思是:同一个人的不同 Channel 消息,进入同一个会话上下文。这样你在微信说完,在 Telegram 继续,它还记得刚才说了什么。


六、Skill:Agent 的”工具箱”

6.1 Skill 的定位

Agent 是大脑,负责思考;Skill 是工具箱,负责执行具体任务。

当 Agent 遇到一个问题:

  • “处理 PDF” → 触发 pdf Skill
  • “查天气” → 触发 weather Skill
  • “写公众号” → 触发 wechat-article-drafter Skill

Skill 提供了:

  • 操作步骤(SKILL.md)
  • 可执行脚本(scripts/)
  • 参考文档(references/)
  • 输出模板(assets/)

6.2 Skill 的加载机制

Skill 从多个目录加载:

{  "skills": {    "load": {      "extraDirs": [        "D:\\application\\QClaw\\resources\\openclaw\\config\\skills",  // 内置        "~/.agents/skills",                                               // 预留        "C:\\Users\\10696\\.qclaw\\skills",                              // 用户安装        "~/.openclaw/workspace/skills"                                   // 工作区      ]    },    "entries": {      "pdf": { "enabled"true },     // 启用的 Skill      "xlsx": { "enabled"true },      "online-search": { "enabled"true },      "weiyun": { "enabled"false }  // 禁用的 Skill    }  }}

三层存储

目录
性质
更新时
内置目录
应用自带
会覆盖
~/.qclaw/skills/
用户安装
不受影响
~/.openclaw/workspace/skills/
用户自定义
不受影响

💡 最佳实践:自己写的 Skill 放到 ~/.qclaw/skills/,不要放到内置目录。


七、Plugin:扩展核心能力

7.1 Plugin 是什么?

Plugin 在比 Skill 更底层的位置,扩展 OpenClaw 的核心功能。

{  "plugins": {    "enabled"true,    "allow": [      "wechat-access",    // 微信接入      "qclaw-plugin",     // QClaw 核心插件      "browser",          // 浏览器控制      "openclaw-weixin",  // 微信通道      "lossless-claw"     // 无损上下文(LCM)    ],    "slots": {      "contextEngine""lossless-claw"    },    "entries": {      "lossless-claw": {        "config": {          "dbPath""C:\\Users\\10696\\.qclaw\\memory\\lossless\\lcm.db",          "contextThreshold"0.6,          "freshTailCount"16,          "incrementalMaxDepth"5        }      }    }  }}

7.2 五个核心 Plugin 详解

Plugin 1:lossless-claw(无损上下文)

这是 OpenClaw 最核心的 Plugin 之一,负责”上下文压缩”。

当对话历史太长时,会触发压缩:

{  "dbPath""C:\\Users\\10696\\.qclaw\\memory\\lossless\\lcm.db",  "contextThreshold"0.6,        // 占用 60% 时触发压缩  "freshTailCount"16,           // 保留最近 16 条消息不压缩  "incrementalMaxDepth"5       // 最多压缩 5 层深度}

压缩后的对话变成”摘要”,存入 SQLite 数据库(lcm.db),需要时可以通过搜索找回。

Plugin 2:browser(浏览器控制)

{  "browser": {    "enabled": true,    "defaultProfile": "openclaw"  }}

提供浏览器自动化能力:打开网页、点击、填表、截图、爬取。

Plugin 3:wechat-access / openclaw-weixin(微信接入)

两个 Plugin 都负责微信接入,只是方式不同:

  • wechat-access:通过腾讯 WebSocket 服务器接入(需要配置 token)
  • openclaw-weixin:OpenClaw 自带的微信接入方式

Plugin 4:qclaw-plugin(QClaw 核心插件)

QClaw 平台的核心功能插件。


八、Model:OpenClaw 的”大脑”

8.1 模型配置

{  "models": {    "mode": "merge",    "providers": {      "qclaw": {        "baseUrl": "http://127.0.0.1:19000/proxy/llm",        "api": "openai-completions",        "models": [{          "id": "modelroute",          "name": "modelroute",          "contextWindow": 200000,          "maxTokens": 8192        }]      },      "mimo-plan": {        "baseUrl": "xxxx",        "apiKey": "tp-...",        "api": "openai-completions",        "models": [{          "id": "xxxx"        }]      }    }  }}

8.2 模型路由

用户请求    │    ▼qclaw 本地代理 (127.0.0.1:19000)    │    ├──→ Hunyuan(腾讯混元,免费额度)    ├──→ Qwen(阿里通义,便宜好用)    ├──→ DeepSeek(性价比高)    └──→ OpenRouter(聚合多模型)

本地代理负责智能路由,根据任务类型、负载、费用自动选择最优模型。

8.3 模型与 Agent 的关系

Agent(主逻辑)    │    ├── 理解你的意图(用模型)    ├── 调度 Skill(纯逻辑)    ├── 生成回复(用模型)    │    └── 调用工具(read/write/exec

Agent 和模型的关系:Agent 是调度者,模型是大脑。Agent 决定”做什么”,模型负责”怎么说”。


九、Session:对话的”容器”

9.1 Session 是什么?

Session 是对话的容器,每次你和 OpenClaw 的一次完整对话是一个 Session。

{  "session": {    "reset": {      "mode": "idle",      "idleMinutes": 525600  // 约 1 年无活动才重置    },    "maintenance": {      "pruneAfter": "365d",       // 365 天后清理      "maxEntries": 1000000,      // 最多 100 万条记录      "rotateBytes": "1gb"        // 日志满 1GB 时轮转    }  }}

Session 的生命周期

创建 Session    │    ├── 对话进行中(积累上下文)    │    ├── 上下文太满 → lossless-claw 压缩 → 存入 lcm.db    │    ├── Session 长期不活跃(1 年)→ 自动重置    │    └── 365 天后 → 历史记录清理

9.2 Session 的消息队列

{  "messages": {    "queue": {      "mode": "followup"    }  }}

followup 模式:消息按顺序处理,不会并发混乱。


十、工具集:Agent 的”手和脚”

10.1 内置工具

OpenClaw 提供了一系列内置工具,Agent 可以直接调用:

工具
功能
read
读取文件
write
写入文件
exec
执行系统命令
browser
浏览器自动化
web_search
联网搜索
web_fetch
获取网页内容
message
发送消息
cron
定时任务
gateway
网关控制
session_*
会话管理
nodes
设备控制

10.2 循环检测

为了防止 Agent 陷入死循环,系统内置了循环检测:

{  "tools": {    "loopDetection": {      "enabled": true,      "historySize": 30,              // 检测最近 30 条      "warningThreshold": 10,         // 10 次重复 → 警告      "criticalThreshold": 20,        // 20 次重复 → 阻止      "globalCircuitBreakerThreshold": 50,      "detectors": {        "genericRepeat": true,        // 检测重复模式        "knownPollNoProgress": true,  // 检测无进展轮询        "pingPong": true              // 检测来回弹跳      }    }  }}

这意味着:如果 Agent 陷入”说同样的话”的循环,系统会主动干预,防止资源浪费。


十一、数据流:一次完整请求的旅程

现在我们把整个架构串起来,看一次完整请求的旅程:


十二、实战:如何排查一个请求”卡在哪了”

理解了架构,排查问题就简单了。

问题:消息发出去没有回复

按层级排查

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line第 1 步:Channel 正常吗?  → 检查 wechat-access 是否在线  → Gateway 心跳监控应该在 5 分钟内检测第 2 步:Gateway 收到请求了吗?  → Gateway 日志有没有该消息的记录  → port 28789 是否正常监听第 3 步:Agent 在处理吗?  → 看 Session 是否在活跃状态  → 是否有 Skill 匹配  → 是否有工具调用卡住第 4 步:模型返回了吗?  → 本地代理 127.0.0.1:19000 是否响应  → 模型是否超时(默认 72000 秒很长)第 5 步:回复发出去了吗?  → Channel 心跳正常吗  → Session 消息队列状态

问题:回复”答非所问”

通常是因为:

  1. Skill 匹配错误(触发了不相关的 Skill)
  2. 上下文被错误压缩(lossless-claw 压缩掉了关键信息)
  3. Session 错乱(多 Channel 场景下 Session 混淆)

问题:Session 历史丢失

可能原因:

  1. Session 超过 365 天被清理
  2. 手动 reset Session
  3. 上下文压缩太激进(可以调低 contextThreshold

十三、架构设计的哲学

设计原则一:分层解耦

Gateway、Agent、Skill、Model 每层独立,通过标准接口通信。这意味着你可以替换任意一层而不影响其他层——换模型不用动 Agent,换 Skill 不用动 Gateway。

设计原则二:本地优先

  • 数据存在本地(~/.qclaw/workspace/)
  • 模型通过本地代理路由(127.0.0.1:19000)
  • Gateway 默认监听 loopback
  • 记忆不上传云端

设计原则三:安全内置

  • Token 认证、IP 白名单、循环检测
  • Skill 有启用/禁用开关
  • Plugin 有 allowlist
  • 敏感信息在配置中被脱敏(__OPENCLAW_REDACTED__

设计原则四:可观测性

  • 心跳监控自动检测断线
  • Session 维护有日志和阈值
  • LCM 提供搜索和压缩状态
  • 循环检测防止死锁

写在最后

OpenClaw 的架构体现了几个核心理念:

  1. 分层解耦:每层各司其职,通过标准接口通信
  2. 本地优先:数据不离手,隐私有保障
  3. 安全内置:认证、检测、隔离,安全不是补丁而是设计
  4. 可扩展:Skill、Plugin、Agent 都支持扩展

理解了这套架构,你就从”会用”升级到了”会调”——遇到问题能定位,配置需求能实现,想加功能知道从哪下手。

系列文章预告

  • 进阶篇(待完成):定时任务 + 子 Agent 自动化
  • 实战篇(待完成):用 OpenClaw 搭建你的”数字打工人”
点点赞和关注不迷路,后面还有更多精彩干货。

👨‍💻 H先生出品 | 专注 AI 工具与效率提升