自定义技能开发 扩展 OpenClaw 能力
专栏:OpenClaw_AI 应用实战 第 18 篇
字数:约 9000 字
阅读时间:约 22 分钟
难度:⭐⭐⭐⭐ 中高级
更新时间:2026-04-01
写在前面
OpenClaw 内置功能不够用?
❌ 受限情况: 用户:我想让 AI 帮我... AI: 抱歉,这个功能我不支持 (因为没有对应的技能)✅ 自定义技能: 用户:我想让 AI 帮我... AI: 好的,我来处理 (因为开发了自定义技能)这篇文章教你:如何开发自定义技能,扩展 OpenClaw 能力。
一、技能基础
1.1 什么是技能
**技能(Skill)**是 OpenClaw 中教 AI 如何使用工具的文档。
结构:
skill-name/ ├── SKILL.md # 技能说明(必需) ├── scripts/ # 脚本文件(可选) ├── templates/ # 模板文件(可选) └── assets/ # 资源文件(可选)1.2 技能位置
| 位置 | 路径 | 优先级 |
|---|---|---|
| 工作区技能 | ~/.openclaw/workspace/skills/ | 最高 |
| 本地技能 | ~/.openclaw/skills/ | 中 |
| 内置技能 | OpenClaw 安装包内 | 最低 |
1.3 技能加载
OpenClaw 启动 ↓ 扫描技能目录 ↓ 读取 SKILL.md ↓ 检查依赖(环境、工具) ↓ 加载到系统提示词 ↓ AI 可以使用技能二、技能开发流程
2.1 创建技能目录
# 进入工作区cd~/.openclaw/workspace/skills/# 创建技能目录mkdir-pmy-custom-skill# 进入目录cdmy-custom-skill2.2 编写 SKILL.md
--- name: my-custom-skill description: 我的自定义技能 --- # 技能说明 ## 功能描述 这个技能用于... ## 使用场景 - 场景 1 - 场景 2 ## 使用方法 当用户...时,执行以下步骤: 1. 步骤 1 2. 步骤 2 3. 步骤 3 ## 输出格式 ... ## 依赖 - Python 3.8+ - 工具:xxx2.3 示例:天气查询技能
--- name: weather-query description: 查询任意城市的天气预报 metadata: {"openclaw": {"requires": {"env": ["WEATHER_API_KEY"]}}} --- # 天气查询技能 ## 功能 查询全球任意城市的天气预报,支持当前天气和未来 7 天预报。 ## 使用场景 - 用户询问天气 - 出行前查询天气 - 对比多个城市天气 ## 使用方法 当用户询问天气时,执行以下步骤: 1. **提取城市名** - 从用户问题中识别城市名称 - 如果未指定,使用用户当前位置 2. **调用天气 API** ```bash curl "https://api.weather.com/v1/current?city={city}&key={WEATHER_API_KEY}"解析响应
- 温度
- 天气状况
- 湿度
- 风速
格式化输出
🌤️ [城市名] 天气预报 - 温度:XX°C - 天气:XX - 湿度:XX% - 风速:XX m/s 更新时间:XXXX-XX-XX
输出格式
使用 emoji 和列表,清晰展示天气信息。
依赖
- WEATHER_API_KEY 环境变量
- curl 命令
示例
用户:北京天气怎么样?
AI:
🌤️ 北京天气预报
- 温度:25°C
- 天气:晴
- 湿度:60%
- 风速:3 m/s
更新时间:2026-04-01 10:00
“”"
### 2.4 添加脚本 ```python # scripts/query_weather.py import requests import os import sys def query_weather(city): """ 查询天气 Args: city: 城市名 """ api_key = os.environ.get("WEATHER_API_KEY") if not api_key: return {"error": "WEATHER_API_KEY 未配置"} url = "https://api.weather.com/v1/current" params = { "city": city, "key": api_key, "lang": "zh" } try: response = requests.get(url, params=params, timeout=10) response.raise_for_status() data = response.json() return { "city": data["city"], "temperature": data["temperature"], "condition": data["condition"], "humidity": data["humidity"], "wind_speed": data["wind_speed"], "update_time": data["update_time"] } except Exception as e: return {"error": str(e)} if __name__ == "__main__": if len(sys.argv) < 2: print("用法:python query_weather.py <城市名>") sys.exit(1) city = sys.argv[1] result = query_weather(city) if "error" in result: print(f"❌ 错误:{result['error']}") else: print(f"🌤️ {result['city']}天气预报") print(f"- 温度:{result['temperature']}°C") print(f"- 天气:{result['condition']}") print(f"- 湿度:{result['humidity']}%") print(f"- 风速:{result['wind_speed']} m/s")2.5 更新 SKILL.md 引用脚本
--- name: weather-query description: 查询任意城市的天气预报 metadata: {"openclaw": {"requires": {"bins": ["python"], "env": ["WEATHER_API_KEY"]}}} --- # 天气查询技能 ## 功能 查询全球任意城市的天气预报。 ## 使用方法 当用户询问天气时: 1. 提取城市名 2. 执行脚本: ```bash python {baseDir}/scripts/query_weather.py {city}- 解析输出,格式化展示
输出格式
🌤️ [城市名] 天气预报 - 温度:XX°C - 天气:XX - 湿度:XX% - 风速:XX m/s依赖
- WEATHER_API_KEY 环境变量
- Python 3.8+
- requests 库
“”"
--- ## 三、高级技能开发 ### 3.1 多步骤技能 ```markdown --- name:>步骤 2:数据概览python{baseDir}/scripts/data_overview.py
步骤 3:统计分析
python{baseDir}/scripts/statistical_analysis.py
步骤 4:生成可视化
python{baseDir}/scripts/generate_charts.py
步骤 5:生成报告
python{baseDir}/scripts/generate_report.py
输出格式
📊 数据分析报告 ## 数据概览 - 行数:XXX - 列数:XXX ## 统计信息 ... ## 可视化图表 [图表链接] ## 洞察发现 1. ... 2. ...
依赖
- Python 3.8+
- pandas, matplotlib, seaborn
“”"
### 3.2 条件技能 ```markdown --- name: smart-reminder description: 智能提醒技能 metadata: {"openclaw": {"requires": {"bins": ["python"]}}} --- # 智能提醒技能 ## 功能 根据上下文智能设置提醒。 ## 使用方法 当用户提到需要提醒时: ### 判断场景 1. **如果是会议提醒** - 提取时间、地点、参会人员 - 调用日历 API - 设置提前提醒 2. **如果是任务提醒** - 提取任务内容、截止时间 - 添加到待办列表 - 设置优先级提醒 3. **如果是生日/纪念日** - 提取日期、事件 - 添加到日历 - 设置每年重复 ### 执行脚本 ```python python {baseDir}/scripts/create_reminder.py \ --type {reminder_type} \ --time {time} \ --content {content}
输出格式
✅ 提醒已设置 类型:{type} 时间:{time} 内容:{content} 提醒方式:{notification_method}
依赖
- Python 3.8+
- 系统通知权限
“”"
### 3.3 组合技能 ```markdown --- name: content-publishing description: 内容发布技能 metadata: {"openclaw": {"requires": {"bins": ["python"], "env": ["CMS_API_KEY"]}}} --- # 内容发布技能 ## 功能 一键发布内容到多个平台。 ## 使用方法 当用户要发布内容时: ### 步骤 1:内容格式化 调用 `format-content` 技能 ### 步骤 2:SEO 优化 调用 `seo-optimizer` 技能 ### 步骤 3:生成配图 调用 `image-generator` 技能 ### 步骤 4:发布到平台 ```python python {baseDir}/scripts/publish.py \ --content {content} \ --platforms {platforms} \ --schedule {schedule}
步骤 5:确认发布
返回发布结果和链接
输出格式
✅ 内容已发布 平台: - 微信公众号:[链接] - 知乎:[链接] - 掘金:[链接] 发布时间:{time} 预计阅读:{read_time}
依赖技能
- format-content
- seo-optimizer
- image-generator
依赖
- Python 3.8+
- CMS API Key
“”"
--- ## 四、技能调试 ### 4.1 测试技能 ```bash # 1. 检查技能语法 openclaw skills check my-custom-skill/ # 2. 测试技能执行 openclaw skills test my-custom-skill --input "测试输入" # 3. 查看技能日志 openclaw skills logs my-custom-skill
4.2 常见问题
问题 原因 解决 技能不生效 SKILL.md 格式错误 检查 YAML frontmatter 依赖缺失 环境变量未设置 配置环境变量 脚本失败 路径错误 使用{baseDir}变量 权限问题 文件无执行权限 chmod +x script.py
4.3 调试技巧
# scripts/debug_skill.pyimportlogging# 配置日志logging.basicConfig(level=logging.DEBUG,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',filename='skill_debug.log')logger=logging.getLogger(__name__)defmain():logger.info("技能执行开始")try:# 技能逻辑result=do_something()logger.info(f"技能执行成功:{result}")exceptExceptionase:logger.error(f"技能执行失败:{e}",exc_info=True)raiseif__name__=="__main__":main()
五、技能发布
5.1 发布到 ClawHub
# 1. 注册 ClawHub 账号# https://clawhub.com# 2. 初始化技能包cdmy-custom-skill clawhub init# 3. 填写元数据# clawhub.yaml:# name: my-custom-skill# version: 1.0.0# description: 我的自定义技能# author: Your Name# 4. 发布clawhub publish# 5. 查看发布状态clawhub status
5.2 技能版本管理
# 查看版本clawhub versions my-custom-skill# 发布新版本# 更新 clawhub.yaml 中的 versionclawhub publish--version1.1.0# 回滚版本clawhub rollback my-custom-skill--version1.0.0
5.3 技能分享
# 分享技能 ## 安装 ```bash clawhub install my-custom-skill
配置
exportMY_SKILL_API_KEY=xxx
使用
用户:使用 my-custom-skill 做 xxx
AI: 好的,我来处理…
--- ## 六、OpenClaw 集成 ### 6.1 技能管理命令 ```bash # 列出所有技能 openclaw skills list # 启用技能 openclaw skills enable my-custom-skill # 禁用技能 openclaw skills disable my-custom-skill # 更新技能 openclaw skills update my-custom-skill # 卸载技能 openclaw skills uninstall my-custom-skill
6.2 技能配置
// ~/.openclaw/openclaw.json { skills: { entries: { "my-custom-skill": { enabled: true, env: { "MY_SKILL_API_KEY": "xxx" }, config: { "timeout": 30, "retry": 3 } } } } }
总结
核心要点
- 技能结构:SKILL.md + 脚本 + 资源
- 开发流程:创建目录→编写 SKILL.md→添加脚本→测试
- 高级技能:多步骤、条件、组合
- 调试技巧:日志、测试命令
- 发布分享:ClawHub、版本管理
- 配置管理:环境变量、技能配置
技能开发时间
复杂度 时间 示例 简单 30 分钟 天气查询 中等 2-4 小时 数据分析 复杂 1-2 天 内容发布
下一步
下一篇:[OpenClaw 部署到服务器 24 小时在线](./19-OpenClaw 部署到服务器.md)
学习如何将 OpenClaw 部署到服务器,实现 24 小时在线。
互动环节
问题 1:你想开发什么自定义技能?
问题 2:开发技能时遇到过什么困难?
问题 3:有什么技能想分享给大家?
欢迎在评论区留言!
字数:约 9000 字
阅读时间:约 22 分钟
难度:⭐⭐⭐⭐ 中高级
发布时间:2026-04-01
本文是《OpenClaw_AI 应用实战》专栏的第 18 篇,共 20 篇。
