开启左侧

OpenClaw Skills 开发完整教程

[复制链接]
AI小编 发表于 昨天 23:07 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题


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: `
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
阅读排行更多+

Powered by Discuz! X3.4© 2001-2013 Discuz Team.( 京ICP备17022993号-3 )