OpenClaw技能开发:如何编写自定义技能扩展AI能力

OpenClaw技能开发:如何编写自定义技能扩展AI能力

OpenClaw的强大之处在于支持自定义技能(Skills)。通过编写技能,你可以让AI具备各种能力:查天气、查资料、操作文件、调用API等。本文教你如何从零开发一个自定义技能。

技能目录结构

技能存放在 skills/ 目录下,每个技能一个文件夹:

skills/
└── my-skill/
    ├── SKILL.md          # 技能定义文件(必需)
    ├── index.js          # 技能入口(可选)
    ├── references/       # 参考文档(可选)
    └── scripts/          # 脚本文件(可选)

SKILL.md 文件结构

SKILL.md 是技能的核心定义,必须包含:

# SKILL.md

# 技能名称
- name: my-skill
- description: 技能功能描述

## 触发条件
- 关键词:xxx、yyy
- 正则表达式:/xxx(\d )/

## 功能说明
详细描述技能的功能和使用方法

## 使用示例
- 用户说“xxx”,触发技能
- 技能返回“yyy”

实战:开发一个“查天气”技能

第一步:创建技能目录

mkdir -p skills/weather
cd skills/weather

第二步:编写 SKILL.md

# SKILL.md

# 技能名称
- name: weather
- description: 查询指定城市的天气情况

## 触发条件
- 关键词:天气、查询天气
- 正则:/天气\s*(.*)/

## 功能说明
当用户询问天气时,调用天气API获取数据并返回

## 使用示例
- 用户:“北京天气怎么样”
- AI:查询北京天气并返回结果

第三步:编写天气逻辑(可选)

如果技能需要自定义逻辑,创建 index.js:

// skills/weather/index.js
const axios = require('axios');

async function handleWeather(city) {
  const API_KEY = process.env.WEATHER_API_KEY;
  const url = `https://api.weather.com.cn/data/weather/${city}`;
  
  const response = await axios.get(url, {
    params: { key: API_KEY }
  });
  
  return response.data;
}

module.exports = { handleWeather };

第四步:在主配置中注册技能

在 config/skills.js 中添加:

module.exports = {
  skills: [
    { name: 'weather', enabled: true, priority: 10 },
    // 其他技能...
  ]
};

技能市场

OpenClaw官方提供了技能市场,可以直接安装社区贡献的技能:

# 搜索技能
openclaw skill search 天气

# 安装技能
openclaw skill install weather

# 更新技能
openclaw skill update weather

常用技能推荐:

  • weather:查天气
  • search:网络搜索
  • news:新闻资讯
  • feishu-wiki:飞书知识库
  • memory:记忆功能

技能优先级

当多个技能匹配时,按优先级顺序触发:

// 数字越大优先级越高
{ name: 'weather', enabled: true, priority: 10 },
{ name: 'search', enabled: true, priority: 5 },

技能开发最佳实践

  • 单一职责:一个技能只做一件事
  • 错误处理:做好异常捕获和返回
  • 配置分离:敏感信息放环境变量
  • 文档清晰:SKILL.md要写清楚触发条件

总结

通过自定义技能,你可以让OpenClaw具备任何你想要的能力。无论是调用API、操作数据库、还是集成第三方服务,都可以通过技能来实现。快去创建一个属于你的技能吧!