0

OpenClaw Skill开发入门:从零开始创建你的第一个AI技能

2026.06.04 | youres | 18次围观

为什么需要自定义OpenClaw Skill?

很多朋友安装好OpenClaw后,发现默认的技能还不能满足自己的个性化需求。比如我想要一个自动整理桌面文件的技能,或者一个定时备份重要文档的技能,这些都需要自己开发。OpenClaw的Skill系统设计的很巧妙,它本质上是一个个独立的JavaScript模块,每个模块负责一项特定功能。

Skill的基本结构解析

一个最基础的Skill只需要包含一个SKILL.md文件。这个文件使用Markdown格式,但包含了特殊的元数据头。让我用一个实际例子来说明:

---
name: file-organizer
description: 自动整理桌面文件,按类型分类到不同文件夹
metadata:
  openclaw:
    emoji: "📁"
---

# 文件整理技能

这个技能可以自动扫描桌面,将文件按扩展名分类。

注意上面的YAML前端内容,它定义了Skill的名称、描述和表情符号。这些信息会显示在OpenClaw的技能列表中。

第一个实战案例:创建天气查询Skill

下面我手把手教你创建一个实用的天气查询Skill。这个例子来自我自己的实践经验,我当时想让OpenClaw能快速告诉我天气,而不用打开浏览器。

第一步:创建Skill目录结构

在OpenClaw的skills目录下创建weather-query文件夹,然后创建以下文件:

  • SKILL.md - 技能描述文件
  • scripts/weather.cjs - 核心功能脚本
  • package.json - 依赖配置(可选)

第二步:编写SKILL.md

这个文件告诉OpenClaw这个Skill是做什么的:

---
name: weather-query
description: 查询指定城市的实时天气情况
metadata:
  openclaw:
    emoji: "🌤️"
---

# 天气查询技能

## 功能
- 支持国内主要城市天气查询
- 返回温度、湿度、风力等信息
- 自动缓存结果,避免频繁请求

## 使用方法
用户可以说:"查询北京天气" 或 "上海今天天气怎么样"

第三步:实现核心功能脚本

创建scripts/weather.cjs文件(注意:在JavaScript代码中,字符串连接使用加号):

const axios = require('axios');

async function getWeather(city) {
  // 这里使用免费的天气API,实际开发中建议申请正式API密钥
  const baseUrl = 'https://wttr.in/';
  const queryParam = '?format=j1';
  const apiUrl = baseUrl + encodeURIComponent(city) + queryParam;
  
  try {
    const response = await axios.get(apiUrl);
    const data = response.data;
    
    // 解析天气数据
    const current = data.current_condition[0];
    const area = data.nearest_area[0];
    
    return {
      city: area.areaName[0].value,
      temp: current.temp_C + '°C',
      condition: current.weatherDesc[0].value,
      humidity: current.humidity + '%',
      wind: current.windspeedKmph + 'km/h'
    };
  } catch (error) {
    console.error('天气查询失败:', error.message);
    return null;
  }
}

// OpenClaw调用入口
module.exports = async function(cityName) {
  const weather = await getWeather(cityName || '北京');
  if (!weather) {
    return '抱歉,天气查询失败了,请稍后再试。';
  }
  
  const result = '📍 ' + weather.city + ' 天气:' +
                '\n🌡️ 温度:' + weather.temp +
                '\n☁️ 天气:' + weather.condition +
                '\n💧 湿度:' + weather.humidity +
                '\n🌬️ 风速:' + weather.wind;
  return result;
};

调试和测试技巧

开发过程中,我遇到过几个典型问题,分享给大家:

问题 原因 解决方案
Skill不生效 目录结构不正确 确认SKILL.md在Skill根目录
脚本执行报错 依赖未安装 在Skill目录运行npm install
中文乱码 文件编码问题 确保所有文件保存为UTF-8格式

进阶:让Skill更智能

一个真正实用的Skill应该能理解用户的自然语言。比如用户说"外面冷不冷",Skill应该能推断出是在问天气,并且知道"外面"指的是当前位置。

要实现这个效果,需要在SKILL.md中添加更多的使用示例和变体表达:

## 触发示例
- "北京天气"
- "今天天气怎么样"
- "外面冷不冷"(需要结合位置信息)
- "要不要带伞"(需要推理天气情况)

## 参数提取规则
当用户提到城市名时,自动提取作为查询参数
当用户未指定城市时,使用默认城市或询问用户

部署和分享

开发完成后,你可以将Skill打包分享给其他人。最简单的方式是创建一个ZIP压缩包,包含整个Skill目录。其他用户解压后放到他们的OpenClaw skills目录,重启Gateway就能使用了。

如果你想让更多人使用你的Skill,可以考虑提交到OpenClaw官方技能仓库(内链)。提交前请确保:

  1. 代码有基本注释
  2. SKILL.md描述清晰
  3. 不包含敏感信息(如API密钥)
  4. 提供至少一个使用示例

个人经验总结

从我开发第一个Skill到现在,有几个心得想分享:

1. 从小处着手
不要一开始就想着做一个大而全的Skill。我第一个Skill只能查询天气,但正是这个简单的起点让我理解了整个开发流程。

2. 善用现有工具
OpenClaw已经内置了很多实用工具,比如exec可以执行系统命令,web_fetch可以抓取网页内容。先看看能不能用现有工具组合实现,再考虑从零开发。

3. 注重错误处理
用户的环境千差万别,你的Skill可能会遇到各种意外情况。好的错误处理能让用户体验好很多。比如网络请求失败时,给出清晰的错误提示而不是一堆堆栈信息。

相关资源

如果你在开发过程中遇到问题,可以参考这些资源:

希望这篇教程能帮你迈出OpenClaw Skill开发的第一步。记住,最好的学习方式就是动手实践。从一个简单的小功能开始,慢慢积累经验,你也能开发出实用又有趣的AI技能。

版权声明

本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论