主题
技术架构概览
理解了OpenClaw能做什么,现在我们深入看看它是如何运转的。OpenClaw的架构设计遵循"简单但完整"的原则,四个核心组件各司其职,协同完成从理解意图到执行任务的完整链路。
整体架构
先看一张架构全景图:
┌─────────────────────────────────────────────────────────────┐
│ 用户交互层 │
│ 飞书 │ 企微 │ 微信 │ Discord │ Web │ CLI │ API │
└─────────────────────────┬───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Channels(渠道) │
│ 消息接入、格式转换、权限验证 │
└─────────────────────────┬───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Gateway(网关) │
│ 意图理解 │ 任务规划 │ 技能调度 │ 上下文管理 │ 记忆存储 │
└─────────────────────────┬───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Skills(技能) │
│ 文件操作 │ 浏览器控制 │ 代码执行 │ 日历管理 │ API调用 │ ... │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Workspace(工作区) │
│ 配置文件 │ 记忆数据 │ 任务历史 │ 凭证管理 │
└─────────────────────────────────────────────────────────────┘用户消息从Channels进入,经过Gateway的智能处理,调用Skills执行具体操作,所有状态数据存储在Workspace。下面我们逐个组件深入解析。
Gateway:AI助理的"心脏"
Gateway是整个系统的核心,承担着"大脑"的角色。它负责将用户的自然语言指令转化为可执行的任务序列。
意图理解——Gateway首先需要理解用户想要什么。这不仅仅是关键词匹配,而是真正的语义理解。比如用户说"帮我整理一下项目",Gateway需要判断:是整理文件结构?还是整理代码风格?还是整理文档?它会结合上下文、用户历史习惯、当前工作目录等信息做出判断。
任务规划——理解意图后,Gateway需要制定执行计划。一个看似简单的指令可能需要多个步骤:
用户指令:把上周的博客发布到掘金
Gateway规划:
Step 1: 确定时间范围 → 计算上周的日期区间
Step 2: 搜索文件 → 在博客目录查找符合条件的文件
Step 3: 解析内容 → 提取标题、正文、标签
Step 4: 打开掘金 → 启动浏览器,导航到掘金
Step 5: 登录验证 → 使用保存的凭证登录
Step 6: 发布文章 → 依次填写表单并提交
Step 7: 返回结果 → 汇总发布链接技能调度——Gateway知道每个Skills的能力边界,会根据任务需求选择合适的技能组合。如果某个技能执行失败,Gateway还能进行错误恢复和重试。
上下文管理——多轮对话中,Gateway需要维护上下文状态。比如用户先说"打开我的项目",然后说"运行测试",Gateway需要记住"我的项目"指的是哪个目录。
记忆存储——Gateway会将重要信息持久化存储:用户偏好、常用配置、历史任务等。这样下次交互时能更智能地响应用户需求。
Skills:能力的扩展单元
Skills是OpenClaw的"手脚",每个Skill封装一类具体的能力。OpenClaw采用插件化的Skill架构,用户可以根据需要安装和配置。
内置Skills——OpenClaw默认提供了一系列常用技能:
| Skill | 能力描述 |
|---|---|
| file_ops | 文件读写、移动、重命名、压缩 |
| browser | 浏览器自动化、表单填写、截图 |
| code_exec | 执行代码、运行测试、构建项目 |
| calendar | 日历事件创建、查询、修改 |
| web_search | 网页搜索、内容抓取、信息提取 |
| github | 仓库操作、Issue管理、PR处理 |
| notification | 消息推送、邮件发送 |
自定义Skills——如果内置技能不能满足需求,你可以编写自己的Skill。一个Skill本质上是一个Python模块,定义了:
python
# 示例:自定义一个发送钉钉通知的Skill
class DingTalkSkill:
name = "dingtalk"
description = "发送钉钉机器人消息"
def __init__(self, webhook_url):
self.webhook_url = webhook_url
def execute(self, message: str):
# 发送消息到钉钉
response = requests.post(
self.webhook_url,
json={"msgtype": "text", "text": {"content": message}}
)
return response.json()Skill组合——复杂任务往往需要多个Skill协同工作。Gateway会自动编排Skill的调用顺序:
任务:每天早上收集技术资讯并发送到钉钉
Skill编排:
web_search.search("Hacker News top 10")
→ web_search.search("GitHub Trending Python")
→ file_ops.write("daily_report.md", content)
→ dingtalk.send("日报已生成,请查看附件")Channels:消息接入的桥梁
Channels负责连接用户和OpenClaw系统,让用户可以通过各种渠道与AI助手交互。
多渠道支持——OpenClaw支持多种消息渠道:
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 飞书 │ │ 企微 │ │ 微信 │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────┐
│ Channel Adapters │
│ 统一消息格式、处理平台差异、验证权限 │
└─────────────────────────────────────────────────────────┘消息格式转换——不同平台的消息格式各不相同。飞书使用卡片消息,微信支持文本和图片,Discord有Embed格式。Channels层会将这些格式统一转换为OpenClaw内部的标准消息格式:
python
{
"platform": "feishu",
"user_id": "ou_xxx",
"message_type": "text",
"content": "帮我整理下载文件夹",
"attachments": [],
"timestamp": "2026-03-28T10:30:00Z"
}权限验证——Channels还负责验证用户身份和权限。你可以配置哪些用户可以使用OpenClaw,哪些用户只能使用特定技能。
Webhook支持——除了即时消息,Channels还支持Webhook接入。这意味着你可以通过HTTP API调用OpenClaw,将其集成到自己的应用中:
bash
curl -X POST https://your-openclaw-instance/api/v1/execute \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{"task": "生成周报并发送邮件"}'Workspace:配置与记忆的存放地
Workspace是OpenClaw的数据中心,存储着系统运行所需的所有配置和状态数据。
配置文件——Workspace存放着OpenClaw的主配置文件,定义了:
yaml
# workspace/config.yaml
gateway:
model: "gpt-4"
temperature: 0.7
max_tokens: 4096
skills:
enabled:
- file_ops
- browser
- calendar
- github
config:
browser:
headless: true
user_data_dir: "./browser_data"
channels:
feishu:
app_id: "cli_xxx"
app_secret: "${FEISHU_APP_SECRET}"
wechat:
corp_id: "wx_xxx"
agent_id: 100001记忆数据——Gateway的"记忆"存储在Workspace中:
workspace/
├── memory/
│ ├── user_preferences.json # 用户偏好设置
│ ├── conversation_history/ # 对话历史
│ ├── task_history/ # 任务执行记录
│ └── learned_patterns.json # 学习到的模式这些数据让OpenClaw能够"记住"你的习惯。比如你总是把Python项目放在~/Projects/python/目录,OpenClaw下次会优先在这个目录搜索。
凭证管理——敏感信息(API密钥、密码、Token)安全存储在Workspace的加密区域:
workspace/
├── credentials/
│ ├── github.enc # GitHub Token
│ ├── openai.enc # OpenAI API Key
│ └── feishu.enc # 飞书凭证凭证采用AES-256加密存储,密钥由用户主密码派生。即使有人获取了文件,也无法解密内容。
任务历史——每次任务执行的详细记录都会保存:
json
{
"task_id": "task_20260328_001",
"created_at": "2026-03-28T10:30:00Z",
"user_input": "帮我整理下载文件夹",
"plan": ["扫描目录", "分类文件", "移动文件"],
"execution_log": [
{"step": 1, "action": "scan", "status": "success", "duration": 0.5},
{"step": 2, "action": "classify", "status": "success", "duration": 1.2},
{"step": 3, "action": "move", "status": "success", "duration": 2.3}
],
"result": "已整理23个文件到5个分类目录",
"status": "completed"
}这些历史数据不仅用于审计,还能帮助Gateway优化未来的任务规划。
理解了四大组件的职责,你已经掌握了OpenClaw的运行原理。下一章,我们将进入实战环节,从安装配置开始,一步步搭建属于你自己的AI助手。