乐于分享
好东西不私藏

OpenClaw 实战连载5:手把手教你写第一个技能,30 分钟搞定

OpenClaw 实战连载5:手把手教你写第一个技能,30 分钟搞定

上篇说了日报自动生成(从 20 分钟到 2 分钟),有读者问:"这些技能能不能自己写?" -- 这篇就是答案。


😫 技能开发的门槛,其实没你想的高

前几篇连载发出去后,陆续有人问:

"AI 新闻推送很实用,但我们行业的垂直资讯搜不到" "日报自动生成不错,可我们用的是内部系统,Git+ 日历+ 邮件那套用不了" "能不能让 AI 帮我查公司数据库?"

答案只有一个:自己写技能。

听起来很难?其实一个技能最少只需要 3 个文件,不用后端、不用数据库、不用复杂的构建流程。

这篇你将学会:

  • ✅ 技能的本质是什么(AI 的"插件系统")
  • ✅ 从零创建一个天气查询技能(完整代码)
  • ✅ 如何调用外部 API(无需后端)
  • ✅ 测试和调试技巧(避坑指南)
  • ✅ 3 个真实案例参考(直接套用)

成果:从 0 到 1,30 分钟上线第一个技能

💡 为什么你需要自己写技能?

现有技能再丰富,也不可能覆盖所有场景。以下情况,你需要自己动手:

场景 现有技能 你的需求 解决方案
企业内部系统 ❌ 不支持 查询内部 CRM 自写技能调用 API
特定数据源 ❌ 没有 读取公司数据库 自写脚本 + 技能
个性化流程 ❌ 太通用 特定审批流程 定制工作流技能
小众服务 ❌ 未覆盖 查询本地公交 自写技能集成

这篇你将学会:

  • ✅ 技能的本质是什么(就 1 个文件)
  • ✅ 从零创建一个天气查询技能(完整代码)
  • ✅ 如何调用外部 API(无需后端)
  • ✅ 测试和调试技巧(避坑指南)
  • ✅ 3 个真实案例参考(直接套用)

成果:从 0 到 1,30 分钟上线第一个技能(只需 1 个文件)


🎯 技能的本质:AI 的"插件系统"

把 OpenClaw 想象成一部智能手机:

概念 手机 OpenClaw
操作系统 iOS/Android OpenClaw 核心
原生功能 电话、短信 基础对话、文件处理
应用商店 App Store ClawHub/SkillHub
App 微信、支付宝 天气技能、新闻技能
App 开发文档 Apple Developer SKILL.md

技能的本质: 告诉 AI 在什么场景下、用什么工具、完成什么任务。

📦 技能的最小结构

一个技能最少只需要 1 个文件:

my-weather-skill/
└── SKILL.md          # 技能说明(AI 什么时候用它)

就这么简单。 不需要后端、不需要数据库、不需要 package.json、不需要 README。

可选文件(通常不需要):

  • _meta.json - ClawHub 自动生成的元数据
  • .clawhub/ - ClawHub 版本管理目录

🔄 技能工作流

执行流程:

  1. 用户说:"今天北京天气怎么样?"
  2. AI 读取所有已安装技能的 SKILL.md
  3. 发现 my-weather-skill 的 description 匹配"天气查询"
  4. AI 按照 SKILL.md 的 instructions 执行
  5. 返回结果给用户

关键点: AI 不是"运行"技能,而是"阅读"技能说明后自主决定如何行动。


🛠️ 实战:创建你的第一个天气技能

第 1 步:创建技能目录

cd ~/.openclaw/workspace/skills/
mkdir my-weather-skill
cd my-weather-skill

第 2 步:编写 SKILL.md(核心)

SKILL.md 是技能的灵魂,它告诉 AI:

  • 什么时候用这个技能(description)
  • 具体怎么操作(instructions)
  • 需要注意什么(constraints)

完整示例(复制到 SKILL.md):

---
name: my-weather-skill
description: 查询实时天气、气温、降水、风力等气象信息。
---

# 天气查询技能

