技能开发完全指南:从零打造你的第一个 AI 技能 技能是 OpenClaw 最核心的扩展机制。本节从零开始,带你走完技能开发的完整流程——从理解技能结构、掌握设计原则,到动手创建第一个技能、打包发布。读完之后,你就能把自己的专业知识和工作流程封装成 AI 能力,让 OpenClaw 在你的领域里变成"专家"。 核心问题 完成本节学习后,你将能够: 描述技能目录的标准结构和每个组成部分的作用 编写规范的 SKILL.md 文件(元数据 + 指令正文) 运用渐进式披露原则组织技能内容 使用初始化和打包脚本完成技能开发流程 配置技能的加载位置和条件加载规则 一、为什么需要自定义技能 OpenClaw 开箱就能用——接上 AI 模型,连上通信渠道,基本的对话能力就有了。
技能是 OpenClaw 最核心的扩展机制。本节从零开始,带你走完技能开发的完整流程——从理解技能结构、掌握设计原则,到动手创建第一个技能、打包发布。读完之后,你就能把自己的专业知识和工作流程封装成 AI 能力,让 OpenClaw 在你的领域里变成"专家"。
完成本节学习后,你将能够:
OpenClaw 开箱就能用——接上 AI 模型,连上通信渠道,基本的对话能力就有了。但你会发现,AI 在很多专业场景下的表现并不理想:它不知道你们公司的报销流程,不了解你的代码库结构,不清楚你写报告的格式要求。
原因很简单:AI 模型的训练数据是通用的,它缺乏你的领域知识。
技能就是解决这个问题的。打个比方:
技能本质上就是给 AI 的"操作手册"——封装了特定领域的知识、工作流程和工具使用方法。
技能能覆盖的场景很广:
| 场景类别 | 具体示例 |
|---|---|
| 文档处理 | 生成 Word 报告、转换 Excel 数据、提取 PDF 信息 |
| 云服务集成 | 上传对象存储、管理云资源、调用云 API |
| 智能搜索 | 多引擎并行搜索、知识库问答、文章检索 |
| 媒体生成 | 视频帧提取、图片处理、文字转语音 |
| 开发运维 | Git 管理、PR 操作、CI/CD 监控 |
| 企业办公 | 文档协作、审批流程、通知推送 |
一个标准的技能目录长这样:

