一、技能开发基础
1. 技能文件结构
一个标准的OpenClaw技能包含以下核心文件:
weather-skill/├── SKILL.md # 技能说明文档├── __init__.py # 技能初始化├── weather_api.py # API接口封装├── config.json # 配置文件├── requirements.txt # 依赖包└── README.md # 使用说明
2. 技能配置文件
{ "name": "weather-forecast", "version": "1.0.0", "description": "天气预报查询技能", "author": "开发者", "permissions": [ "network.request" ], "dependencies": [ "requests", "python-dotenv" ]}
二、天气预报技能实战
1. API接口封装
import requestsimport osfrom typing import Dict, Optionalclass WeatherAPI: def __init__(self, api_key: str): self.api_key = api_key self.base_url = "https://api.openweathermap.org/data/2.5" def get_current_weather(self, city: str) -> Dict: """获取当前天气""" endpoint = f"{self.base_url}/weather" params = { 'q': city, 'appid': self.api_key, 'units': 'metric', 'lang': 'zh_cn' } try: response = requests.get(endpoint, params=params, timeout=10) response.raise_for_status() data = response.json() return { 'city': data['name'], 'temperature': data['main']['temp'], 'description': data['weather'][0]['description'], 'humidity': data['main']['humidity'], 'wind_speed': data['wind']['speed'] } except requests.RequestException as e: return {'error': f'获取天气数据失败: {str(e)}'}
2. 技能主逻辑
from .weather_api import WeatherAPIimport osfrom dotenv import load_dotenvclass WeatherSkill: def __init__(self): load_dotenv() api_key = os.getenv('OPENWEATHER_API_KEY') if not api_key: raise ValueError("请设置OPENWEATHER_API_KEY环境变量") self.weather_api = WeatherAPI(api_key) def execute(self, command: str, **kwargs) -> str: """执行天气查询命令""" if command == "current": city = kwargs.get('city', '北京') weather_data = self.weather_api.get_current_weather(city) if 'error' in weather_data: return f"❌ {weather_data['error']}" return f"""🌤️ {weather_data['city']}当前天气:🌡️ 温度:{weather_data['temperature']}°C📝 天气:{weather_data['description']}💧 湿度:{weather_data['humidity']}%💨 风速:{weather_data['wind_speed']} m/s"""
三、技能部署步骤
1. 安装依赖
python -m venv weather_envsource weather_env/bin/activatepip install requests python-dotenv
2. 配置API密钥
创建 .env 文件:
OPENWEATHER_API_KEY=your_api_key_here
3. 集成到OpenClaw
cp -r weather-skill /usr/local/lib/node_modules/openclaw/skills/openclaw skill enable weather-forecast
四、高级功能扩展
1. 多城市天气对比
def compare_cities(self, cities: list) -> str: """对比多个城市天气""" results = [] for city in cities: weather = self.weather_api.get_current_weather(city) if 'error' not in weather: results.append(f"{city}: {weather['temperature']}°C") return " vs ".join(results)
2. 天气预警功能
def check_weather_alerts(self, city: str) -> list: """检查天气预警""" weather = self.weather_api.get_current_weather(city) alerts = [] if weather['temperature'] > 35: alerts.append("高温预警") if weather['temperature'] < 0: alerts.append("低温预警") return alerts
五、性能优化建议
🚀 异步处理:使用 asyncio 和 aiohttp 提高并发性能
📦 数据缓存:实现本地缓存减少API调用
🔄 错误重试:添加指数退避重试机制
✅ 输入验证:验证城市名称和数据格式
六、技能开发最佳实践
维度 | 核心建议 |
|---|---|
🚨 错误处理 | • 使用try-catch捕获异常• 提供友好的错误信息• 记录详细的错误日志 |
⚙️ 配置管理 | • 使用环境变量管理敏感信息• 提供配置验证功能• 支持多环境配置 |
💻 代码质量 | • 添加类型注解• 编写单元测试• 遵循PEP 8规范 |
👨💻 用户体验 | • 提供清晰的命令说明• 支持多种输入格式• 返回格式化的结果 |
总结:现在你已经掌握了OpenClaw技能开发的核心技能!从简单的天气查询到复杂的业务逻辑,你都可以通过这种方式为OpenClaw添加强大的功能。 记住:好的技能不仅要功能强大,更要易于使用和稳定可靠。
夜雨聆风