## 触发场景

当用户询问天气、气温、降水、风力等气象信息时使用此技能。

## 工具调用

使用 WebSearch MCP 查询实时天气:

    mcporter call WebSearch.bailian_web_search query="北京 天气 气温" count=3

## 输出格式

返回结构化信息:
- 当前温度
- 天气状况(晴/雨/多云)
- 风力风向
- 空气质量(如有)
- 未来 24 小时趋势

## 注意事项

1. 优先使用国内数据源(中国天气网、墨迹天气)
2. 温度单位使用摄氏度(°C)
3. 风力使用级数(如"3-4 级")

关键点:

  • name 必须是英文(技能唯一标识)
  • description 决定 AI 何时调用这个技能(要覆盖用户可能的问法)

关键点:

  • description 要覆盖用户可能的问法(天气、气温、下雨...)
  • instructions 要具体到可执行的命令
  • 提供调用示例,AI 更容易理解

第 3 步:测试技能

# 验证技能被识别
ls ~/.openclaw/workspace/skills/my-weather-skill/

# 或者直接问 AI
"今天北京天气怎么样?"

预期行为: AI 应该调用 WebSearch MCP 查询天气并返回结果。


🔧 进阶:调用真实 API

上面的技能用的是搜索 API,但如果你想获取更精确的数据,可以调用专业天气 API。

方案 A:wttr.in(推荐,无需 API Key)

零门槛,复制即用:

curl -s "wttr.in/北京?format=3"
# 输出:beijing: ☁️ +21°C

更新 SKILL.md:

---
name: wttr-weather
description: 使用 wttr.in 查询实时天气,无需 API Key。
---

## 工具调用

使用 wttr.in 查询实时天气(无需 API Key):

    curl -s "wttr.in/北京?format=3"

更多格式:

命令 说明 输出示例
wttr.in/北京?0 当前天气 详细预报
wttr.in/北京?1 今天预报 6 小时分段
wttr.in/北京?format=3 简洁一行 beijing: ☁️ +21°C
wttr.in/北京.png PNG 图片 天气图片

优势: 无需注册、无需 API Key、支持全球城市。


方案 B:和风天气(专业版,需 API Key)

适合需要结构化数据的场景:

  1. 访问 https://dev.qweather.com/[1] 注册免费账号
  2. 获取 API Key
  3. 调用 API 获取 JSON 数据
curl -s "https://devapi.qweather.com/v7/weather/now?location=101010100&key=YOUR_API_KEY"

优势: 数据更详细、支持更多气象参数。


📊 技能复杂度对比

技能类型 文件数 代码行数 开发时间 示例
⭐ 搜索型 2-3 0-50 10 分钟 天气查询、新闻搜索
⭐⭐ 脚本型 3-5 50-200 30 分钟 文件处理、数据转换
⭐⭐⭐ API 集成型 4-6 200-500 1-2 小时 企业微信、飞书集成
⭐⭐⭐⭐ 复杂工作流 6+ 500+ 半天 + 多步骤自动化

你的第一个技能建议从"搜索型"开始,零代码也能搞定。


🐛 常见坑与解决方案

坑 1:AI 不识别我的技能

症状: 问天气,AI 不用你的技能。

排查:

# 1. 检查 SKILL.md 是否存在
ls ~/.openclaw/workspace/skills/my-weather-skill/

# 2. 检查 description 是否匹配
grep -i "天气" SKILL.md

# 3. 重启网关(让 AI 重新加载技能)
openclaw gateway restart

解决: description 要覆盖用户可能的问法。

示例:

---
name: my-weather-skill
description: 查询天气、气温、降水、风力、下雨、晴天、雾霾等气象信息。
---

坑 2:命令执行失败

症状: AI 调用了技能,但报错。

排查:

# 手动执行 SKILL.md 中的命令
mcporter call WebSearch.bailian_web_search query="北京 天气" count=3

解决: 确保命令在终端能独立运行。

常见错误:

