OpenClaw Skill 系统详解:从概念到实战,轻松上手自定义技能开发
发布时间:2026/10/1 6:51:46 作者:尧图编辑部 阅读量:1,286

1. 为什么你的 OpenClaw 技能总是加载失败从概念到可运行的最小闭环OpenClaw 的 Skill 系统简单说就是给 AI 代理装上一本本“专业操作手册”。它不是让模型多背几条指令而是把某个领域的判断逻辑、工具调用顺序、异常处理方式打包成一个可被识别和加载的模块。你写一个 Skill本质上是在告诉 OpenClaw遇到这类任务时先看什么、再调什么、失败了怎么办。适合谁适合已经跑通 OpenClaw 基础对话、想让代理稳定执行特定流程的开发者尤其是需要把模型调用、脚本执行、外部 API 串起来的场景。我见过太多人卡在第一步目录建了、SKILL.md 写了skills list里却始终不出现 ready 状态。问题往往不在代码而在对 Skill 文件构成和加载优先级的理解偏差。这篇内容会沿着“概念拆解 → 文件规范 → init_skill.py 初始化 → SKILL.md 模板 → 加载验证 → 报错排查”的路径走一遍同时把模型调用通道用 TaoToken 统一起来避免你在多个 Key 之间来回切换。全程可跟做命令和配置都能直接复制。先明确一个核心区分工具Tool回答“能做什么”Skill 回答“怎么合理做”。工具像一把菜刀你让它切它就切不管肉是否解冻Skill 像大厨的备菜指南会先判断肉的状态没解冻就先调微波炉切不动就换剁骨刀。OpenClaw 加载 Skill 后代理不再是机械执行而是按剧本走流程。这个认知直接决定你写 SKILL.md 时该放什么——不是堆功能列表而是写清楚触发条件、步骤编排和兜底逻辑。另一个高频误区是把 Skill 当成脚本集合。脚本只是 Skill 的可选组件放在scripts/下用于确定性执行或反复重写的任务。真正被 OpenClaw 解析的核心是SKILL.md里的 YAML Frontmatter 和 Markdown 正文。Frontmatter 决定“这个 Skill 叫什么、什么时候触发、依赖什么”正文决定“具体怎么做”。两者缺一加载就会出问题。下面从文件构成开始把每个字段和目录规范拆开讲。2. OpenClaw Skill 文件构成与 init_skill.py 初始化命令详解2.1 目录规范与四个核心组成部分一个标准 Skill 以目录形式存在放在项目的skills/目录下。目录名只能用小写字母、数字和连字符建议动词开头比如process-data、gh-create-pr长度控制在 64 字符以内。大写字母和特殊符号会导致识别失败这是很多人第一次踩的坑。完整结构包含一个必需文件和三个可选文件夹openclaw dir/skills/skill-name/ ├── SKILL.md # 必需主文件 ├── scripts/ # 可选可执行脚本 │ ├── helper.py │ └── process.sh ├── references/ # 可选参考文档按需加载 │ ├── api-docs.md │ └── examples.md └── assets/ # 可选资源文件不进入上下文 ├── template.html └── logo.pngSKILL.md是唯一不可省略的文件。scripts/存放需要确定性执行的脚本比如 PDF 解析、数据转换代理可以直接调用。references/存放 API 文档、数据库 schema 这类参考材料特点是按需加载——只有代理判断需要时才读入上下文避免一次性占用过多窗口。assets/存放模板、图片、样板代码不会加载到上下文仅用于最终输出。2.2 SKILL.md 的 YAML Frontmatter 字段说明Frontmatter 用---包裹是 Skill 的“身份卡片”。必需字段只有两个name和description。description尤其关键它直接参与触发判断要写清楚“做什么”和“什么时候用”。--- name: my-skill description: | Complete description of what this skill does and when to use it. Include specific scenarios that should trigger this skill. user-invocable: true homepage: https://example.com metadata: openclaw: emoji: always: true os: [darwin, linux] requires: bins: [gh, jq] anyBins: [node, bun] env: [API_KEY] config: [github.token] install: - id: brew kind: brew formula: gh bins: [gh] label: Install GitHub CLI ---user-invocable: true允许用户通过/skill-name直接调用。metadata.openclaw.requires.bins声明必需的二进制文件缺失时skills check会报错。install规格让 OpenClaw 在依赖缺失时提示自动安装。always: true表示始终加载适合轻量级常驻技能。2.3 用 init_skill.py 快速生成模板手动建目录容易漏文件OpenClaw 提供了init_skill.py脚本位于openclaw dir/skills/skill-creator/scripts/init_skill.py。基本用法# 基本用法 python skills/skill-creator/scripts/init_skill.py my-skill --path skills/ # 指定资源类型 python skills/skill-creator/scripts/init_skill.py my-skill --path skills/ \ --resources scripts,references # 包含示例文件 python skills/skill-creator/scripts/init_skill.py my-skill --path skills/ \ --resources scripts --examples执行后会在skills/下生成符合规范的目录和占位文件。--resources决定创建哪些可选文件夹--examples会填入示例内容方便你直接改。生成后重点编辑SKILL.md先补全 Frontmatter再写正文。2.4 正文结构与渐进式披露原则正文是 Skill 的“使用手册”推荐结构# Skill 标题 ## Overview 简要说明功能 ## Usage 使用说明和示例 ## Workflow 工作流程步骤 ## Examples 具体示例代码写正文时遵循渐进式披露核心流程放SKILL.md详细文档放references/。上下文窗口是公共资源只写 AI 不知道的信息避免冗余。分层次加载能显著提升执行效率。3. 可复制配置SKILL.md 模板与 TaoToken 统一模型通道接入3.1 完整 SKILL.md 模板含模型调用下面是一个可直接复制的模板功能是“调用模型对输入文本做摘要”同时通过 TaoToken 统一 Key 和 API 通道。先看 Frontmatter--- name: text-summarize description: | Summarize long text into concise bullet points. Use when the user provides a long article, report, or document and asks for a summary. user-invocable: true homepage: https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content metadata: openclaw: emoji: requires: bins: [python3] env: [TAOTOKEN_API_KEY] ---正文部分# Text Summarize Skill ## Overview 将长文本压缩为要点列表适合报告、文章、会议记录。 ## Usage 用户提供长文本并要求摘要时触发。 ## Workflow 1. 读取用户输入文本 2. 调用 scripts/summarize.py 处理 3. 返回要点列表 ## Examples bash python scripts/summarize.py --input article.txt### 3.2 模型调用脚本与 TaoToken 配置 scripts/summarize.py 通过 TaoToken 的 OpenAI 兼容接口调用模型。Base URL 使用 https://taotoken.net/apiKey 从环境变量读取 python import os import sys import argparse from openai import OpenAI client OpenAI( api_keyos.environ[TAOTOKEN_API_KEY], base_urlhttps://taotoken.net/api, ) def summarize(text: str) - str: resp client.chat.completions.create( modelclaude-sonnet-4-20250514, messages[ {role: system, content: 将用户文本总结为不超过5条要点。}, {role: user, content: text}, ], temperature0.3, ) return resp.choices[0].message.content if __name__ __main__: parser argparse.ArgumentParser() parser.add_argument(--input, requiredTrue) args parser.parse_args() with open(args.input, r, encodingutf-8) as f: print(summarize(f.read()))三件套对照表配置项值Base URLhttps://taotoken.net/apiAPI Key环境变量TAOTOKEN_API_KEYModel IDclaude-sonnet-4-20250514设置环境变量export TAOTOKEN_API_KEY你的KeyKey 在 TaoToken 控制台的 API Keys 页面创建接入文档在 doc 页面。这样所有 Skill 共用同一个通道换模型只改model字段不用动 Key。3.3 打包与安装编辑完成后用package_skill.py打包python skills/skill-creator/scripts/package_skill.py skills/text-summarize python skills/skill-creator/scripts/package_skill.py skills/text-summarize ./dist生成.skill文件本质是带特殊扩展名的 zip便于分发和安装。4. 验证请求与成功结果skills list / info / agent 三步确认写完不等于能跑必须验证加载和执行。OpenClaw 的 Skill 加载有优先级从低到高config.skills.load.extraDirs→ 内置 bundled skills →~/.openclaw/skills→workspace/skills。放在 workspace 的skills/下优先级最高适合开发调试。第一步列出就绪技能pnpm openclaw skills list | grep ✓ ready如果text-summarize出现在列表且状态为 ready说明加载成功。若没有先跑skills check。第二步查看详情pnpm openclaw skills info text-summarize确认 Frontmatter 字段、依赖、描述都正确解析。这一步能暴露 YAML 缩进错误或字段拼写问题。第三步触发测试。用 agent 命令指定会话pnpm openclaw agent --to sessionid --message /text-summarize --thinking low把sessionid换成实际会话 ID。也可以自然语言触发pnpm openclaw agent --to sessionid --message 帮我把这段长文总结成要点 --thinking low成功时输出要点列表说明 Skill 被正确识别、脚本被调用、TaoToken 通道返回了模型结果。三种方式都能跑通才算闭环完成。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth401 Unauthorized最常见。检查TAOTOKEN_API_KEY是否导出到当前 shellecho $TAOTOKEN_API_KEY确认非空。若在 Skill 的requires.env里声明了该变量skills check会提示缺失。注意 Key 不要写进 SKILL.md 正文只放环境变量。local proxy failed通常是 Base URL 写错或网络不可达。确认脚本里是https://taotoken.net/api不要多加/v1或尾部斜杠。若用了自定义代理配置检查是否与 OpenClaw 的加载环境冲突。reading choices 报错模型返回结构异常多为model字段填了不存在的 ID。对照 TaoToken 文档里的可用模型列表确认claude-sonnet-4-20250514拼写正确。也可能是messages格式不对system 和 user 角色要成对出现。OAuth 相关报错如果 Skill 依赖外部 CLI如gh且需要 OAuth先在终端手动完成一次授权确认gh auth status正常。OpenClaw 不会替你走交互式授权流程requires.bins只检查二进制存在不检查登录态。Skill 不触发description写得太模糊代理判断不出何时调用。把具体场景写进去比如“当用户提供超过 500 字的文章并要求摘要时”。user-invocable为 false 时只能靠自然语言触发测试时容易误判。依赖缺失skills check会列出缺失的 bins。按install规格手动装或让 OpenClaw 提示安装。anyBins满足其一即可bins必须全部存在。排障时优先看skills check和skills info的输出90% 的问题在这两步就能定位。模型调用类报错再去核对 TaoToken 的 Key、Base URL、Model ID 三件套。6. 从 Skill 到 Agent用 TaoToken Coding Plan 跑通长期编码任务单个 Skill 跑通后下一步是把多个 Skill 串成 Agent 工作流。比如“读代码 → 生成摘要 → 提交 PR”这条链路涉及文件读取、模型调用、Git 操作三个 Skill。此时模型调用的稳定性和成本就变得关键。TaoToken 的 Coding Plan 适合长期编码和 Agent 场景统一 Key 后不用为每个 Skill 单独配通道。接入方式不变Base URL 仍是https://taotoken.net/apiModel ID 按任务选。验证模型是否可用可以直接在模型对话页面测一条请求确认返回正常再写进 Skill。实际经验把模型调用封装成scripts/下的独立脚本Skill 正文只写“调用哪个脚本、传什么参数”。这样换模型、调温度、加重试都只改脚本SKILL.md 保持稳定。另外references/里放一份 API 文档摘要代理需要时按需加载比塞进正文更省上下文。最后一步验证跑一次完整 Agent 任务观察 Skill 触发顺序和模型返回。若中间某步失败用skills info确认该 Skill 状态再单独用 agent 命令触发它。逐个 Skill 验证通过后整条链路自然稳定。到这里从零到可运行技能的闭环就走完了。