拓冰建站拓冰建站
首页 / 资讯中心 / 正文

从零造 “手脚”:OpenClaw 自定义 Skills 开发实战 —— 让 AI 按你的想法干活(TaoToken 配置篇)

1. 为什么我要自己给 OpenClaw 造“手脚”OpenClaw 最迷人的地方从来不是官方预置的那几十种基础能力而是“你能为它定制专属技能”。官方 Skills 能覆盖文件整理、浏览器操控、邮件发送这类通用需求但一旦落到你自己的场景——比如对接公司内部 CRM、自动生成行业专属报表、同步个人理财数据——通用能力立刻显得力不从心。自定义 Skills 就是让 OpenClaw 从“通用 AI 助手”变成“专属数字员工”的核心钥匙。很多人以为开发 Skill 是高手的事其实门槛远低于想象只要你懂基础 JavaScript/TypeScript遵循 OpenClaw 的标准化规范就能在一小时内跑通第一个可运行的自定义 Skill。这篇是纯实战导向的开发指南不堆砌复杂原理只讲“怎么写、怎么测、怎么用”。我会从 Skill 核心结构拆解开始带你写一个文件统计报表 Skill再接入 TaoToken 统一 Key/API 通道完成模型调用最后用一次真实触发验证整条链路。读完你不仅能掌握自定义 Skill 的开发方法更能理解 OpenClaw 的“全能”本质是“可扩展”——而自定义 Skills就是你扩展它能力边界的最佳方式。2. 先搞懂 OpenClaw 自定义 Skill 到底是什么动手前先明确三个核心认知能帮你少走很多弯路。2.1 自定义 Skill 的本质OpenClaw 的 Skill 不是“黑盒插件”而是遵循固定规范的 TypeScript/JavaScript 模块——核心作用是“接收 OpenClaw 内核的标准化指令执行具体操作返回标准化结果”。它的定位很清晰不参与“意图解析”用户说的话由 OpenClaw 内核转成结构化指令Skill 只负责“干活”不管权限所有文件访问、网络请求的权限都由 OpenClaw 内核统一校验专注单一能力一个 Skill 只做一件事比如“查询快递”“生成周报”简单、可复用、易维护。2.2 自定义 Skill 的核心结构所有 OpenClaw Skill 都遵循“3 文件核心结构”这是能被内核识别、调度的基础my-custom-skill/ ├── plugin.json # Skill 元信息名称、权限、接口声明 ├── index.ts/js # 核心执行逻辑接收参数、处理任务、返回结果 └── package.json # 依赖配置可选有第三方依赖时需要其中 plugin.json 是“身份证”告诉 OpenClaw 这个 Skill 叫什么、能做什么、需要什么权限index.ts/js 是“干活的手”实现具体执行逻辑package.json 是“补给包”声明 Skill 依赖的第三方库比如请求 API 用的 axios。2.3 开发核心原则标准化输入输出是底线参数和返回值必须符合 OpenClaw 规范否则内核无法调度最小权限原则要求只申请完成任务必需的权限比如读取文件就不申请写入权限异常处理要完备必须捕获执行中的错误并返回清晰信息避免内核崩溃无状态设计要求 Skill 不保存用户数据所有上下文由 OpenClaw 内核传递。3. 环境准备与 TaoToken 接入前置自定义 Skill 开发不需要复杂环境但模型调用环节我建议统一走 TaoToken这样 Key 管理、额度控制、多模型切换都在一个通道里完成后面写 Skill 时不用为每个模型单独配一套鉴权。3.1 基础环境Node.js 需要 v18推荐 v18/v20 稳定版包管理器用 Node.js 自带的 npm 即可代码编辑器推荐 VS Code 并搭配 TypeScript 插件本地已运行 OpenClaw 网关。验证环境是否正常node -v # 输出 v18.x.x 或更高即可 npm -v # 输出 9.x.x 或更高即可3.2 初始化 Skill 目录mkdir openclaw-custom-skills cd openclaw-custom-skills mkdir file-report-skill cd file-report-skill npm init -y npm install typescript types/node --save-dev npx tsc --init --target ES2020 --module CommonJS --outDir dist3.3 接入 TaoToken 统一 Key/API 通道TaoToken 的定位是统一模型调用入口你只需要一个 Key就能在 Skill 里调用不同模型不用为每个供应商维护一套配置。接入步骤很直接第一步打开 TaoToken 控制台 注册并登录。第二步进入 API Keys 页面 创建一个新 Key复制保存好后面写进 settings.json。第三步确认 API 基地址为https://taotoken.net/api这个地址在 Skill 里作为模型请求的 baseURL 使用。第四步如果你打算长期跑编码类或 Agent 类 Skill可以顺手看一下 Coding Plan额度模型更适合高频调用场景。3.4 settings.json 配置骨架在 Skill 目录下创建 settings.json把 TaoToken 的 Key 和模型参数集中管理避免硬编码{ taotoken: { baseUrl: https://taotoken.net/api, apiKey: sk-你的TaoTokenKey, defaultModel: claude-sonnet-4-5, timeoutMs: 30000 }, skill: { defaultReportPath: ./file-report.md, maxFilesPerScan: 5000 } }注意settings.json 里含 Key务必加入 .gitignore不要提交到公开仓库。4. 实战开发第一个自定义 Skill文件统计报表从最简单的场景入手开发一个“统计指定目录下文件类型和数量生成 Markdown 报表”的 Skill。这个案例覆盖“文件读取、数据处理、结果输出”核心能力是自定义 Skill 的入门标配。4.1 编写 plugin.json在 file-report-skill 目录下创建 plugin.json{ name: file-report-skill, version: 1.0.0, description: 统计指定目录的文件类型和数量生成Markdown格式报表, author: Your Name, skills: [ { action: generate-file-report, description: 统计目录文件并生成Markdown报表, parameters: [ { name: dirPath, type: string, required: true, description: 要统计的目录绝对路径 }, { name: outputPath, type: string, required: false, default: ./file-report.md, description: 报表保存路径 } ], permissions: [ file.read, file.write ] } ] }4.2 编写核心执行逻辑 index.tsimport fs from fs; import path from path; function countFilesByType(dirPath: string): Recordstring, number { const stats: Recordstring, number {}; if (!fs.existsSync(dirPath)) { throw new Error(目录不存在${dirPath}); } const files fs.readdirSync(dirPath, { withFileTypes: true }); for (const file of files) { if (file.isDirectory()) continue; const ext path.extname(file.name).toLowerCase() || 无扩展名; stats[ext] (stats[ext] || 0) 1; } return stats; } function generateMarkdownReport(stats: Recordstring, number, dirPath: string): string { const now new Date().toLocaleString(); let markdown # 文件统计报表\n; markdown **统计目录**${dirPath}\n; markdown **统计时间**${now}\n\n; markdown | 文件类型 | 数量 |\n|----------|------|\n; Object.entries(stats).forEach(([ext, count]) { markdown | ${ext} | ${count} |\n; }); const total Object.values(stats).reduce((sum, val) sum val, 0); markdown \n**总文件数**${total}\n; return markdown; } export default async function run(action: string, params: any) { try { if (action ! generate-file-report) { return { success: false, message: 不支持的动作${action}, data: null }; } const { dirPath, outputPath ./file-report.md } params; const fileStats countFilesByType(dirPath); const markdown generateMarkdownReport(fileStats, dirPath); const fullOutputPath path.isAbsolute(outputPath) ? outputPath : path.join(process.cwd(), outputPath); fs.writeFileSync(fullOutputPath, markdown, utf8); return { success: true, message: 文件统计报表已生成, data: { stats: fileStats, reportPath: fullOutputPath, totalFiles: Object.values(fileStats).reduce((sum, val) sum val, 0) } }; } catch (error) { return { success: false, message: 执行失败${(error as Error).message}, data: null }; } }4.3 编译并部署npx tsc编译后会生成 dist/index.js。把整个 file-report-skill 目录复制到 OpenClaw 安装目录下的 skills/ 文件夹然后重启 OpenClaw 网关内核会自动扫描并加载新 Skill。5. 验证请求一次 Skill 触发动作部署完成后通过 OpenClaw 的交互入口WebUI 或 Telegram发送指令执行 generate-file-report参数{dirPath:D:/桌面,outputPath:D:/桌面/文件报表.md}如果配置正确OpenClaw 会统计 D 盘桌面的文件类型和数量在桌面生成 文件报表.md并返回“文件统计报表已生成”以及统计数据。这一步跑通说明你的第一个自定义 Skill 已经完整接入 OpenClaw 内核。如果你还想在 Skill 里调用模型做进一步处理比如让模型对报表做一段总结可以在 index.ts 里加一段请求baseURL 用https://taotoken.net/apiKey 从 settings.json 读取。想先验证模型通道是否通可以直接在 模型对话 里发一条测试消息确认 Key 和模型都正常再写进 Skill 代码。6. 本篇常见错排查开发过程中高频踩的坑集中在几处我按出现频率排一下。路径问题最常见。Skill 运行目录可能不是自身目录务必使用绝对路径或process.cwd()处理不要假设相对路径的基准。权限问题紧随其后。忘记在 plugin.json 中声明权限会导致 OpenClaw 内核直接拦截操作表现为 Skill 加载成功但执行时报权限错误。参数格式不匹配也很典型。传数字而声明是字符串或者 JSON 参数里少了必填字段都会让 run 函数在解构时抛错。建议在 run 开头做一次显式校验。异步处理遗漏。网络请求、文件操作未用 async/await导致返回结果为空内核收到 undefined 后无法解析。错误捕获不完整。未捕获所有异常会让 Skill 崩溃进而影响 OpenClaw 内核稳定性。统一用 try/catch 包裹并返回{ success: false, message, data: null }结构。调试时可以在关键逻辑处加 console.logOpenClaw 启动日志会输出这些信息。也可以单独写测试脚本直接调用 run 函数先验证逻辑再部署import run from ./dist/index.js; run(generate-file-report, { dirPath: D:/桌面 }) .then(result console.log(result)) .catch(err console.error(err));7. 继续扩展与统一通道建议基础 Skill 跑通后你可以把 API Key、默认路径这类可变配置抽到 settings.json避免硬编码权限按最小化原则声明plugin.json 里维护版本号方便迭代一个 Skill 可以声明多个 action比如快递 Skill 同时支持“查询物流”和“订阅提醒”。当 Skill 需要调用模型时统一走 TaoToken 的 Key/API 通道baseURL 固定为https://taotoken.net/api这样切换模型、管理额度、排查调用问题都集中在一处。接入细节可以参考 接入文档里面有完整的请求示例和参数说明。如果你用的是 Claude Code 这类编码工具链ClaudeCodeAnthropic 接入说明 也值得看一眼能把 Skill 开发和日常编码串起来。掌握自定义 Skill 开发后你可以对接企业内部系统实现办公自动化集成个人常用服务打造专属助理开发行业专属能力解决垂直场景问题。你的 AI理应由你定义它的能力。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门