错误 原因 解决
command not found 命令不存在 检查工具是否安装
permission denied 无执行权限 chmod +x script.js
API key not found 环境变量缺失 export API_KEY=xxx

坑 3:技能冲突

症状: 多个技能都能处理同一请求,AI 随机选择。

解决:

  1. 细化触发条件 - 让每个技能的场景更具体
  2. 优先级说明 - 在 SKILL.md 中说明优先级
  3. 合并技能 - 功能相近的技能合并为一个

示例:

---
name: real-time-weather
description: 查询实时天气、当前气温。历史天气查询请使用 history-weather 技能。
---

坑 4:输出格式混乱

症状: AI 返回的信息格式不统一。

解决: 在 SKILL.md 中明确输出模板。

示例:

---
name: formatted-weather
description: 查询天气并返回结构化格式。
---

## 输出模板

请严格按照以下格式返回:

🌡️ {城市} 当前天气
━━━━━━━━━━━━━━
温度:{temp}°C
体感:{feelsLike}°C
天气:{text}
风力:{windDir} {windScale}级
湿度:{humidity}%
━━━━━━━━━━━━━━
{更新时间}

🎓 下一步:从模仿开始

不知道写什么技能?看看别人写了什么:

# 查看已安装技能
ls ~/.openclaw/workspace/skills/

# 查看技能源码
cat ~/.openclaw/workspace/skills/weather/SKILL.md

推荐模仿对象:

技能 难度 学习点
weather 基础搜索型技能
github ⭐⭐ CLI 工具集成
notion ⭐⭐⭐ API 认证与分页
wecom-msg ⭐⭐⭐⭐ 企业系统集成

💼 3 个真实案例参考

案例 1:Git 提交统计

需求: 每日/每周代码贡献统计

SKILL.md 核心:

---
name: git-stats
description: 查询 Git 提交记录、commit 统计、代码贡献量。
---

## 触发场景
当用户询问代码提交、commit 统计、贡献量时使用此技能。

## 工具调用
执行 git 统计命令:

    cd ~/projects && git log --since="24 hours ago" --oneline --author="$(git config user.name)"

效果: 自动生成日报所需的代码贡献数据,无需手动回忆。


案例 2:服务器健康检查

需求: 快速检查服务器状态

SKILL.md 核心:

---
name: server-health
description: 检查服务器健康状态,包括 CPU、内存、磁盘使用情况。
---

## 触发场景
当用户询问服务器状态、CPU、内存、磁盘时使用此技能。

## 工具调用
SSH 执行监控命令:

    ssh user@your-server "uptime && free -h && df -h /"

效果: 一句话获取服务器健康状态,无需登录终端。


案例 3:网站可用性监控

需求: 检查网站是否能正常访问

SKILL.md 核心:

---
name: website-monitor
description: 检查网站可用性,返回 HTTP 状态码,判断网站是否宕机。
---

## 触发场景
当用户询问网站状态、能否访问、是否宕机时使用此技能。

## 工具调用
使用 curl 检查网站响应:

    curl -s -o /dev/null -w "%{http_code}" https://example.com

效果: 快速返回 HTTP 状态码(200 正常,500 错误,超时则网站不可用)。


📝 总结

技能开发的核心:

好技能 = 清晰的触发条件 + 可执行的指令 + 边界处理

30 分钟挑战:

  1. 创建 my-weather-skill 目录
  2. 编写 SKILL.md(参考本文模板)
  3. 测试:"今天北京天气怎么样?"

技能模板下载:

# 复制模板
cp -r ~/.openclaw/workspace/skills/weather/ \
  ~/.openclaw/workspace/skills/my-first-skill/

下篇预告:

"单个技能很强大,但多个技能协作能产生化学反应。下篇说说怎么让 AI 同时调用多个技能,完成复杂任务——比如'准备明天会议'这一个指令,自动完成资料收集、邮件通知、日程安排三件事。"


互动话题:

你写过最实用的技能是什么?或者有什么想自动化但不知道怎么写的事?

评论区聊聊,我帮你出主意。👇


关注我,不错过后续实战连载。