OpenClaw插件开发入门:为Qwen3-32B镜像编写天气查询技能
OpenClaw插件开发入门:为Qwen3-32B镜像编写天气查询技能
1. 为什么需要自定义技能?
去年冬天,我经常需要同时查看多个城市的天气来规划差旅行程。每次手动打开天气网站、输入城市名、对比数据的过程让我不胜其烦。直到我发现OpenClaw可以通过自定义技能实现自动化查询,才彻底解决了这个痛点。
开发自定义技能的本质,是教会AI如何将自然语言指令转化为具体操作。比如当我说"查询北京明天天气"时,OpenClaw需要:
- 理解这是天气查询请求
- 提取城市和日期参数
- 调用天气API获取数据
- 以人类可读的格式返回结果
本文将带你从零开发一个适配Qwen3-32B模型的天气查询技能。选择这个场景是因为:
- 需求明确:天气查询是高频实用功能
- 接口稳定:多数天气API提供长期免费套餐
- 复杂度适中:涵盖参数解析、API调用、结果格式化等核心开发环节
2. 开发环境准备
2.1 基础工具链
我的开发环境是macOS + VS Code,你需要准备:
- Node.js 18+(OpenClaw运行依赖)
- 已部署的Qwen3-32B镜像(本地或云端)
- 可用的天气API(如和风天气、OpenWeatherMap)
# 验证Node环境
node -v
npm -v
# 安装OpenClaw CLI
npm install -g openclaw@latest
2.2 技能开发模板
OpenClaw提供了官方技能模板库,我们先克隆基础模板:
git clone https://github.com/openclaw/skill-template.git weather-skill
cd weather-skill
npm install
目录结构说明:
.
├── package.json # 技能元数据
├── src
│ ├── index.ts # 技能入口文件
│ └── types.ts # 类型定义
├── test # 测试用例
└── openclaw.json # 技能配置文件
3. 编写天气查询逻辑
3.1 定义技能元数据
修改package.json中的关键字段:
{
"name": "@yourname/weather-skill",
"version": "0.1.0",
"description": "天气预报查询技能 for Qwen3-32B",
"openclaw": {
"skillType": "api-connector",
"supportedModels": ["qwen3-32b"]
}
}
3.2 实现核心查询功能
在src/index.ts中,我们实现天气查询的核心逻辑:
import axios from 'axios';
// 天气API配置
const WEATHER_API_KEY = process.env.WEATHER_API_KEY;
const BASE_URL = 'https://api.openweathermap.org/data/2.5/weather';
interface WeatherParams {
city: string;
date?: string; // 可选日期参数
}
export async function getWeather(params: WeatherParams) {
try {
const response = await axios.get(BASE_URL, {
params: {
q: params.city,
appid: WEATHER_API_KEY,
units: 'metric',
lang: 'zh_cn'
}
});
return formatWeatherData(response.data);
} catch (error) {
console.error('天气查询失败:', error);
return '无法获取天气信息,请检查城市名称或稍后重试';
}
}
function formatWeatherData(data: any) {
return `当前${data.name}天气:
🌡️ 温度:${data.main.temp}°C(体感${data.main.feels_like}°C)
💧 湿度:${data.main.humidity}%
🌬️ 风速:${data.wind.speed}m/s
${data.weather[0].description}`;
}
3.3 注册技能指令
在openclaw.json中定义自然语言指令映射:
{
"commands": [
{
"name": "weather",
"description": "查询指定城市天气",
"parameters": {
"city": {
"type": "string",
"required": true,
"description": "城市名称"
},
"date": {
"type": "string",
"required": false,
"description": "日期(如'明天')"
}
},
"handler": "getWeather"
}
]
}
4. 本地测试与调试
4.1 模拟请求测试
创建test/test-request.json模拟用户请求:
{
"command": "weather",
"parameters": {
"city": "北京",
"date": "明天"
}
}
运行测试命令:
openclaw skill test ./test/test-request.json
4.2 集成Qwen3-32B测试
确保你的Qwen3-32B镜像已运行,然后在OpenClaw配置中添加模型端点:
{
"models": {
"providers": {
"local-qwen": {
"baseUrl": "http://localhost:8080",
"api": "openai-completions",
"models": ["qwen3-32b"]
}
}
}
}
通过OpenClaw CLI发送测试请求:
openclaw ask "查询北京明天天气" --model qwen3-32b
5. 部署与使用
5.1 打包发布技能
npm run build
clawhub publish
5.2 用户安装方式
终端用户可以通过以下方式安装你的技能:
clawhub install @yourname/weather-skill
或在OpenClaw对话窗口输入:
安装 @yourname/weather-skill 技能
5.3 环境变量配置
用户需要设置天气API密钥:
export WEATHER_API_KEY=你的API密钥
openclaw gateway restart
6. 开发经验与优化建议
在实际开发中,我遇到了几个典型问题及解决方案:
-
时区处理:天气API返回的时间戳需要转换为本地时区显示
new Date(data.dt * 1000).toLocaleString('zh-CN') -
多日预报:扩展技能支持3-5天预报
function getForecast(city: string, days: number) { // 调用预报API } -
错误恢复:当API不可用时提供缓存数据
import { cache } from 'openclaw-sdk'; const cachedWeather = cache.get(`weather:${city}`); if (cachedWeather) return cachedWeather;
建议进一步优化的方向:
- 增加空气质量指数(AQI)查询
- 支持语音播报天气功能
- 添加天气预警通知能力
开发自定义技能最有趣的部分,是看着几句简单的自然语言指令转化为实实在在的自动化操作。当测试时第一次看到Qwen3-32B准确返回格式化天气数据的那一刻,那种"教会AI新技能"的成就感,正是OpenClaw最吸引我的地方。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐

所有评论(0)