在 OpenClaw 的生态里,技能(Skill)是让 AI 从“理解”到“执行”的关键一步。OpenClaw 的技能主要可以分为两类:一类是社区贡献的、拿来即用的现成技能;另一类则是你可以亲手打造,满足个性化需求的自定义技能。

下面我们先从宏观上了解技能的分类,再重点深入自定义技能的开发。

💡 从“拿来就用”到“亲手打造”

OpenClaw 的技能生态非常庞大,你可以把它们想象成一个“工具超市”,大致可以归为这几类 :

  • 内置基础技能:OpenClaw 本身就自带了一些“吃饭的家伙”,开箱即用。比如浏览器自动化(agent-browser) 可以帮你抓取网页数据,文件管理(file-manager) 能读写整理本地文件,系统命令(system-command) 则让你用自然语言执行服务器指令 。

  • 社区热门技能:社区是 OpenClaw 的灵魂。这里有近3000个由开发者贡献的高质量技能,覆盖了从开发到生活的方方面面 。比如:

    • 开发辅助coding-agent(代码生成)、github(仓库管理)、debug-pro(代码调试)。

    • 办公效率gmail-manager(邮件处理)、nano-pdf(PDF编辑)、notion-manager(笔记管理)。

    • 生活服务weather(天气查询)、qqbot-cron(定时提醒)、AnyList(购物清单管理)。

  • 自定义技能:当现成的技能无法满足你的特定需求时,比如要对接公司内部的CRM系统,或是生成个性化的报表,就需要进入下一个阶段——亲手为 AI 打造“专属工具” 。

🛠️ 深入核心:如何编写自定义技能

开发一个自定义技能,本质上就是创建一个符合 OpenClaw 规范的、能够处理特定任务的程序模块。整个过程比你想象的要简单 。

📁 1. 技能的核心结构

一个标准的 OpenClaw 技能文件夹里,包含三个核心文件,它们共同构成了技能的“身份”和“大脑”:

文件 作用 比喻
plugin.json 技能的“身份证”:声明技能的名称、版本、作者,以及最重要的——它能执行什么动作(action)、需要接收哪些参数(parameters)、需要申请什么权限(permissions)。 就像是技能的说明书,告诉 OpenClaw 内核这个技能是干什么的,需要什么资源。
index.ts 或 index.js 技能的“手脚”:这是技能的核心执行逻辑。它必须导出一个默认的异步函数(run),接收来自内核的动作名和参数,并返回标准化的执行结果。 就像技能的操作手册,里面是用代码写好的具体干活步骤。
package.json 技能的“补给包”(可选):如果你的技能需要依赖第三方库(比如用 axios 发请求,用 lodash 处理数据),就在这里声明。 就像一份购物清单,告诉系统运行这个技能还需要哪些额外的“工具”辅助。
🚀 2. 实战案例:编写一个“文件统计报表”技能

假设我们希望 AI 能自动统计一个文件夹里各种类型的文件数量,并生成一份漂亮的 Markdown 格式报表。

第一步:编写 plugin.json,定义技能“能做什么”

这个文件告诉 OpenClaw 内核,这个技能叫什么名字(file-report-skill),能执行一个叫 generate-file-report 的动作,并且它需要两个参数:目标文件夹路径 dirPath(必填)和报表输出路径 outputPath(选填)。同时,它声明自己需要 file.read 和 file.write 两个权限 。

json

{
  "name": "file-report-skill",
  "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"]
    }
  ]
}

第二步:编写 index.ts,实现“具体怎么干”

这里我们使用 TypeScript 来编写核心逻辑,主要分为三步 :

  1. 参数解析:从传入的 params 中拿到 dirPath 和 outputPath

  2. 核心处理:调用 countFilesByType 函数,读取目录,遍历文件,根据扩展名统计数量。

  3. 结果输出:调用 generateMarkdownReport 将统计数据格式化为 Markdown 表格,并写入到指定的 outputPath 文件中。

typescript

import fs from 'fs';
import path from 'path';

// ... (countFilesByType 和 generateMarkdownReport 函数的实现,参考上文搜索到的内容)

export default async function run(action: string, params: any) {
  try {
    if (action !== 'generate-file-report') {
      return { success: false, message: `不支持的动作:${action}` };
    }

    const { dirPath, outputPath = './file-report.md' } = params;

    // 1. 统计文件
    const fileStats = countFilesByType(dirPath);

    // 2. 生成报表
    const markdown = generateMarkdownReport(fileStats, dirPath);

    // 3. 写入文件
    fs.writeFileSync(outputPath, markdown, 'utf8');

    // 返回成功
    return { success: true, message: `报表已生成至 ${outputPath}`, data: fileStats };
  } catch (error) {
    // 必须返回清晰的错误信息
    return { success: false, message: error.message };
  }
}
🛡️ 3. 开发时的安全规范

赋予 AI 执行任务的能力也伴随着安全责任,开发时请务必遵守以下原则 :

  • 最小权限原则:在 plugin.json 中,只申请完成任务所必须的权限。比如只读文件,就不要申请写入权限。

  • 完备的异常处理:用 try...catch 包裹核心逻辑,确保任何错误都不会导致 OpenClaw 内核崩溃,并返回对用户友好的错误信息。

  • 无状态设计:技能本身不应保存任何用户状态或数据,所有上下文应由 OpenClaw 内核统一管理。

  • 输入校验:对传入的参数(如 dirPath)进行严格校验,防止路径遍历等恶意操作。

💎 总结

OpenClaw 的技能生态为你提供了丰富的选择:从内置的基础能力,到社区贡献的热门工具,再到你可以亲手打造的自定义技能。当你希望 AI 助手能完成一项独一无二的个性化任务时,不妨按照上面介绍的“身份声明(plugin.json)+ 逻辑实现(index.ts)”这一核心模式,为它打造一个专属技能。这不仅是扩展 AI 能力边界的最佳方式,也是让 OpenClaw 从“通用助手”变成你专属“数字员工”的关键一步。

如果你在开发过程中有具体的场景想要实现,或者遇到了报错,随时可以再问我,我们一起看看怎么解决。

下载技能

OpenClaw豆瓣采集

https://download.csdn.net/download/suny8/92701939

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