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、操作数据库、还是集成第三方服务,都可以通过技能来实现。快去创建一个属于你的技能吧!