Skills 是什么?
Skills 的结构
开发一个 Skill(实战)
安装和使用 Skill
技能自动激活原理
技能进阶
完整示例代码
最佳实践
调试技巧
常见问题
快速开始
总结
一、Skills 是什么?
概念
Skills 就像是 OpenClaw 的"小程序"或"插件",每个技能给贾斯汀增加特殊能力。
隐喻
贾斯汀(AI助手)
↓
Skills(技能包)
├── 发邮件技能 → 能发邮件
├── GitHub技能 → 能管理仓库
├── 飞书技能 → 能操作飞书
├── 天气技能 → 能查天气
└── ...
一键获取完整项目代码
1
2
3
4
5
6
7
8
核心特性
关键词自动激活 - 贾斯汀根据对话中的关键词自动激活相应技能
模块化设计 - 每个技能专注于特定领域
ClawHub 市场 - 统一的技能分发平台
版本管理 - 支持技能的安装、更新、卸载
技能分类
类别 说明 示例
通信集成 WhatsApp、Telegram、微信等消息平台 x-twitter, email
云服务 飞书、Notion、Slack等云服务 feishu-doc, notion
开发工具 GitHub、GitLab、CI/CD等 github, pr-reviewer
容器运维 Kubernetes、Docker、OpenShift等 kubernetes, docker-essentials
项目管理 Trello、Jira、Asana等 trello, jira
实用工具 邮件、天气、数据库等 weather, database
二、Skills 的结构
文件结构
my-skill/ # 技能文件夹
├── SKILL.md # 技能信息(名称、描述、作者)
├── index.js # 核心代码(工具定义)
├── package.json # 依赖和版本
└── README.md # 使用说明
一键获取完整项目代码
1
2
3
4
5
SKILL.md 示例
---
name: weather
description: 查询天气信息
version: 1.0.0
author: Your Name
这是天气查询技能。
一键获取完整项目代码
markdown
1
2
3
4
5
6
7
index.js 示例
import { Tool } from "@openclaw/tool";
export default {
create: (options) => {
return new Tool({
name: "get_weather", // 工具名称
description: "查询指定城市的天气", // 工具描述
parameters: { // 定义需要的参数
city: {
type: "string",
description: "城市名称",
required: true
}
},
execute: async (toolCallId, args) => {
// 实际执行逻辑
const weather = await fetchWeather(args.city);
return {
result: `${args.city}的天气:${weather}`
};
}
});
}
};
一键获取完整项目代码
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
三、开发一个 Skill(实战)
步骤 1:创建技能文件夹
# 进入工作空间
cd ~/.openclaw/workspace/skills
# 创建新技能
mkdir my-first-skill
cd my-first-skill
一键获取完整项目代码
bash
1
2
3
4
5
6
步骤 2:创建 SKILL.md
# 创建 SKILL.md
cat > SKILL.md << 'EOF'
---
name: my-first-skill
description: 我的第一个技能
version: 1.0.0
author: Your Name
这是一个简单的技能示例。
EOF
一键获取完整项目代码
bash
1
2
3
4
5
6
7
8
9
10
步骤 3:创建 package.json
# 初始化 package.json
npm init -y
# 安装必要依赖
npm install @openclaw/tool
一键获取完整项目代码
bash
1
2
3
4
5
步骤 4:创建 index.js
cat > index.js << 'EOF'
import { Tool } from "@openclaw/tool";
export default {
create: (options) => {
return new Tool({
name: "hello",
description: "打招呼",
parameters: {
name: {
type: "string",
description: "名字",
required: false
}
},
execute: async (toolCallId, args) => {
const userName = args.name || "朋友";
return {
result: `你好,${userName}!这是我的第一个技能。`
};
}
});
}
};
EOF
一键获取完整项目代码
bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
步骤 5:创建 README.md
cat > README.md << 'EOF'
# My First Skill
这是一个简单的 OpenClaw 技能示例。
## 使用方法
在对话中说:
- "打个招呼"
- "对张三打招呼"
## 功能
简单的问候功能。
EOF
一键获取完整项目代码
bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
四、安装和使用 Skill
方式 1:本地安装(适合开发)
# 将技能放入 skills 目录
mv my-first-skill ~/.openclaw/workspace/skills/
# 重启 Gateway 让新技能生效
openclaw gateway restart
一键获取完整项目代码
bash
1
2
3
4
5
方式 2:通过 ClawHub 安装(适合分享)
# 1. 注册 ClawHub 账号
clawhub login
# 2. 发布技能
clawhub publish ./my-first-skill
# 3. 其他人可以安装
clawhub install my-first-skill
一键获取完整项目代码
bash
1
2
3
4
5
6
7
8
查看已安装技能
# 列出所有已安装技能
clawhub list
# 查看特定技能
clawhub inspect my-first-skill
一键获取完整项目代码
bash
1
2
3
4
5
五、技能自动激活原理
工作流程
用户在群里说:"打个招呼"
↓
┌─────────────────┐
│ 贾斯汀 │
└─────────────────┘
↓
分析消息中的关键词
↓
识别:"打招呼" → 可能匹配 hello 工具
↓
查找哪个技能有 hello 工具
↓
找到:my-first-skill
↓
自动激活该技能
↓
执行工具逻辑
↓
返回结果
一键获取完整项目代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
关键词匹配
用户说 识别关键词 激活的技能 工具
“打个招呼” 打招呼 my-first-skill hello
“天气怎么样” 天气 weather get_weather
“查看飞书文档” 飞书、文档 feishu-doc read
六、技能进阶
添加多个工具
// index.js
export default {
create: (options) => {
// 返回多个工具
return [
new Tool({ name: "tool1", ... }),
new Tool({ name: "tool2", ... }),
new Tool({ name: "tool3", ... })
];
}
};
一键获取完整项目代码
javascript
1
2
3
4
5
6
7
8
9
10
11
调用其他技能
export default {
create: (options) => {
return new Tool({
name: "call_other_skill",
description: "调用其他技能",
execute: async (toolCallId, args) => {
// 在工具代码中调用其他 API
const result = await fetchFeishuDoc(args.doc_token);
return { result };
}
});
}
};
一键获取完整项目代码
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
添加配置选项
export default {
create: (options) => {
const config = options.config || {};
return new Tool({
name: "my_tool",
description: "我的工具",
execute: async (toolCallId, args) => {
// 读取配置
const apiKey = config.apiKey;
return { result };
}
});
}
};
一键获取完整项目代码
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
七、完整示例代码
天气技能完整实现
// weather-skill/index.js
import { Tool } from "@openclaw/tool";
export default {
create: (options) => {
return new Tool({
name: "get_weather",
description: "获取指定城市的天气信息",
parameters: {
city: {
type: "string",
description: "城市名称,如:北京、上海",
required: true
},
unit: {
type: "string",
description: "温度单位:celsius/fahrenheit",
required: false,
default: "celsius"
}
},
execute: async (toolCallId, args) => {
// 这里调用真实的天气 API
// 示例:使用模拟数据
const weatherData = await fetchWeather(args.city);
return {
result: ` |