在前几篇文章中,我们学习了 OpenClaw 的远程节点连接功能。今天,让我们深入探索 OpenClaw 最强大的特性之一——定制化开发。通过创建自定义技能(Skill),你可以让 OpenClaw 完成任何你能想到的任务。
什么是 Skill?
Skill(技能)是 OpenClaw 扩展能力的核心机制。它是一个自包含的模块化包,包含:
- 专用知识(specialized knowledge):领域特定的工作流程和专业知识
- 工具集成(Tool integrations):与特定文件格式或 API 交互的指令
- 打包资源(Bundled resources):脚本、参考文档和静态资源
简单来说,Skill 就像是给 AI 配备的"专业手册",让它能够处理特定领域的复杂任务。
Skill 架构解析
一个完整的 Skill 具有以下结构:
my-skill/
├── SKILL.md # 技能定义文件(必需)
├── scripts/ # 可执行脚本(可选)
├── references/ # 参考文档(可选)
└── assets/ # 静态资源(可选)
SKILL.md 的核心组成
---
name: my-skill
description: 技能描述,说明何时触发这个技能
---
# 技能使用指南
Frontmatter(元数据):
name:技能名称description:触发条件描述(这是 AI 判断何时使用技能的关键)
Body(主体):
- 使用说明和指导
- 只有在技能被触发后才会加载
创建你的第一个 Skill
让我们创建一个简单的天气查询技能作为示例。
步骤一:初始化技能
使用 OpenClaw 提供的初始化脚本:
scripts/init_skill.py my-weather-skill --path ./skills
这会创建一个包含以下文件的技能目录:
- SKILL.md(模板)
- scripts/(可选)
- references/(可选)
- assets/(可选)
步骤二:编写 SKILL.md
---
name: weather-query
description: 查询天气信息和天气预报。当用户询问特定城市的天气、温度、降雨概率或出行建议时触发此技能。支持国内外城市查询,提供实时天气数据和未来 7 天预报。
---
# Weather Query Skill
## Quick Start
使用内置的天气功能:
```bash
openclaw weather --city 北京
Supported Features
- 实时天气查询
- 7 天天气预报
- 空气质量指数
- 出行建议生成
### 步骤三:添加脚本资源(可选)
如果你的技能需要执行确定性操作,可以添加脚本:
```python
# scripts/get_weather.py
import requests
def get_weather(city):
# 实现天气查询逻辑
pass
步骤四:打包技能
完成开发后,打包技能以便分发:
scripts/package_skill.py ./skills/my-weather-skill
这会生成一个 .skill 文件,本质上是一个包含所有资源的 ZIP 包。
Skill 设计最佳实践
1. 保持简洁
上下文窗口是公共资源。技能应该简洁,只包含 AI 真正需要的信息。
建议:
- 优先使用简洁示例而非冗长解释
- 避免重复 AI 已经知道的内容
- 将详细文档放在 references/ 目录中
2. 设置适当的自由度
根据任务的稳定性和变化程度选择不同的指导方式:
| 自由度 | 适用场景 | 示例 |
|---|---|---|
| 高(文本指令) | 多种方法都有效、需要上下文判断 | “分析这段代码的风格” |
| 中(伪代码/脚本) | 存在推荐模式、允许一定变化 | “使用此模板生成报告” |
| 低(具体脚本) | 操作脆弱、必须精确执行 | “旋转这个 PDF 90度” |
3. 利用渐进式披露
采用三层加载机制管理上下文:
- 元数据(name + description):始终在上下文 (~100 字)
- SKILL.md 主体:技能触发时加载 (<5k 字)
- 打包资源:按需加载(无限制)
4. 参考资料分离
将详细文档移出 SKILL.md,放入 references/ 目录:
my-skill/
├── SKILL.md
└── references/
├── api-docs.md # API 详细文档
├── examples.md # 使用示例
└── schema.md # 数据模式
高级技能开发
调用外部 API
在技能脚本中调用外部服务:
# scripts/call_api.py
import requests
def query_external_service(endpoint, params):
response = requests.get(
f"https://api.example.com/{endpoint}",
params=params,
headers={"Authorization": "Bearer YOUR_KEY"}
)
return response.json()
处理文件上传
处理用户上传的文件:
# scripts/process_file.py
import os
def process_uploaded_file(file_path, operation):
# 根据操作类型处理文件
if operation == "compress":
return compress_file(file_path)
elif operation == "convert":
return convert_file(file_path)
集成机器学习模型
调用本地或云端 ML 服务:
# scripts/analyze_image.py
from PIL import Image
import torch
def analyze_image(image_path, model):
img = Image.open(image_path)
results = model(img)
return format_results(results)
Skill 分发与共享
发布到 ClawHub
使用 ClawHub CLI 发布你的技能:
clawhub publish ./skills/my-custom-skill
其他用户可以安装:
clawhub install my-custom-skill
版本管理
在技能中记录版本信息:
## Changelog
- v1.0.0 (2026-03-01): 初始版本
- v1.1.0 (2026-03-05): 添加图片处理功能
实际案例:创建一个笔记管理技能
让我们完整实现一个笔记管理技能:
目录结构
notes-manager/
├── SKILL.md
├── scripts/
│ ├── create_note.py
│ ├── list_notes.py
│ └── search_notes.py
└── references/
└── format.md
SKILL.md
---
name: notes-manager
description: 管理个人笔记系统。支持创建、搜索、标签分类笔记。当用户需要记录想法、管理知识库或搜索笔记内容时触发。
---
# Notes Manager Skill
## Quick Start
创建新笔记:
```bash
openclaw notes create --title "我的笔记" --content "笔记内容"
搜索笔记:
openclaw notes search --query "关键词"
Commands
create- 创建新笔记list- 列出所有笔记search- 全文搜索tag- 为笔记添加标签
### 核心脚本
```python
# scripts/create_note.py
import json
from datetime import datetime
from pathlib import Path
NOTES_DIR = Path("./notes")
def create_note(title, content, tags=None):
timestamp = datetime.now().isoformat()
note_id = hash(f"{title}{timestamp}") % 100000
note = {
"id": note_id,
"title": title,
"content": content,
"tags": tags or [],
"created": timestamp
}
NOTES_DIR.mkdir(exist_ok=True)
with open(NOTES_DIR / f"{note_id}.json", "w") as f:
json.dump(note, f, ensure_ascii=False, indent=2)
return f"笔记创建成功!ID: {note_id}"
调试与测试
本地测试技能
在发布前进行充分测试:
# 测试技能加载
openclaw skills list
# 测试技能触发
openclaw test --skill my-skill --input "测试输入"
常见问题排查
- 技能不触发:检查 description 是否准确描述了触发场景
- 脚本执行失败:检查脚本语法和依赖是否完整
- 资源找不到:确认文件路径是否正确
扩展阅读
总结
通过本文,你应该已经掌握了:
- Skill 的基本概念和架构
- 如何创建自定义 Skill
- Skill 设计的最佳实践
- 技能的分发和共享方式
定制化开发是 OpenClaw 最强大的特性。发挥你的想象力,创建独特的技能来解决你的具体需求!
下一篇文章我们将介绍"性能优化",教你如何优化 OpenClaw 的运行效率。敬请期待!
如果你对本文有任何问题,欢迎在评论区留言讨论。也欢迎关注我们,获取更多 OpenClaw 教程。