【技能开发】OpenClaw 技能开发入门:让你的 AI 学会新本事

【技能开发】OpenClaw 技能开发入门:让你的 AI 学会新本事

目录

前言:从"会聊天"到"会做事"

一、什么是 OpenClaw 技能?

1.1 概念解析

1.2 技能的工作原理

1.3 内置技能 vs 自定义技能

二、技能开发前置知识

2.1 你需要会什么?

2.2 开发环境准备

三、第一个技能:Hello World

3.1 技能目录结构

3.2 编写 SKILL.md

3.3 编写 index.js

3.4 注册技能

3.5 测试技能

四、实战:开发一个天气查询技能

4.1 选择天气 API

4.2 创建技能目录

4.3 编写 SKILL.md

4.4 编写 index.js

4.5 测试效果

五、技能开发最佳实践

5.1 错误处理要完善

5.2 返回格式要统一

5.3 技能描述要清晰

5.4 敏感操作要谨慎

六、技能发布与分享

6.1 本地技能

6.2 全局技能

6.3 分享技能

七、进阶:调用外部 API

结语


前言:从"会聊天"到"会做事"

哈喽各位,我是攀哥!前两篇咱们搞定了部署安装和人格定制,有朋友问:"攀哥,我的 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 开发环境准备

确保你已经:

  1. 安装好 Node.js(v20+)
  2. 有一个代码编辑器(VS Code 推荐)
  3. 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

结语

好了,今天的技能开发入门就到这里!攀哥总结一下:

  1. 技能让 AI 从"会聊"变"会干"
  2. 开发技能需要 JS 基础
  3. 从简单开始,逐步迭代
  4. 错误处理和文档很重要

下一篇咱们聊聊《OpenClaw 高级玩法:多会话管理与子代理 orchestration》,敬请期待!🦞

Read more

机器人策略开发3步走:从菜鸟到高手的避坑实战手册

你是不是曾经面对一堆机器人代码手足无措?想开发自己的策略却不知从何下手?别担心,这篇文章就是为你量身定制的实用指南!我们将用最简单的语言,带你快速掌握LeRobot框架下机器人策略开发的核心技巧。 【免费下载链接】lerobot🤗 LeRobot: State-of-the-art Machine Learning for Real-World Robotics in Pytorch 项目地址: https://gitcode.com/GitHub_Trending/le/lerobot 为什么你的机器人策略总是"翻车"? 在开始之前,我们先来盘点几个典型的"翻车现场": * 场景一:好不容易写好的策略,训练时却报各种莫名错误 * 场景二:模型效果时好时坏,完全看运气 * 场景三:好不容易训练完成,部署到真实机器人上却完全失效 这些问题其实都有共同的根源:对框架理解不够深入。今天,我们就用3个步骤,帮你彻底解决这些问题! 第一步:理解核心概念

MHT-MD761 与云影无人机的集成实操要点,硬件安装与接口对接

MHT-MD761 与云影无人机的集成实操要点,硬件安装与接口对接

MHT-MD761 与无人机的集成核心分为硬件安装和接口对接两部分,需严格遵循产品的安装规范和接口定义,才能保障惯导器件发挥最优性能,避免因安装偏差、接线错误导致的导航精度下降或设备故障,以下为具体的实操要点,均基于 MHT-MD761 官方安装规范和云影无人机的集成实际。 1. 硬件安装要点 (1)安装位置与坐标系匹配 MHT-MD761 的产品坐标系采用 “右 - 前 - 上” 坐标系,安装时需将器件的 X 轴与无人机的前进方向保持一致,Z 轴朝下,同时确保器件与无人机旋转中心的测量误差≤5cm,否则会因杆臂误差导致导航精度下降;安装位置应选择无人机机身振动较小、远离强磁部件的区域,如飞控模块附近,避免机身发动机、电机等强振动部件的振动传递,同时远离电池、金属支架等强磁部件,防止磁场干扰磁力计的测量精度。 (2)机械安装要求 安装面需保证平面度≤0.01mm、垂直度≤0.02mm、表面粗糙度≤0.8μm,通过

吃透 AM32 无人机电调:从源码架构到工作原理的全方位解析(附实践指南)(上)

开篇:为什么要深度剖析 AM32 电调? 作为多旋翼无人机的 “动力心脏”,电调(电子调速器)的性能直接决定了无人机的飞行稳定性、响应速度和续航能力。而 AM32 系列电调凭借开源性、高性价比、适配性强三大优势,成为了开源无人机社区的热门选择 —— 从入门级的 2204 电机到专业级的 2306 电机,从 3S 锂电池到 6S 高压电池,AM32 都能稳定驱动。 但很多开发者和爱好者在接触 AM32 源码时,常会陷入 “看得懂代码,看不懂逻辑” 的困境:为什么 FOC 算法要做坐标变换?DShot 协议的脉冲怎么解析?保护机制是如何实时触发的? 这篇博客将从硬件基础→源码架构→模块解析→工作原理→实践操作五个维度,逐行拆解 AM32 电调固件源码,帮你彻底搞懂

Neo4j插件apoc安装及配置(实战经历,一步到位)

Neo4j插件apoc安装及配置(实战经历,一步到位)

目录 apoc插件安装 安装验证 出现的问题 Neo4j版本:Neo4j 5.x apoc版本:同上对应 Neo4j 4.x版本同样适用 apoc插件安装 1.首先查看Neo4j版本(在Neo4j Desktop或命令行中执行): CALL dbms.components() YIELD name, versions RETURN versions;  结果如下: 2.然后去GitHub上下载这个插件 * 访问 APOC GitHub Releases------------ https://github.com/neo4j/apoc/releases/ * 下载与Neo4j版本一致的apoc-x.x.x.x-all.jar文件(例如Neo4j 5.12.0 → APOC 5.