你是否希望自己的 AI 助手能完成更多定制化任务?比如让它自动整理文件、调用某个特定的 API,或者生成图片?实现这些功能的核心,就是为 OpenClaw 制作专属的 Skill。
OpenClaw 强大的 Skill 系统基于 AgentSkills 规范,支持你自定义工具、构建自动化流程,甚至是设计复杂的 AI 工作流。今天,我们将深入 云栈社区 开发者们的实践,为你提供一份手把手的 OpenClaw Skill 制作指南。
简单来说,Skill 就是一份告诉 AI 如何使用工具的详细“说明书”。当你为 AI 加载一个 Skill,它就获得了新的认知:有哪些工具可用?这些工具能干什么?以及如何正确调用它们?
OpenClaw 的 Skill 系统具备以下显著特点:
- 基于标准:遵循 AgentSkills 规范,意味着你编写的 Skill 具有良好的可移植性,可在其他支持该规范的平台上复用。
- 配置灵活:支持定义丰富的工具参数、返回值、使用条件乃至环境依赖。
- 层级加载:采用多层加载机制,允许你的自定义 Skill 覆盖官方内置的同名 Skill,实现高度定制化。
OpenClaw 会从三个位置加载 Skill,优先级从高到低依次为:
- 工作区 Skill:存放在当前工作目录的
skills子目录下,仅对当前工作区生效。 - 本地 Skill:存放在
~/.openclaw/skills目录下,对本机所有 Agent 都可用。 - 内置 Skill:随 OpenClaw 安装包自带,是官方的核心技能。
这个优先级机制非常实用:你完全可以创建一个与内置 Skill 同名的自定义版本,放在工作区或本地目录,OpenClaw 会自动优先加载你的版本,从而实现功能覆盖或增强。
一个 Skill 本质上就是一个文件夹,其内部至少需要包含一个核心定义文件 SKILL.md。此外,你还可以在文件夹内放置脚本、配置文件、示例等辅助资源。
例如,一个名为 my-first-skill 的 Skill 可能具有如下结构:
my-first-skill/ ├── SKILL.md # 核心技能定义文件 ├── scripts/ # 存放可执行脚本 │ └── handler.py └── examples/ # 存放使用示例 └── demo.md
SKILL.md 是 Skill 的灵魂。它采用“YAML frontmatter + Markdown 正文”的格式。前半部分的 YAML 用于定义元信息,后半部分的 Markdown 用于详细描述工具和使用方法。掌握正确的 技术文档 书写规范,能让你的 Skill 更易被 AI 理解。
文件以三个短横线 --- 开始和结束,中间定义最基本的元数据:
--- name: hello-world description: 一个简单的 Hello World 技能 ---
后续可以接着编写详细的使用说明文档。
除了 name 和 description,你可以在 metadata 字段中设置复杂的加载条件,让 Skill 更智能。例如:
--- name: image-generator description: 使用 AI 生成图片 metadata: {"openclaw": {"requires": {"bins": ["python3"], "env": ["API_KEY"]}, "emoji": "🖼️"}} ---
这个配置表示:image-generator 技能需要系统已安装 python3 命令,并设置了 API_KEY 环境变量才会被加载。emoji 字段则指定了该技能在界面中显示的图标。
Skill 的核心价值在于“教会” AI 使用工具。你需要在 SKILL.md 的正文部分,用清晰的结构描述每个工具。
- 功能说明:一句话讲清楚这个工具是干什么的。
- 参数列表:详细列出每个参数的名称、类型、是否必填、默认值和简短描述。
- 返回值说明:明确告知 AI 调用后会得到什么格式的结果。
- 调用示例:提供典型的调用示例,这是帮助 AI 理解和模仿的关键。
下面是一个定义 generate_image 工具的完整示例:
工具:generate_image 根据文本描述生成图片。 参数 - prompt: string, 必填 要生成图片的描述文本 - size: string, 可选,默认 `"1024x1024"` 图片尺寸,支持 `1024x1024`, `512x512`, `256x256` - style: string, 可选,默认 `"natural"` 图片风格,支持 `natural`, `vivid`, `anime` 返回值 返回一个图片 URL 字符串。 示例 用户说“帮我画一只可爱的猫”,AI 应该调用: python generate_image(prompt="一只可爱的橘猫,大眼睛,卡通风格", size="1024x1024", style="vivid")
OpenClaw 支持在 metadata 中设置多种条件,让 Skill 只在满足特定环境时才被加载,避免错误。
metadata: {"openclaw": {"os": ["darwin", "linux"]}}
此技能仅在 macOS 和 Linux 系统上加载。
metadata: {"openclaw": {"requires": {"bins": ["python3", "pip"]}}}
此技能需要系统已安装 python3 和 pip 命令。
metadata: {"openclaw": {"requires": {"env": ["OPENAI_API_KEY"]}}}
此技能需要 OPENAI_API_KEY 环境变量已设置。
metadata: {"openclaw": {"requires": {"config": ["browser.enabled"]}}}
此技能需要在 openclaw.json 配置文件中启用了 browser.enabled 选项。
你可以灵活组合上述条件,确保 Skill 在正确的上下文中工作。
让我们通过一个完整的例子来巩固所学:制作一个名为 weather-skill 的天气查询技能。
weather-skill/ ├── SKILL.md └── scripts/ └── weather.py
--- name: weather description: 查询指定城市的天气信息 metadata: {"openclaw": {"emoji": "🌤️", "requires": {"bins": ["curl"]}}} --- 工具:get_weather 获取指定城市的当前天气信息。 参数 - city: string, 必填 城市名称,支持中英文,如“北京”、“New York” - format: string, 可选,默认 `"celsius"` 温度单位,`celsius` 表示摄氏度,`fahrenheit` 表示华氏度 返回值 返回格式化的天气信息字符串,例如: `北京 today: 晴, 温度 15°C, 湿度 45%` 调用示例 用户问“北京今天天气怎么样”,AI 应该调用: python get_weather(city="北京") 用户问“纽约的温度是多少(华氏度)”,AI 应该调用: python get_weather(city="New York", format="fahrenheit") 注意事项 - 本技能依赖 `curl` 命令调用第三方天气 API。 - 如果 API 调用失败,将返回明确的错误信息。 - 支持中英文城市名称查询。
在 scripts/weather.py 中,你可以使用 Python 编写具体的 API 调用和数据处理逻辑。这部分就是常规的编程工作,用于实现 SKILL.md 中描述的功能。
- 描述清晰准确:AI 的理解完全依赖于你的描述。务必明确参数类型、是否必填、返回值格式。
- 提供丰富示例:示例是**的教学材料。为每个工具提供 1-2 个典型调用示例,能极大提升 AI 的使用正确率。
- 预见边界情况:提前考虑网络超时、参数非法、API 返回错误等异常场景,并在文档中说明建议的处理方式。
- 善用条件加载:通过
requires条件确保 Skill 只在满足运行环境时才被激活,提升整体稳定性。 - 保持功能单一:一个 Skill 最好只专注于一个核心功能或一组紧密相关的工具。功能过于复杂时,应考虑拆分为多个 Skill,便于维护和复用。
OpenClaw 的 Skill 系统将 AI 从单纯的对话伙伴,转变为了能够执行具体任务的工作助手。通过制作自定义 Skill,你可以无限扩展 AI 的能力边界,实现工作流程自动化,并打造个性化的智能体验。
制作过程本身并不复杂,核心在于一份结构清晰的 SKILL.md 文件。从今天开始,尝试为你最常做的重复性工作创建一个 Skill,迈出 AI 赋能的第一步吧。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/273948.html