各组成部分的职责:
| 组成部分 | 是否必需 | 作用 | 加载方式 |
|---|---|---|---|
| SKILL.md | 必需 | 技能的"身份证"和"操作手册",包含元数据和指令 | 元数据始终加载,正文触发时加载 |
| scripts/ | 可选 | 可执行脚本,用于需要确定性和可靠性的操作 | 直接执行,不读入上下文 |
| references/ | 可选 | 参考文档,包含 API 文档、业务规则等详细知识 | AI 按需读取 |
| assets/ | 可选 | 输出资源模板,如 HTML 模板、样式文件、示例文件 | 不加载到上下文,直接引用 |
💡 提示:一个常见的误区是把所有内容都塞进 SKILL.md。记住,上下文窗口是公共资源——技能与系统提示、对话历史、其他技能共享 token 预算。SKILL.md 应该只放核心流程指引,详细的参考资料放到 references/ 目录,让 AI 在需要时再去读取。
SKILL.md 采用 YAML 前置元数据 + Markdown 指令正文的结构:
--- name: my-skill description: 简洁描述技能功能和使用场景。包含"做什么"和"何时用"。 --- # 技能名称 ## 使用场景 当用户需要 XXX 时,使用此技能。 ## 核心功能 1. 功能一 2. 功能二 ## 使用方法 具体操作步骤...
| 字段 | 必需 | 说明 | 示例 |
|---|---|---|---|
| name | 是 | 技能名称,kebab-case 格式 | pdf-processor |
| description | 是 | 功能描述 + 触发场景,是 AI 判断是否使用此技能的依据 | "PDF 文档处理,支持提取文本、旋转页面。当用户需要处理 PDF 时使用" |
| metadata | 否 | 条件加载配置,定义技能生效的前置条件 | 见下文 |
description 字段非常关键——它决定了 AI 什么时候会想到使用这个技能。好的 description 应该包含两个信息:这个技能做什么,以及在什么情况下使用它。
通过 metadata 字段可以实现条件加载,只在满足特定条件时技能才会生效:
--- name: gemini-image-gen description: 使用 Gemini 生成或编辑图片 metadata: { "openclaw": { "requires": { "bins": ["uv"], "env": ["GEMINI_API_KEY"] }, "primaryEnv": "GEMINI_API_KEY" } } ---
| 条件字段 | 说明 |
|---|---|
| requires.bins | 必须存在的可执行文件列表 |
| requires.env | 必须存在的环境变量列表 |
| requires.config | 必须为真的配置路径 |
| os | 限定操作系统(darwin / linux / win32) |
⚠️ 注意:如果条件加载配置有误,技能可能永远不会被触发。调试技能不生效的问题时,先检查 metadata 中的条件是否满足。
渐进式披露是技能设计中最重要的原则。它的核心思想是:上下文窗口是公共资源,每一段内容都要证明它的 token 价值。
| 层级 | 内容 | 加载时机 | 大小建议 |
|---|---|---|---|
| 元数据 | name + description | 始终加载 | 约 100 词 |
| SKILL.md 正文 | 核心指令 | 技能触发时 | 不超过 5000 词 |
| 资源文件 | scripts / references / assets | AI 按需决定 | 无硬性限制 |
模式一:高层指引 + 参考文档
在 SKILL.md 中放基础操作指引,高级功能通过链接引用 references 目录下的文档:
# PDF 处理 ## 快速开始 使用 pdfplumber 提取文本: [代码示例] ## 高级功能 - 表单填写:参见 references/FORMS.md - API 参考:参见 references/REFERENCE.md
模式二:领域分治
把一个大技能按领域拆分成多个参考文档,AI 根据用户问题只读取相关的那个:
bigquery-skill/ SKILL.md(概览和导航) references/ finance.md(收入、账单指标) sales.md(机会、管道) marketing.md(活动、归因)
用户问销售指标时,AI 只读取 sales.md,不用把三个文件全加载进来。
模式三:渐进式细节
基础内容直接展示,高级内容链接到参考文档:
# DOCX 处理 ## 创建文档 使用 python-docx 创建新文档。参见 references/DOCX-JS.md。 ## 编辑文档 简单编辑直接修改 XML。 追踪修订:参见 references/REDLINING.md OOXML 详情:参见 references/OOXML.md
不要急着写代码。先想清楚几个问题:
以创建一个 PDF 旋转技能为例:
| 问题 | 答案 |
|---|---|
| 解决什么问题 | 用户需要旋转 PDF 页面 |
| 触发方式 | "旋转 PDF"、"把 PDF 页面转 90 度" |
| 重复操作 | 每次都要写相同的旋转代码 |
| AI 不知道什么 | 用哪个库、具体 API 调用方式 |
分析需求后,识别出可复用的部分:
| 需求 | 分析 | 可复用资源 |
|---|---|---|
| 旋转 PDF | 每次重写相同代码 | scripts/rotate_pdf.py |
| PDF 操作参考 | 每次重新查 API | references/PDF_API.md |
使用初始化脚本快速创建模板:
scripts/init_skill.py pdf-rotator --path ~/.openclaw/workspace/skills --resources scripts,references
脚本会自动生成完整的目录结构和带有占位符的 SKILL.md 模板。
先写可复用脚本:
# scripts/rotate_pdf.py import sys from pypdf import PdfReader, PdfWriter def rotate_pdf(input_path, output_path, angle=90): reader = PdfReader(input_path) writer = PdfWriter() for page in reader.pages: page.rotate(angle) writer.add_page(page) with open(output_path, "wb") as f: writer.write(f) if __name__ == "__main__": rotate_pdf(sys.argv[1], sys.argv[2], int(sys.argv[3]))
再写 SKILL.md:
--- name: pdf-rotator description: 旋转 PDF 文档页面。当用户需要旋转 PDF 页面角度时使用此技能。 --- # PDF 旋转器 ## 使用方法 运行脚本旋转 PDF 页面: python scripts/rotate_pdf.py input.pdf output.pdf 90 支持角度:90、180、270 度。 ## 批量旋转 对多页 PDF 中指定页面旋转:参见 references/BATCH_ROTATE.md
scripts/package_skill.py ~/.openclaw/workspace/skills/pdf-rotator
打包过程会自动验证元数据格式、目录结构和文件组织。验证通过后生成 .skill 文件(zip 格式)。
⚠️ 注意:打包过程不允许符号链接。如果技能目录中包含符号链接,打包会失败。请确保所有文件都是实际文件。
OpenClaw 从三个位置加载技能,优先级从高到低:
| 优先级 | 位置 | 说明 |
|---|---|---|
| 最高 | 工作区 skills/ 目录 | 当前项目专属的技能 |
| 中 | ~/.openclaw/skills/ | 用户全局技能 |
| 最低 | OpenClaw 安装目录 | 系统内置技能 |
ClawHub 是 OpenClaw 的公共技能注册表,可以浏览、安装和更新社区贡献的技能:
# 安装技能 clawhub install weather-asker # 更新所有技能 clawhub update --all # 同步技能 clawhub sync --all
通过配置文件可以控制技能的行为:
{ "skills": { "entries": { "my-skill": { "enabled": true, "apiKey": { "source": "env", "provider": "default", "id": "API_KEY" }, "env": { "API_KEY": "YOUR_KEY_HERE" }, "config": { "endpoint": "https://api.example.com", "model": "pro" } } } } }
| 配置字段 | 说明 |
|---|---|
| enabled | 启用或禁用技能 |
| env | 注入环境变量 |
| apiKey | 便捷配置主环境变量 |
| config | 自定义配置项 |
💡 提示:技能开发是一个迭代过程。第一版不需要做到完美——先跑起来,在真实任务中使用,观察 AI 在哪些地方做得不好,然后针对性地优化 SKILL.md 的指令或补充参考文档。
| 原则 | 说明 |
|---|---|
| 简洁至上 | 每一行都要证明它的 token 价值 |
| 渐进式披露 | 分层加载,按需消费 |
| 避免重复 | 信息只在 SKILL.md 或 references 中存在,不要两边都写 |
| 适度自由度 | 易错操作用精确脚本,开放性任务用文本指引 |
技能对上下文的影响可以用以下公式估算:
总成本 = 195 + 每个技能(97 + name长度 + description长度 + location长度)
粗略估算:大约 4 个字符对应 1 个 token,每个技能的基础开销约 24 个 token(不含字段内容长度)。