OpenClaw开源贡献:为Qwen3.5-9B编写并提交新技能的完整流程
OpenClaw开源贡献为Qwen3.5-9B编写并提交新技能的完整流程1. 准备工作理解OpenClaw技能开发规范在开始为OpenClaw贡献新技能之前我们需要先理解什么是技能以及开发规范。OpenClaw的技能本质上是一个可复用的功能模块它能让AI助手具备完成特定任务的能力。比如天气查询、文件处理、邮件发送等都可以封装成技能。技能开发的核心要求标准化接口必须遵循ClawHub的输入输出规范使用JSON Schema定义数据结构独立可测试每个技能应该自带测试用例不依赖外部服务测试时可mock文档完整需要包含README.md说明文件描述功能、参数和使用示例安全隔离文件操作、网络请求等敏感行为需要明确声明权限我选择开发一个天气查询技能作为示例因为这个功能足够简单适合演示完整开发流程涉及API调用和数据处理能展示典型开发模式社区还没有官方天气技能有实际需求2. 开发环境搭建与仓库准备2.1 Fork官方仓库首先访问OpenClaw的官方技能仓库https://github.com/openclaw/clawhub-skills点击右上角的Fork按钮创建自己的副本。这一步很重要因为直接向主仓库提交代码是不被允许的。2.2 克隆本地仓库使用以下命令克隆你fork的仓库git clone https://github.com/你的用户名/clawhub-skills.git cd clawhub-skills建议创建一个新的开发分支git checkout -b feat/weather-query2.3 初始化开发环境OpenClaw技能推荐使用Node.js开发虽然也支持Python。确保你的环境满足Node.js 18npm 9OpenClaw CLI工具已安装安装开发依赖npm install -D openclaw/skill-sdk jest3. 开发天气查询技能3.1 创建技能骨架使用OpenClaw CLI工具快速生成技能模板npx openclaw skill create weather-query这会生成以下目录结构weather-query/ ├── index.js # 主逻辑文件 ├── schema.json # 输入输出定义 ├── test/ # 测试用例 ├── README.md # 使用文档 └── package.json # 依赖配置3.2 设计数据Schema编辑schema.json定义输入输出结构。对于天气查询我们需要{ input: { type: object, properties: { location: { type: string, description: 城市名称如北京 }, date: { type: string, description: 查询日期格式YYYY-MM-DD, default: 当天日期 } }, required: [location] }, output: { type: object, properties: { weather: { type: string, description: 天气状况如晴、雨等 }, temperature: { type: string, description: 温度范围如15-25°C }, humidity: { type: string, description: 湿度百分比 } }, required: [weather, temperature] } }3.3 实现核心逻辑在index.js中编写天气查询功能。这里我们使用和风天气的免费API作为示例const { OpenClawSkill } require(openclaw/skill-sdk); const axios require(axios); class WeatherQuerySkill extends OpenClawSkill { async execute(input) { const { location, date new Date().toISOString().split(T)[0] } input; try { // 这里应该使用环境变量配置API Key const apiKey process.env.WEATHER_API_KEY; const response await axios.get( https://devapi.qweather.com/v7/weather/now?location${encodeURIComponent(location)}key${apiKey} ); const { now } response.data; return { weather: now.text, temperature: ${now.temp}°C, humidity: ${now.humidity}% }; } catch (error) { throw new Error(天气查询失败: ${error.message}); } } } module.exports WeatherQuerySkill;3.4 编写测试用例在test/目录下创建测试文件。我们使用jest框架const WeatherQuerySkill require(../index); const { mockSkill } require(openclaw/skill-sdk/test-utils); describe(WeatherQuerySkill, () { it(应该返回正确的天气数据, async () { const skill mockSkill(WeatherQuerySkill, { env: { WEATHER_API_KEY: test-key }, mockAxios: { get: jest.fn().mockResolvedValue({ data: { now: { text: 晴, temp: 22, humidity: 45 } } }) } }); const result await skill.execute({ location: 北京 }); expect(result).toEqual({ weather: 晴, temperature: 22°C, humidity: 45% }); }); });4. 完善文档与元数据4.1 编写README.md好的文档能帮助其他开发者理解和使用你的技能。示例内容# 天气查询技能 提供指定城市的实时天气查询功能。 ## 安装 bash clawhub install weather-query ## 使用示例 javascript const result await agent.executeSkill(weather-query, { location: 上海 }); ## 配置 需要设置环境变量WEATHER_API_KEY获取自[和风天气](https://dev.qweather.com/)。4.2 更新package.json确保包含必要的元信息{ name: weather-query, version: 0.1.0, description: OpenClaw天气查询技能, keywords: [openclaw, skill, weather], author: 你的名字 你的邮箱, license: MIT, dependencies: { axios: ^1.6.0 } }5. 提交Pull Request5.1 本地测试验证在提交前确保npm test # 单元测试通过 npx openclaw skill test ./weather-query # OpenClaw集成测试通过5.2 提交代码git add . git commit -m feat: add weather query skill git push origin feat/weather-query然后到GitHub你的仓库页面点击Compare pull request按钮创建PR。5.3 PR描述规范好的PR描述应该包含目的这个PR要解决什么问题变更内容主要修改了哪些文件测试方法如何验证这个修改有效相关Issue如果有对应的Issue编号示例## 新增天气查询技能 ### 变更内容 - 新增weather-query技能模块 - 包含核心逻辑、测试用例和文档 ### 测试方法 1. 设置WEATHER_API_KEY环境变量 2. 运行npm test 3. 在OpenClaw中测试实际查询功能 ### 关联Issue Close #1236. 社区审核要点当你的PR提交后社区维护者会从以下几个角度进行审核6.1 代码质量是否符合OpenClaw代码风格是否有充分的错误处理是否包含敏感信息如硬编码的API Key6.2 功能完整性输入输出是否符合Schema定义是否处理了边界情况如无效位置性能是否可接受特别是网络请求6.3 文档与测试README是否清晰完整测试覆盖率是否足够是否有使用示例6.4 安全性是否声明了必要的权限网络请求是否有超时设置是否可能造成敏感信息泄露根据我的经验最容易导致PR被拒绝的问题是缺少测试用例文档不完整硬编码敏感信息不符合Schema规范7. 后续维护建议一旦你的技能被合并到主仓库建议关注Issue及时回复用户反馈的问题定期更新随着API变化更新技能扩展功能可以考虑增加多天预报、空气质量等扩展通过这次完整的贡献流程我深刻体会到OpenClaw社区对质量的严格要求。虽然初次提交可能会遇到审核意见但这也是提升编码能力的好机会。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。