上篇说了日报自动生成(从 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 版本管理目录
🔄 技能工作流

执行流程:
用户说:"今天北京天气怎么样?" AI 读取所有已安装技能的 SKILL.md 发现 my-weather-skill的 description 匹配"天气查询"AI 按照 SKILL.md 的 instructions 执行 返回结果给用户
关键点: 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)
适合需要结构化数据的场景:
访问 https://dev.qweather.com/[1] 注册免费账号 获取 API Key 调用 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 随机选择。
解决:
细化触发条件 - 让每个技能的场景更具体 优先级说明 - 在 SKILL.md 中说明优先级 合并技能 - 功能相近的技能合并为一个
示例:
---
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 分钟挑战:
创建 my-weather-skill目录编写 SKILL.md(参考本文模板) 测试:"今天北京天气怎么样?"
技能模板下载:
# 复制模板
cp -r ~/.openclaw/workspace/skills/weather/ \
~/.openclaw/workspace/skills/my-first-skill/
下篇预告:
"单个技能很强大,但多个技能协作能产生化学反应。下篇说说怎么让 AI 同时调用多个技能,完成复杂任务——比如'准备明天会议'这一个指令,自动完成资料收集、邮件通知、日程安排三件事。"
互动话题:
你写过最实用的技能是什么?或者有什么想自动化但不知道怎么写的事?
评论区聊聊,我帮你出主意。👇
关注我,不错过后续实战连载。
夜雨聆风