OpenClaw 教程
AI助手 · 自动化工作流 · 效率提升

技能开发实战:从零打造你的 OpenClaw Skill

什么是 OpenClaw Skill?

OpenClaw Skill(技能)是扩展 AI 能力的核心机制。每个技能是一个独立模块,包含:

  • SKILL.md – 技能说明文档,告诉 AI 如何使用这个技能
  • scripts/ – 可执行脚本,实现具体功能
  • config/ – 配置文件(可选)
  • data/ – 数据存储(可选)

通过技能系统,OpenClaw 可以无限扩展:邮件管理、日历同步、文件操作、网络搜索、浏览器控制……一切皆可技能化。

技能目录结构

标准技能目录结构:

skills/
└── my-skill/
    ├── SKILL.md          # 必需:技能说明
    ├── scripts/
    │   ├── main.py       # 主脚本
    │   └── utils.py      # 辅助脚本
    ├── config/
    │   └── settings.json # 配置文件
    └── data/
        └── cache.json    # 数据缓存

SKILL.md 编写指南

SKILL.md 是技能的核心,告诉 AI 这个技能做什么、怎么用。标准格式:

# 技能名称

## 简介
一句话描述这个技能的作用。

## 触发条件
什么情况下应该使用这个技能?
- 关键词匹配
- 用户意图识别
- 特定场景

## 使用方法
详细的调用步骤和参数说明。

## 示例
提供具体使用示例,帮助 AI 理解。

## 注意事项
使用限制、安全考虑等。

实际示例:天气查询技能

# 天气查询技能

## 简介
查询指定城市的实时天气和未来预报。

## 触发条件
- 用户询问天气相关问题时
- 用户提到"天气"、"气温"、"下雨"等关键词
- 用户计划外出需要了解天气时

## 使用方法
调用脚本:
python scripts/weather.py --city "城市名" --days 预报天数

参数说明:
- city: 城市名称,支持中文
- days: 预报天数,1-7,默认 1

## 示例
用户:"北京今天天气怎么样?"
执行:python scripts/weather.py --city "北京" --days 1

用户:"上海未来三天天气"
执行:python scripts/weather.py --city "上海" --days 3

## 注意事项
- 需要配置 API Key(OpenWeatherMap)
- 支持国内城市中文查询
- 请求频率限制:每分钟 60 次

脚本开发实践

技能脚本推荐使用 Python,易于编写和维护。示例:待办事项管理技能

# scripts/todo.py
import json
import argparse
from datetime import datetime
from pathlib import Path

DATA_FILE = Path(__file__).parent.parent / "data" / "todos.json"

def load_todos():
    """加载待办列表"""
    if DATA_FILE.exists():
        return json.loads(DATA_FILE.read_text())
    return []

def save_todos(todos):
    """保存待办列表"""
    DATA_FILE.parent.mkdir(exist_ok=True)
    DATA_FILE.write_text(json.dumps(todos, ensure_ascii=False, indent=2))

def add_todo(title, priority="normal", due=None):
    """添加待办"""
    todos = load_todos()
    todo = {
        "id": len(todos) + 1,
        "title": title,
        "priority": priority,
        "due": due,
        "done": False,
        "created": datetime.now().isoformat()
    }
    todos.append(todo)
    save_todos(todos)
    print(f"已添加待办:{title}")

def list_todos(show_done=False):
    """列出待办"""
    todos = load_todos()
    for todo in todos:
        if not show_done and todo["done"]:
            continue
        status = "✓" if todo["done"] else "○"
        print(f"{status} [{todo['id']}] {todo['title']}")

def complete_todo(todo_id):
    """完成待办"""
    todos = load_todos()
    for todo in todos:
        if todo["id"] == todo_id:
            todo["done"] = True
            save_todos(todos)
            print(f"已完成:{todo['title']}")
            return
    print("未找到该待办")

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("action", choices=["add", "list", "done"])
    parser.add_argument("--title", help="待办标题")
    parser.add_argument("--priority", default="normal")
    parser.add_argument("--due", help="截止日期")
    parser.add_argument("--id", type=int, help="待办ID")
    args = parser.parse_args()

    if args.action == "add":
        add_todo(args.title, args.priority, args.due)
    elif args.action == "list":
        list_todos()
    elif args.action == "done":
        complete_todo(args.id)

技能配置管理

技能可以有自己的配置文件,存储 API Key、偏好设置等:

// config/settings.json
{
  "api_key": "your_api_key_here",
  "default_city": "北京",
  "units": "metric",
  "language": "zh-CN"
}

脚本中读取配置:

import json
from pathlib import Path

config_file = Path(__file__).parent.parent / "config" / "settings.json"
config = json.loads(config_file.read_text())

api_key = config["api_key"]
default_city = config["default_city"]

技能注册到 OpenClaw

开发完成后,在 OpenClaw 配置中注册技能:

// config.json
{
  "skills": {
    "directories": [
      "~/.openclaw/skills",
      "./skills"
    ],
    "enabled": [
      "weather",
      "todo",
      "email",
      "calendar"
    ]
  }
}

技能调试技巧

  1. 独立测试 – 先单独运行脚本,确保功能正常
  2. 日志记录 – 添加详细日志,方便排查问题
  3. 错误处理 – 捕获异常,返回友好错误信息
  4. 参数验证 – 检查参数合法性,避免异常

日志示例

import logging

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s',
    filename='skill.log'
)

logger = logging.getLogger(__name__)

try:
    result = api_call()
    logger.info(f"API 调用成功:{result}")
except Exception as e:
    logger.error(f"API 调用失败:{e}")
    print(f"操作失败:{e}")

技能最佳实践

  • 单一职责 – 每个技能专注一个领域
  • 清晰文档 – SKILL.md 写清楚使用方法
  • 安全优先 – 敏感操作需要用户确认
  • 优雅降级 – API 不可用时提供备选方案
  • 性能优化 – 缓存数据,减少 API 调用

总结

技能系统是 OpenClaw 的灵魂。通过编写 SKILL.md 和脚本,你可以无限扩展 AI 能力。从简单的待办管理到复杂的系统集成,一切皆可技能化。

下一步:选择一个你需要的场景,动手开发第一个技能吧!

赞(0)
未经允许不得转载:OpenClaw 中文博客 » 技能开发实战:从零打造你的 OpenClaw Skill

评论 抢沙发

登录

找回密码

注册