跳转到内容

技术架构概览

理解了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助手。

基于 MIT 许可发布