【技能开发】OpenClaw 技能开发入门:让你的 AI 学会新本事
目录
前言:从"会聊天"到"会做事"
哈喽各位,我是攀哥!前两篇咱们搞定了部署安装和人格定制,有朋友问:"攀哥,我的 AI 助手聊天挺溜了,但能不能让它干点实际的活儿?比如查天气、发邮件、操作数据库什么的?"
问得好!这就涉及到 OpenClaw 的核心功能——技能开发(Skills)!
简单来说,技能就是让 AI 从"嘴炮王者"变成"实干高手"的关键。没有技能的 AI,就像个满腹经纶但手无缚鸡之力的书生;有了技能,它就能真正帮你干活儿了!
今天攀哥就带你入门技能开发,让你的 AI 助手学会真本事!
一、什么是 OpenClaw 技能?
1.1 概念解析
技能(Skill),在 OpenClaw 中是指 AI 可以调用的功能模块。它可以是:
- 查询类:查天气、查汇率、查股票
- 操作类:发邮件、传文件、操作数据库
- 集成类:调用第三方 API、连接外部服务
- 自动化类:定时任务、批量处理、工作流
1.2 技能的工作原理
OpenClaw 的技能机制可以这样理解:
用户请求 → AI 理解意图 → 匹配对应技能 → 执行技能 → 返回结果 举个例子:
用户:"北京今天天气怎么样?"
AI 分析:这是天气查询请求 → 调用 weather 技能 → 获取天气数据 → 回复用户
1.3 内置技能 vs 自定义技能
OpenClaw 自带一些内置技能,比如:
message:发送消息sessions_list:查看会话列表sessions_send:跨会话发消息session_status:查看会话状态
但内置技能毕竟有限,自定义技能才是发挥创造力的地方!
二、技能开发前置知识
2.1 你需要会什么?
攀哥说实话,技能开发需要一定的技术基础:
- JavaScript/Node.js:OpenClaw 的技能主要用 JS 编写
- API 调用:知道怎么用 HTTP 请求调用第三方服务
- JSON 处理:能读懂和编写 JSON 格式的数据
- 基础调试:会看日志、排查错误
如果你是完全的新手,建议先学点 Node.js 基础再来。不过别担心,攀哥会尽量讲得通俗易懂!
2.2 开发环境准备
确保你已经:
- 安装好 Node.js(v20+)
- 有一个代码编辑器(VS Code 推荐)
- OpenClaw 工作区已初始化
三、第一个技能:Hello World
3.1 技能目录结构
OpenClaw 的技能通常放在这个位置:
workspace/ ├── skills/ │ └── my-first-skill/ │ ├── SKILL.md # 技能描述文件 │ ├── index.js # 技能主逻辑 │ └── package.json # 依赖配置(可选) 3.2 编写 SKILL.md
SKILL.md 是技能的"身份证",告诉 AI 这个技能是干嘛的。
# my-first-skill ## 描述 这是我的第一个 OpenClaw 技能,用于测试和学习。 ## 触发条件 当用户提到"hello"、"你好"、"打招呼"时触发。 ## 输入参数 - name: 用户的名字(可选) ## 输出 返回一句问候语。 3.3 编写 index.js
这是技能的核心逻辑:
// skills/my-first-skill/index.js module.exports = { name: 'my-first-skill', description: '我的第一个技能', // 执行函数 async execute(context, params) { const name = params.name || '朋友'; const greetings = [ `你好呀,${name}!👋`, `嘿,${name},今天过得怎么样?`, `哈喽${name},有什么可以帮你的吗?` ]; // 随机选一句问候 const randomGreeting = greetings[Math.floor(Math.random() * greetings.length)]; return { success: true, message: randomGreeting }; } }; 3.4 注册技能
在工作区的配置文件中添加技能路径,或者在会话中加载:
# 在 OpenClaw 中加载技能 openclaw skill load ./skills/my-first-skill 3.5 测试技能
现在跟你的 AI 助手说"你好",看看它会不会调用你的技能!
四、实战:开发一个天气查询技能
光说 Hello World 太没意思了,咱们来做个实用的天气查询技能!
4.1 选择天气 API
攀哥推荐用 wttr.in,因为它:
- 免费,不需要 API 密钥
- 支持中文
- 返回格式简单
4.2 创建技能目录
mkdir -p skills/weather-skill cd skills/weather-skill 4.3 编写 SKILL.md
# weather-skill ## 描述 查询指定城市的天气信息。 ## 触发条件 当用户询问天气、温度、预报时触发。 ## 输入参数 - city: 城市名称(必填) ## 输出 返回当前天气状况、温度、湿度等信息。 ## 示例 - 用户:"北京天气怎么样?" - AI:调用 weather-skill,city="北京" 4.4 编写 index.js
// skills/weather-skill/index.js const https = require('https'); module.exports = { name: 'weather-skill', description: '查询城市天气', async execute(context, params) { const city = params.city; if (!city) { return { success: false, message: '请告诉我你想查询哪个城市的天气~' }; } // 调用 wttr.in API return new Promise((resolve, reject) => { const url = `https://wttr.in/${encodeURIComponent(city)}?format=j1`; https.get(url, (res) => { let; res.on('data', chunk => data += chunk); res.on('end', () => { try { const weather = JSON.parse(data); const current = weather.current_condition[0]; const result = { success: true, data: { city: city, temp: current.temp_C + '°C', weather: current.weatherDesc[0].value, humidity: current.humidity + '%', windSpeed: current.windspeedKmph + 'km/h' } }; resolve(result); } catch (e) { resolve({ success: false, message: '天气查询失败,请稍后再试~' }); } }); }).on('error', reject); }); } }; 4.5 测试效果
用户:"北京天气怎么样?"
AI:北京今天晴,气温 25°C,湿度 45%,风速 12km/h。适合出门哦!☀️
五、技能开发最佳实践
5.1 错误处理要完善
技能执行可能会失败,一定要处理异常情况:
try { // 执行逻辑 } catch (error) { return { success: false, message: '出错了:' + error.message }; } 5.2 返回格式要统一
建议统一返回格式,方便 AI 处理:
{ success: true/false, data: { ... }, // 成功时的数据 message: '...' // 提示信息 } 5.3 技能描述要清晰
SKILL.md 写得越清楚,AI 越知道什么时候调用这个技能。包括:
- 触发条件
- 输入参数
- 输出格式
- 使用示例
5.4 敏感操作要谨慎
涉及以下操作时要特别注意:
- 删除文件/数据
- 发送外部消息
- 访问私密信息
建议加一层确认机制,或者需要用户明确授权。
六、技能发布与分享
6.1 本地技能
放在工作区的 skills/ 目录下,仅当前工作区可用。
6.2 全局技能
安装到全局,所有工作区都能用:
npm install -g openclaw-skill-xxx 6.3 分享技能
可以把技能发布到:
- GitHub
- npm
- OpenClaw 社区
让更多人使用你的技能!
七、进阶:调用外部 API
很多技能需要调用第三方 API,攀哥给个通用模板:
const axios = require('axios'); async function callExternalAPI(endpoint, params, apiKey) { try { const response = await axios.get(endpoint, { params: params, headers: { 'Authorization': `Bearer ${apiKey}` } }); return response.data; } catch (error) { throw new Error('API 调用失败:' + error.message); } } 常用 API 推荐:
- 天气:wttr.in、OpenWeatherMap
- 汇率:exchangerate-api.com
- 新闻:newsapi.org
- 翻译:Google Translate API
结语
好了,今天的技能开发入门就到这里!攀哥总结一下:
- 技能让 AI 从"会聊"变"会干"
- 开发技能需要 JS 基础
- 从简单开始,逐步迭代
- 错误处理和文档很重要
下一篇咱们聊聊《OpenClaw 高级玩法:多会话管理与子代理 orchestration》,敬请期待!🦞