乐于分享
好东西不私藏

OpenClaw的超级扩展性:插件系统是如何让一切成为可能的?

OpenClaw的超级扩展性:插件系统是如何让一切成为可能的?

🔧 什么是插件系统?

上期我们说到通道系统让 OpenClaw 支持 20+ 个聊天软件。

有朋友问:

“它是怎么做到能支持那么多平台的?以后想加新平台怎么办?”

答案就是:插件系统 (Plugin System)


🎮 什么是插件?

你可以把插件想象成 乐高积木

┌─────────────────────────────────────────┐
│           乐高积木 = 插件                  │
├─────────────────────────────────────────┤
│                                          │
│   ┌─────────────────────────────────┐    │
│   │         Gateway 主体             │    │
│   │    (基础功能,不变的部分)        │    │
│   └─────────────┬───────────────────┘    │
│                 │                         │
│     ┌───────────┼───────────┐            │
│     │           │           │            │
│     ▼           ▼           ▼            │
│   ┌─────┐   ┌─────┐   ┌─────┐          │
│   │积木1│   │积木2│   │积木3│          │
│   │通道 │   │通道 │   │模型 │          │
│   │插件 │   │插件 │   │插件 │          │
│   └─────┘   └─────┘   └─────┘          │
│                                          │
│   乐高底座 = Gateway 核心                │
│   积木块 = 各种功能插件                   │
│                                          │
└─────────────────────────────────────────┘

插件的优势

  • • 🔨 可扩展 – 需要新功能?加个插件
  • • 🧹 解耦合 – 插件之间互不干扰
  • • 🔄 可替换 – 随时可以换掉某个插件

🎯 OpenClaw 的两种插件

OpenClaw 有两大类插件

┌─────────────────────────────────────────────────┐
│                插件类型                           │
├─────────────────────────────────────────────────┤
│                                                  │
│  1️⃣ Channel 插件 (消息通道)                     │
│  ┌─────────────────────────────────────────┐    │
│  │ 负责连接各个聊天平台                       │    │
│  │                                         │    │
│  │ • whatsapp → 连接 WhatsApp              │    │
│  │ • telegram → 连接 Telegram              │    │
│  │ • discord  → 连接 Discord               │    │
│  │ • ...                                │    │
│  └─────────────────────────────────────────┘    │
│                                                  │
│  2️⃣ Provider 插件 (模型提供商)                │
│  ┌─────────────────────────────────────────┐    │
│  │ 负责连接各种 AI 模型                       │    │
│  │                                         │    │
│  │ • openai → GPT-4                       │    │
│  │ • anthropic → Claude                   │    │
│  │ • google → Gemini                      │    │
│  │ • ollama → 本地模型                     │    │
│  │ • ...                                │    │
│  └─────────────────────────────────────────┘    │
│                                                  │
└─────────────────────────────────────────────────┘

📦 Channel 插件列表

目前 OpenClaw 支持约 20 个 Channel 插件

Channel 插件

├── 📱 即时通讯
│   ├── whatsapp     (WhatsApp)
│   ├── telegram     (Telegram)
│   ├── signal       (Signal)
│   ├── bluebubbles  (iMessage 推荐)
│   └── imessage     (iMessage 传统)

├── 💬 社交平台
│   ├── discord      (Discord)
│   ├── slack        (Slack)
│   ├── googlechat   (Google Chat)
│   ├── twitch       (Twitch)
│   └── IRC          (IRC)

├── 🏢 企业协作
│   ├── msteams      (Microsoft Teams)
│   ├── feishu      (飞书)
│   ├── line        (LINE)
│   ├── mattermost  (Mattermost)
│   ├── nextcloud-talk
│   └── matrix      (Matrix)

└── 🌐 其他
    ├── zalo        (Zalo)
    ├── nostr       (Nostr)
    ├── synology    (Synology Chat)
    └── tlon        (Tlon)

🤖 Provider 插件列表

目前 OpenClaw 支持约 80+ 个 Provider 插件

Provider 插件 (部分)

├── 🚀 主流 AI
│   ├── openai       (GPT-4, GPT-4o)
│   ├── anthropic    (Claude 3, 4)
│   └── google       (Gemini)

├── 💻 开源/本地
│   ├── ollama       (本地 LLM)
│   ├── vllm         (高性能本地)
│   └── deepseek     (DeepSeek 系列)

├── ☁️ 云服务
│   ├── aws-bedrock  (AWS)
│   ├── vertex      (Google Cloud)
│   └── azure-openai (Azure)

├── 🎯 AI 聚合
│   ├── openrouter   (聚合多模型)
│   ├── togetherai   (Together AI)
│   └── perplexity   (搜索 AI)

└── 🌏 国内厂商
    ├── doubao       (豆包)
    ├── qianfan      (百度)
    ├── moonshot     (月之暗面)
    └── minimax     (MiniMax)

