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 的插件生态非常丰富:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
总计 100+ 插件,而且社区还在持续贡献!
✅ 总结
插件系统让 OpenClaw 变得极其灵活:
-
1. 即插即用 – 添加新功能只需安装插件 -
2. 独立维护 – 每个插件独立开发 -
3. 按需选择 – 只安装需要的插件 -
4. 社区共建 – 任何人都可以贡献插件
这就是 OpenClaw 扩展性的秘密!
📖 下期预告
下一期我们将聊聊 Agent 系统,看看 AI 是如何处理消息、调用工具的。
敬请期待!
🚀 欢迎点赞、转发!
夜雨聆风