OpenClaw技能开发入门:为Phi-3-mini-128k-instruct编写天气查询插件
OpenClaw技能开发入门为Phi-3-mini-128k-instruct编写天气查询插件1. 为什么需要自定义OpenClaw技能去年冬天我经常需要查看不同城市的天气情况来规划出差行程。每次手动打开天气网站输入城市名再对比温度数据整个过程繁琐又耗时。作为一个技术爱好者我自然想到能不能让我的AI助手自动完成这个任务这就是我开始研究OpenClaw技能开发的契机。OpenClaw本身已经具备基础的自动化能力但要让AI助手真正理解帮我查下北京明天下午的天气这样的自然语言指令并准确执行查询动作就需要开发专门的天气查询技能。通过这个案例我想分享如何从零开发一个实用的OpenClaw技能并将其注册到Phi-3-mini-128k-instruct模型中。整个过程涉及API对接、自然语言交互设计、技能注册等多个环节是理解OpenClaw扩展机制的绝佳实践。2. 开发前的准备工作2.1 环境配置首先确保你已经完成OpenClaw的基础安装和配置。我使用的是macOS系统通过以下命令验证安装openclaw --version # 输出示例openclaw/1.2.3 darwin-arm64 node-v18.16.0同时需要准备一个可用的天气API服务我选择的是和风天气免费版本地运行的Phi-3-mini-128k-instruct模型服务代码编辑器VSCode或WebStorm等2.2 理解技能的基本结构OpenClaw技能本质上是一个Node.js模块遵循特定的目录结构和接口规范。一个完整的技能通常包含weather-query/ ├── package.json # 定义技能元数据 ├── index.js # 主逻辑文件 ├── schema.json # 技能参数定义 └── README.md # 使用说明3. 开发天气查询技能3.1 创建技能项目首先初始化一个新的npm包mkdir weather-query cd weather-query npm init -y修改package.json添加必要的OpenClaw技能标识{ name: weather-query, version: 1.0.0, main: index.js, openclaw: { type: skill, name: 天气查询, description: 查询城市天气信息, icon: ️ } }3.2 实现核心逻辑在index.js中我们首先实现天气API的调用逻辑。这里以和风天气为例const axios require(axios); class WeatherQuery { constructor(config) { this.apiKey config.apiKey; this.baseUrl https://devapi.qweather.com/v7/weather; } async getWeather(city, date) { try { const response await axios.get(${this.baseUrl}/3d, { params: { location: city, key: this.apiKey } }); return this.formatWeather(response.data, date); } catch (error) { console.error(天气查询失败:, error); return null; } } formatWeather(data, date) { // 简化处理实际应根据date参数筛选具体日期 const forecast data.daily[0]; return { city: data.location.name, date: forecast.fxDate, temp: ${forecast.tempMin}~${forecast.tempMax}℃, condition: forecast.textDay, wind: ${forecast.windDirDay} ${forecast.windScaleDay}级 }; } } module.exports WeatherQuery;3.3 设计自然语言交互为了让Phi-3-mini-128k-instruct模型理解何时调用这个技能我们需要定义技能的模式(schema)。创建schema.json{ name: weather_query, description: 查询指定城市的天气情况, parameters: { type: object, properties: { city: { type: string, description: 城市名称如北京、上海 }, date: { type: string, description: 日期如今天、明天、2024-07-20, default: 今天 } }, required: [city] } }3.4 注册技能到OpenClaw在index.js中添加技能注册逻辑const { registerSkill } require(openclaw); class WeatherQuery { // ...之前的代码... static register() { registerSkill({ name: weather_query, description: 查询城市天气信息, schema: require(./schema.json), execute: async (params, context) { const instance new WeatherQuery(context.config); return instance.getWeather(params.city, params.date); } }); } } WeatherQuery.register();4. 集成到Phi-3-mini-128k-instruct模型4.1 配置模型连接确保你的Phi-3-mini-128k-instruct模型服务正常运行并在OpenClaw配置文件中添加模型连接{ models: { providers: { phi3-local: { baseUrl: http://localhost:8000/v1, api: openai-completions, models: [ { id: phi-3-mini-128k-instruct, name: Phi-3 Mini Instruct } ] } } } }重启OpenClaw网关使配置生效openclaw gateway restart4.2 测试技能交互现在可以通过OpenClaw的Web界面或已连接的通讯工具(如飞书)测试技能用户查询北京明天的天气 AI助手北京明天晴转多云气温22~30℃东南风3级5. 开发中的常见问题与解决在实际开发过程中我遇到了几个典型问题API密钥管理直接将密钥硬编码在代码中不安全。最终解决方案是通过OpenClaw的环境变量管理openclaw config set WEATHER_API_KEYyour_api_key_here然后在代码中通过process.env.WEATHER_API_KEY获取。日期处理用户可能输入今天、明天等相对日期。我添加了一个日期解析工具函数function parseDate(input) { if (input 今天) return new Date(); if (input 明天) { const date new Date(); date.setDate(date.getDate() 1); return date; } return new Date(input); }模型理解偏差有时Phi-3会误解用户意图。通过在schema.json中添加更详细的参数描述显著提高了识别准确率。6. 进一步优化方向完成基础功能后还可以考虑以下增强添加天气预警功能支持多城市同时查询实现天气数据缓存减少API调用添加可视化天气图表输出这些扩展都可以通过修改现有技能代码实现无需改动核心架构。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。