OpenClaw技能开发入门:为Phi-3-mini定制专属插件

张开发
2026/4/15 15:57:00 15 分钟阅读

分享文章

OpenClaw技能开发入门:为Phi-3-mini定制专属插件
OpenClaw技能开发入门为Phi-3-mini定制专属插件1. 为什么需要为OpenClaw开发自定义技能去年夏天我尝试用OpenClaw自动化处理每日的天气预报查询和行程建议。当时市面上没有现成的天气技能模块每次都要手动复制粘贴天气数据到行程规划表里。这个重复劳动让我意识到OpenClaw真正的威力不在于它预装了什么而在于你能教会它做什么。为Phi-3-mini这类模型开发专属技能本质上是在扩展AI智能体的行为能力。就像给人类助手配备新的工具包模型负责理解意图和制定计划而技能则提供具体的执行手段。这种组合让自动化流程真正实现端到端的闭环。2. 开发环境准备与Phi-3-mini接口对接2.1 本地模型服务验证在开始编写技能前我们需要确保Phi-3-mini的API服务正常运行。假设你已经在本地通过vllm启动了服务curl http://localhost:8000/v1/completions \ -H Content-Type: application/json \ -d { model: phi-3-mini-128k-instruct, prompt: 请用JSON格式返回当前日期, max_tokens: 50 }如果看到类似下面的响应说明模型服务正常{ choices: [{ text: {\n \date\: \2024-07-15\\n}, index: 0 }] }2.2 OpenClaw配置调整修改~/.openclaw/openclaw.json在models.providers中添加Phi-3-mini的配置{ models: { providers: { local-phi3: { baseUrl: http://localhost:8000/v1, apiKey: NULL, api: openai-completions, models: [ { id: phi-3-mini-128k-instruct, name: Phi-3 Mini Local, contextWindow: 128000 } ] } } } }重启网关使配置生效openclaw gateway restart3. 天气预报技能开发实战3.1 创建技能项目结构OpenClaw技能的标准目录结构如下weather-skill/ ├── manifest.json # 技能元数据 ├── package.json # npm包配置 ├── src/ │ ├── index.js # 主逻辑文件 │ └── weather.js # 天气API封装 └── test/ └── index.test.js # 测试用例先创建manifest.json定义技能基础信息{ id: weather-skill, name: 天气预报助手, version: 0.1.0, description: 查询实时天气与预报信息, author: YourName, entry: src/index.js, permissions: [ http, env ], triggers: [ { type: command, patterns: [查天气, 天气怎么样, 天气预报] } ] }3.2 实现天气API调用在src/weather.js中实现和风天气API的封装const axios require(axios); class WeatherService { constructor(apiKey) { this.apiKey apiKey || process.env.HEFENG_KEY; } async getCurrent(city) { const url https://devapi.qweather.com/v7/weather/now?location${city}key${this.apiKey}; const res await axios.get(url); return { temp: res.data.now.temp, text: res.data.now.text, wind: res.data.now.windDir }; } } module.exports WeatherService;3.3 编写技能主逻辑src/index.js是技能的核心入口const { Skill } require(openclaw); const WeatherService require(./weather); module.exports class WeatherSkill extends Skill { async init() { this.weather new WeatherService(); this.logger.info(天气技能初始化完成); } async execute(ctx) { const { text } ctx.payload; const city this.extractCity(text); // 提取城市名 try { const data await this.weather.getCurrent(city); return this.formatResponse(city, data); } catch (err) { this.logger.error(天气查询失败, err); return 抱歉天气查询服务暂时不可用; } } extractCity(text) { // 使用Phi-3-mini提取城市实体 return ctx.models.generate( 从文本中提取城市名称${text}, { model: phi-3-mini-128k-instruct } ); } formatResponse(city, data) { return 【${city}天气】\n 当前温度${data.temp}℃\n 天气状况${data.text}\n 风向${data.wind}; } };4. 本地测试与调试技巧4.1 开发模式加载技能在项目根目录下运行openclaw dev ./weather-skill这会启动开发服务器实时监听文件变化。你可以在OpenClaw控制台直接发送测试指令查一下北京天气4.2 使用Phi-3-mini增强技能为了让天气查询更智能我们可以利用Phi-3-mini处理自然语言理解。修改extractCity方法async extractCity(text) { const prompt 你是一个地理位置提取专家。从用户输入中识别城市名称只需返回城市名不要解释。 输入${text} 输出; const res await ctx.models.generate(prompt, { model: phi-3-mini-128k-instruct, max_tokens: 15, temperature: 0 }); return res.trim().replace(/[]/g, ); }4.3 常见问题排查权限不足错误检查manifest.json中的permissions是否包含所需权限如http模型响应异常尝试降低temperature值获得更确定性的输出API调用失败在技能目录下创建.env文件添加HEFENG_KEYyour_key测试5. 技能打包与发布5.1 生成技能包在项目根目录运行clawhub pack这会生成一个weather-skill-0.1.0.claw文件包含所有依赖和配置。5.2 本地安装测试clawhub install ./weather-skill-0.1.0.claw5.3 发布到ClawHub在ClawHub创建账号添加发布密钥到~/.clawhub/config.json发布技能clawhub publish --public发布成功后其他用户可以通过以下命令安装你的技能clawhub install weather-skill6. 进阶开发建议在实际使用中我发现几个提升技能质量的关键点上下文记忆让Phi-3-mini记住用户常查的城市。可以在execute方法中添加上下文缓存async execute(ctx) { const session ctx.session.get(weather) || {}; let city session.lastCity || ; if (!city || ctx.payload.text.includes(换) ) { city await this.extractCity(ctx.payload.text); ctx.session.set(weather, { lastCity: city }); } // ...原有逻辑 }参数验证添加对城市参数的校验逻辑async validateCity(city) { const res await ctx.models.generate( 验证${city}是否是有效的中国城市名只需回答是或否, { model: phi-3-mini-128k-instruct, max_tokens: 1 } ); return res.trim() 是; }性能监控记录技能执行耗时async execute(ctx) { const start Date.now(); // ...执行逻辑 const cost Date.now() - start; this.logger.metric(execute_time, cost); }开发OpenClaw技能最有趣的部分是看着一个简单的想法通过模型和代码的结合逐渐成长为一个能真实解决问题的智能工具。每次当天气技能自动为我生成出差行李建议时都能感受到这种技术带来的微小但确定的幸福感。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章