🔌 插件架构

┌─────────────────────────────────────────────────────────┐
│                    插件架构                              │
├─────────────────────────────────────────────────────────┤
│                                                          │
│   ┌─────────────────────────────────────────────────┐   │
│   │              Plugin SDK (软件开发包)            │   │
│   │                                                 │   │
│   │  ┌─────────┐  ┌─────────┐  ┌─────────┐        │   │
│   │  │  setup  │  │ runtime │  │ config  │        │   │
│   │  │  (设置) │  │ (运行时) │  │ (配置)  │        │   │
│   │  └─────────┘  └─────────┘  └─────────┘        │   │
│   │                                                 │   │
│   │  ┌─────────┐  ┌─────────┐  ┌─────────┐        │   │
│   │  │ channel│  │ provider│  │ tools   │        │   │
│   │  │ (通道) │  │ (提供商) │  │ (工具)  │        │   │
│   │  └─────────┘  └─────────┘  └─────────┘        │   │
│   │                                                 │   │
│   └────────────────────┬────────────────────────────┘   │
│                        │                                 │
│                        ▼                                 │
│   ┌─────────────────────────────────────────────────┐   │
│   │              Extensions (扩展目录)                 │   │
│   │                                                 │   │
│   │   extensions/                                    │   │
│   │   ├── telegram/   ← 通道插件                    │   │
│   │   ├── discord/   ← 通道插件                    │   │
│   │   ├── openai/    ← 提供商插件                  │   │
│   │   ├── anthropic/← 提供商插件                  │   │
│   │   └── ...                                      │   │
│   │                                                 │   │
│   └─────────────────────────────────────────────────┘   │
│                                                          │
└─────────────────────────────────────────────────────────┘

🔧 插件开发示例

创建一个 Channel 插件

// extensions/my-channel/src/channel.ts
import
 { channelSetup } from "openclaw/plugin-sdk/channel-setup";

export
 default channelSetup({
  id
: "my-channel",

  // 发送消息

  async
 send(context, message) {
    await
 context.transport.post("/send", {
      to
: message.target,
      text
: message.text,
    });
  },

  // 接收消息

  async
 start(context) {
    context.onMessage(async (data) => {
      const
 message = parseMessage(data);
      await
 context.deliver(message);
    });
  },

  // 状态检查

  async
 getStatus() {
    return
 { connected: true };
  },
});

创建一个 Provider 插件

// extensions/my-provider/src/provider.ts
import
 { providerSetup } from "openclaw/plugin-sdk/provider-setup";

export
 default providerSetup({
  id
: "my-provider",

  // 模型列表

  models
: [
    { id: "model-1", name: "Model 1" },
  ],

  // AI 对话

  async
 chatComplete(context, params) {
    const
 response = await context.fetch("https://api.xxx.com/chat", {
      method
: "POST",
      body
: JSON.stringify({
        model
: params.model,
        messages
: params.messages,
      }),
    });
    return
 response.json();
  },
});

📋 插件配置文件

每个插件都需要一个 openclaw.plugin.json

{
  "id"
: "telegram",
  "type"
: "channel",
  "name"
: "Telegram",
  "description"
: "Telegram Bot 消息",
  "runtime"
: {
    "type"
: "channel",
    "config"
: {
      "botToken"
: {
        "type"
: "secret"
      }

    }

  }

}

🔄 插件加载流程

Gateway 启动
        │
        ▼
┌─────────────────┐
│  扫描插件目录   │
│  extensions/    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  读取插件配置   │
│ openclaw.plugin.json
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  验证插件结构   │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  初始化插件     │
│  • 加载配置    │
│  • 建立连接    │
│  • 注册处理    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│    插件就绪    │
│                 │
│  • Channel → 处理消息
│  • Provider → 提供 AI
└─────────────────┘

🛠️ 使用命令

# 查看已安装的插件
openclaw plugins list

# 加载/重载插件

openclaw plugins reload

# 查看插件状态

openclaw status

🎉 插件生态

OpenClaw 的插件生态非常丰富:

类型
数量
例子
Channel
~20
telegram, discord, whatsapp
Provider
~80
openai, anthropic, ollama

总计 100+ 插件,而且社区还在持续贡献!


✅ 总结

插件系统让 OpenClaw 变得极其灵活

  1. 1. 即插即用 – 添加新功能只需安装插件
  2. 2. 独立维护 – 每个插件独立开发
  3. 3. 按需选择 – 只安装需要的插件
  4. 4. 社区共建 – 任何人都可以贡献插件

这就是 OpenClaw 扩展性的秘密!


📖 下期预告

下一期我们将聊聊 Agent 系统,看看 AI 是如何处理消息、调用工具的。

敬请期待!


🚀 欢迎点赞、转发!