资讯动态

从零开始构建自定义 AI 技能 - OpenClaw Skill 开发教程

发布时间:2026/8/6 18:06:40 来源:尧图企业网站定制
从零开始构建自定义 AI 技能 - OpenClaw Skill 开发教程一、什么是 OpenClaw SkillOpenClaw Skill 是扩展 AI 助手能力的模块化组件。通过 Skill你可以让 AI 执行特定任务如查询天气管理待办事项操作智能家居发布博客文章处理发票验证核心优势模块化设计易于复用标准化接口快速集成支持工具调用连接外部服务内置记忆系统保持上下文二、Skill 项目结构my-skill/ ├── SKILL.md # 技能描述和触发规则必需 ├── index.js # 技能主入口可选 ├── handlers/ # 处理器目录 │ ├── weather.js # 天气处理 │ └── todo.js # 待办处理 ├── tools/ # 自定义工具 │ └── api-client.js # API 客户端 ├── templates/ # 响应模板 └── tests/ # 测试文件SKILL.md 标准格式# Skill Name ## Description 简短描述技能功能 ## Triggers - 当用户询问天气时 - 当用户说明天会下雨吗 - 当用户提到城市名 天气 ## Tools Required - web_search (可选) - 自定义工具名 ## Configuration - API_KEY: 环境变量 - ENDPOINT: API 地址三、开发第一个 Skill待办事项管理器3.1 创建项目结构mkdirtodo-skillcdtodo-skillmkdirhandlers tools tests3.2 编写 SKILL.md# Todo Skill ## Description 管理用户的待办事项支持添加、删除、完成、列表查询 ## Triggers - 添加待办、新建任务 - 删除待办、完成任务 - 我的待办、任务列表 - 提醒我、记得做 ## Tools Required - file_write (写入本地文件) - file_read (读取本地文件) ## Configuration - TODO_FILE: 待办文件路径默认 ~/todos.json3.3 实现处理器 (handlers/todo.js)// handlers/todo.jsconstfsrequire(fs).promises;constpathrequire(path);constTODO_FILEprocess.env.TODO_FILE||path.join(require(os).homedir(),todos.json);asyncfunctionloadTodos(){try{constdataawaitfs.readFile(TODO_FILE,utf-8);returnJSON.parse(data);}catch(e){return{items:[],createdAt:newDate().toISOString()};}}asyncfunctionsaveTodos(todos){awaitfs.writeFile(TODO_FILE,JSON.stringify(todos,null,2));}asyncfunctionaddTodo(text,prioritynormal){consttodosawaitloadTodos();constitem{id:Date.now().toString(),text,priority,completed:false,createdAt:newDate().toISOString()};todos.items.push(item);awaitsaveTodos(todos);returnitem;}asyncfunctionlistTodos(filterall){consttodosawaitloadTodos();switch(filter){caseactive:returntodos.items.filter(t!t.completed);casecompleted:returntodos.items.filter(tt.completed);default:returntodos.items;}}asyncfunctioncompleteTodo(id){consttodosawaitloadTodos();constitemtodos.items.find(tt.idid);if(item){item.completedtrue;item.completedAtnewDate().toISOString();awaitsaveTodos(todos);}returnitem;}module.exports{addTodo,listTodos,completeTodo,loadTodos,saveTodos};3.4 在 SKILL.md 中定义处理逻辑## Handlers ### add_todo **Trigger:** 添加/新建 任务内容 **Action:** 调用 addTodo(text, priority) **Response:** ✅ 已添加{text} ### list_todos **Trigger:** 查看/列出 待办/任务 **Action:** 调用 listTodos(filter) **Response:** 格式化列表 ### complete_todo **Trigger:** 完成/做完 任务标识 **Action:** 调用 completeTodo(id) **Response:** ✅ 已完成{text}四、工具调用与外部 API 集成4.1 使用内置工具OpenClaw 提供内置工具// 在技能中调用工具constresultawaittools.web_search({query:AI 编程助手对比,count:5});4.2 创建自定义工具// tools/weather-client.jsclassWeatherClient{constructor(apiKey){this.apiKeyapiKey;this.baseUrlhttps://api.weather.com/v1;}asyncgetCurrent(city){constresponseawaitfetch(${this.baseUrl}/current?city${city}key${this.apiKey});returnresponse.json();}asyncgetForecast(city,days3){constresponseawaitfetch(${this.baseUrl}/forecast?city${city}days${days}key${this.apiKey});returnresponse.json();}}module.exportsWeatherClient;五、状态管理与记忆5.1 短期记忆会话内// 在会话中保持状态constsessionState{currentCity:null,lastQuery:null,preferences:{}};asyncfunctionhandleWeatherQuery(city){sessionState.currentCitycity;sessionState.lastQuerynewDate().toISOString();constweatherawaitweatherClient.getCurrent(city);returnformatResponse(weather,sessionState.preferences);}5.2 长期记忆跨会话使用 MEMORY.md 或记忆文件asyncfunctionsaveUserPreference(key,value){constmemoryawaitloadMemory();memory.preferences[key]value;awaitsaveMemory(memory);}asyncfunctiongetUserPreference(key,defaultValue){constmemoryawaitloadMemory();returnmemory.preferences[key]||defaultValue;}六、测试与调试6.1 单元测试// tests/todo.test.jsconst{addTodo,listTodos,completeTodo}require(../handlers/todo);describe(Todo Skill,(){test(should add todo,async(){consttodoawaitaddTodo(测试任务);expect(todo.text).toBe(测试任务);expect(todo.completed).toBe(false);});test(should list todos,async(){consttodosawaitlistTodos();expect(Array.isArray(todos)).toBe(true);});test(should complete todo,async(){consttodoawaitaddTodo(完成任务);constcompletedawaitcompleteTodo(todo.id);expect(completed.completed).toBe(true);});});6.2 集成测试# 测试技能触发openclaw skilltesttodo-skill--trigger添加一个待办买牛奶七、发布与分享7.1 本地安装# 将技能复制到技能目录cp-rtodo-skill ~/.openclaw/skills/# 重启 Gatewayopenclaw gateway restart7.2 使用 ClawHub 发布# 安装 clawhub CLInpminstall-gclawhub# 发布技能cdtodo-skill clawhub publish--nametodo-skill--version1.0.0八、最佳实践8.1 错误处理asyncfunctionsafeAddTodo(text){try{returnawaitaddTodo(text);}catch(error){console.error(添加待办失败:,error);return{error:true,message:添加失败请稍后重试,details:error.message};}}8.2 日志记录constlogger{info:(msg,data){console.log([INFO]${msg},JSON.stringify(data));},error:(msg,error){console.error([ERROR]${msg},error);}};8.3 性能优化缓存频繁读取的数据批量处理多个操作异步执行非阻塞任务限制 API 调用频率九、总结Skill 开发流程定义技能功能和触发条件设计项目结构实现核心处理器集成外部工具/API添加状态管理编写测试发布与部署核心要点SKILL.md 是技能的身份证清晰描述功能和触发规则处理器要单一职责每个函数只做一件事错误处理要完善给用户友好的反馈测试要覆盖主要场景确保稳定性系列导航上一篇AI Prompt Engineering下一篇AI 代码审查自动化

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价