Appearance
OpenClaw插件开发入门教程:打造专属功能扩展
OpenClaw的插件系统让你可以扩展AI的能力边界。本教程将带你从零开始开发自己的OpenClaw插件。
插件系统概述
OpenClaw插件可以:
- 添加新的工具和命令
- 集成外部服务
- 自定义AI行为
- 扩展界面功能
插件类型
| 类型 | 说明 | 示例 |
|---|---|---|
| Tool Plugin | 添加AI可调用的工具 | 数据库查询、API调用 |
| UI Plugin | 扩展界面功能 | 自定义面板、快捷操作 |
| Integration Plugin | 集成外部服务 | Slack通知、GitHub同步 |
| Agent Plugin | 自定义Agent行为 | 专业领域Agent |
插件开发环境准备
1. 创建插件目录
bash
mkdir my-openclaw-plugin
cd my-openclaw-plugin
npm init -y2. 安装开发依赖
bash
npm install --save-dev typescript @types/node
npm install --save @openclaw/sdk3. 配置TypeScript
创建 tsconfig.json:
json
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"outDir": "./dist",
"rootDir": "./src",
"strict": true
}
}创建第一个插件
插件结构
my-openclaw-plugin/
├── src/
│ └── index.ts # 插件入口
├── manifest.json # 插件清单
├── package.json
└── README.md1. 创建插件清单
manifest.json:
json
{
"name": "my-plugin",
"version": "1.0.0",
"displayName": "我的插件",
"description": "一个示例插件",
"author": "Your Name",
"main": "dist/index.js",
"contributes": {
"commands": [
{
"command": "myPlugin.hello",
"title": "打招呼"
}
],
"tools": [
{
"name": "hello",
"description": "向用户打招呼"
}
]
}
}2. 编写插件代码
src/index.ts:
typescript
import { OpenClawPlugin, Tool, Command } from '@openclaw/sdk';
export class MyPlugin implements OpenClawPlugin {
name = 'my-plugin';
version = '1.0.0';
// 插件激活时调用
activate(context: PluginContext) {
console.log('插件已激活');
// 注册命令
context.registerCommand('myPlugin.hello', () => {
console.log('你好!这是我的第一个插件!');
});
// 注册工具
context.registerTool({
name: 'hello',
description: '向用户打招呼',
parameters: {
type: 'object',
properties: {
name: {
type: 'string',
description: '用户名'
}
},
required: ['name']
},
execute: async (params: { name: string }) => {
return `你好,${params.name}!很高兴认识你!`;
}
});
}
// 插件停用时调用
deactivate() {
console.log('插件已停用');
}
}
export default MyPlugin;3. 构建插件
bash
npm run build插件API详解
工具注册
注册AI可调用的工具:
typescript
context.registerTool({
name: 'weather',
description: '查询天气',
parameters: {
type: 'object',
properties: {
city: { type: 'string', description: '城市名' }
},
required: ['city']
},
execute: async (params) => {
// 调用天气API
const weather = await fetchWeather(params.city);
return weather;
}
});命令注册
注册用户可执行的命令:
typescript
context.registerCommand('myPlugin.doSomething', async () => {
// 执行操作
await performAction();
// 显示通知
context.showMessage('操作完成!');
});配置项
添加插件配置:
typescript
// manifest.json
{
"contributes": {
"configuration": {
"title": "我的插件配置",
"properties": {
"myPlugin.apiKey": {
"type": "string",
"default": "",
"description": "API密钥"
}
}
}
}
}
// 代码中读取配置
const apiKey = context.getConfig('myPlugin.apiKey');高级功能
HTTP请求
typescript
import { http } from '@openclaw/sdk';
const response = await http.get('https://api.example.com/data');文件操作
typescript
import { fs } from '@openclaw/sdk';
// 读取文件
const content = await fs.readFile('/path/to/file');
// 写入文件
await fs.writeFile('/path/to/file', 'content');事件监听
typescript
// 监听消息发送事件
context.onMessageSent((message) => {
console.log('用户发送了消息:', message);
});
// 监听AI响应事件
context.onAIResponse((response) => {
console.log('AI响应:', response);
});调试插件
启用调试模式
typescript
const debug = context.getConfig('debug') || false;
if (debug) {
console.log('调试信息:', data);
}查看日志
在OpenClaw中打开「开发者工具」查看控制台日志。
热重载
开发时启用热重载:
bash
npm run dev -- --watch发布插件
1. 准备发布
确保以下文件完整:
manifest.json- 插件清单README.md- 使用文档LICENSE- 开源协议
2. 打包
bash
npm run build
npm pack3. 发布到市场
bash
npx openclaw publish最佳实践
1. 错误处理
typescript
execute: async (params) => {
try {
const result = await doSomething(params);
return result;
} catch (error) {
return {
error: true,
message: error.message
};
}
}2. 参数验证
typescript
execute: async (params) => {
if (!params.city) {
throw new Error('城市名不能为空');
}
// ...
}3. 性能优化
typescript
// 使用缓存
const cache = new Map();
execute: async (params) => {
const cacheKey = JSON.stringify(params);
if (cache.has(cacheKey)) {
return cache.get(cacheKey);
}
const result = await fetchData(params);
cache.set(cacheKey, result);
return result;
}总结
通过本教程,你已经学会了:
- OpenClaw插件的基本结构
- 如何注册工具和命令
- 使用插件API进行开发
- 调试和发布插件
现在你可以开始开发自己的OpenClaw插件了!建议从简单的工具开始,逐步增加复杂度。
