乐于分享
好东西不私藏

OpenClaw 自定义 Skills 开发实战 —— 自定义生成音乐Skill |

OpenClaw 自定义 Skills 开发实战 —— 自定义生成音乐Skill |

历史文章

微信也能用 OpenClaw!ClawBot 插件接入 OpenClaw 详细指南

微信/企业微信接入腾讯QClaw 一文给你讲清楚 | openclaw系列教程

从0到100万:我用10年打造一人公司的逆袭之路 | 一人公司 | 10年的奋斗里程 | 普通人的逆袭之路 | 真实案例

Seedance 2.0 API 已上线 | 支持「人像视频生成」|支持100并发 | 满血版

折腾了两天,踩了不少坑,写这篇把完整过程记录下来。读完你也能 30 分钟搞出自己的第一个 Skill。

先说结论

步骤

耗时

难度

理解 Skill 结构

5 分钟

写 SKILL.md

10 分钟

⭐⭐

写脚本逻辑

10 分钟

⭐⭐

调试 + 测试

15 分钟

⭐⭐⭐

发布到 ClawHub

5 分钟

一、为什么要自己写 Skill?

(1)个性化和精准需求

现成的技能或者插件往往是通用型的,可能无法完全满足你的业务逻辑或个人需求。自己写 Skill 可以:

  • 定制功能:只做你想要的事情,不多也不少。
  • 精准交互:根据用户场景优化问答流程。
  • 数据掌控:用户数据和逻辑完全可控,不依赖第三方服务。
(2)提升效率和自动化

自己写 Skill 可以把重复的、机械的任务自动化:

  • 自动报表生成
  • 智能提醒
  • 家庭/办公环境控制(比如 IoT 设备)
(3)掌握核心技术能力

开发 Skill 涉及:

  • API 调用
  • 数据处理
  • 自然语言理解(NLU)
  • 对话设计

通过自己开发,你可以理解背后的逻辑,比单纯使用别人技能要深入得多。这在职业技能提升上很有价值。

(4)增值和商业机会
  • 可以为特定行业或企业提供定制化技能服务,形成商业化产品。
  • 自己写的 Skill 可以卖给平台或者企业,甚至自己开通付费服务。

二、OpenClaw Skill 的结构

一个 Skill 其实就是一个文件夹,核心只需要一个文件:

perl 体验AI代码助手 代码解读复制代码my-smart-reviewer/├── SKILL.md          # 必须有,Skill 的灵魂├── scripts/          # 可选,放脚本│   └── analyze.py└── references/       # 可选,放参考文档    └── style-guide.md

SKILL.md 才是真正的「代码」。OpenClaw 读这个文件来理解 Skill 该干什么,说白了就是一份结构化的 prompt。

三、Skill如何编写呢?

如果要手动写的话,对于一般人复杂度还是很高的。

这里我们直接和AI互动的方式来编写这个这个skill。

3.1 梳理skill技能

在这里我们要先梳理下,你要实现一个什么skill,是让Ai生成图片,还是做什么事情?

这里我们我们让Ai生成一个音乐的skill。

那这里就要先准备描述信息。

发起音乐的创建:curl --request POST \  --url https://dzwlai.com/apiuser/_open/suno/music/generate \  --header 'Content-Type: application/json' \  --header 'x-token: 这是访问令牌api key' \  --data '{    "mvVersion""chirp-v5-5",    "inputType""10",    "makeInstrumental""false",    "gptDescriptionPrompt": “来一首”欢快的音乐,    "callbackUrl"""}'响应信息:{    "code"200,    "msg""您已成功提交创作任务,目前剩余并发任务数为9",    "data": {        "taskBatchId""1067069768483733505",        "items": [            {                "id""1860190112013385729",                "inputType""10",                "gptDescriptionPrompt""写一首关于兄弟情义的歌",                "progress"0,                "status"0,                "progressMsg""排队中..."            },            {                "id""1860190112013385730",                "inputType""10",                "gptDescriptionPrompt""写一首关于兄弟情义的歌",                "progress"0,                "status"0,                "progressMsg""排队中..."            }        ]    }}获取音乐状态:curl --request GET \  --url 'https://dzwlai.com/apiuser/_open/suno/music/getState?taskBatchId=音乐任务id' \  --header 'x-token: 这是访问令牌api key' 响应信息:{    "code"200,    "msg""操作成功",    "data": {        "taskBatchId""1081015604557119489",        "taskStatus""finished",        "items": [            {                "id""1874135948011253762",                "inputType""10",                "makeInstrumental"false,                "prompt""[Verse]\n星光灿烂 夜色朦胧\n孤身一人 梦在路中\n风吹草动 掠过心头\n勇敢前行 不问结果\n\n[Verse 2]\n灯火阑珊 路途寂寞\n披星戴月 心火闪烁\n冰冷夜晚 难以言说\n创业之路 坎坷也走\n\n[Chorus]\n在路上 勇敢追梦\n跌倒再起 不怕坎坷\n沿途风景 无法描述\n心中信念 不曾退缩\n\n[Verse 3]\n黎明前奏 乌云散开\n心心相印 沉默期待\n茫茫天地 携手同行\n创无限未来 希望常在\n\n[Bridge]\n梦想如海 无边无际\n每次失败 亦有新意\n从不后悔 选择远行\n在路上 我们守望\n\n[Chorus]\n在路上 勇敢追梦\n跌倒再起 不怕坎坷\n沿途风景 无法描述\n心中信念 不曾退缩",                "gptDescriptionPrompt""歌曲名称《在路上》,低沉的歌声,让所有创业者共鸣   ,把这个改一下,我来改好词给你,",                "title""在路上",                "tags""acoustic, reflective, folk",                "negativeTags""",                "clipId""fa03ad72-b5ef-4ad4-a981-bcfa458a6e29",                "duration"139.0,                "progress"100,                "status"30,                "cld2AudioUrl""https://cdn1.suno.ai/fa03ad72-b5ef-4ad4-a981-bcfa458a6e29.mp3",                "cld2ImageUrl""https://cdn2.suno.ai/image_b639f4e1-549b-4147-bfb8-a9564505951d.jpeg",                "progressMsg""Production completed"            },            {                "id""1874135948011253763",                "inputType""10",                "makeInstrumental"false,                "prompt""[Verse]\n星光灿烂 夜色朦胧\n孤身一人 梦在路中\n风吹草动 掠过心头\n勇敢前行 不问结果\n\n[Verse 2]\n灯火阑珊 路途寂寞\n披星戴月 心火闪烁\n冰冷夜晚 难以言说\n创业之路 坎坷也走\n\n[Chorus]\n在路上 勇敢追梦\n跌倒再起 不怕坎坷\n沿途风景 无法描述\n心中信念 不曾退缩\n\n[Verse 3]\n黎明前奏 乌云散开\n心心相印 沉默期待\n茫茫天地 携手同行\n创无限未来 希望常在\n\n[Bridge]\n梦想如海 无边无际\n每次失败 亦有新意\n从不后悔 选择远行\n在路上 我们守望\n\n[Chorus]\n在路上 勇敢追梦\n跌倒再起 不怕坎坷\n沿途风景 无法描述\n心中信念 不曾退缩",                "gptDescriptionPrompt""歌曲名称《在路上》,低沉的歌声,让所有创业者共鸣   ,把这个改一下,我来改好词给你,",                "title""在路上",                "tags""acoustic, reflective, folk",                "negativeTags""",                "clipId""71359d0d-1d92-4d88-93a0-df7bccf85727",                "duration"143.0,                "progress"100,                "status"30,                "cld2AudioUrl""https://cdn1.suno.ai/71359d0d-1d92-4d88-93a0-df7bccf85727.mp3",                "cld2ImageUrl""https://cdn2.suno.ai/image_a6cd0b65-0b99-4e23-9476-17bdcd90d226.jpeg",                "progressMsg""Production completed"            }        ]    }}taskStatus的取值为 createprocessingfinished; finished 完成(用于结束获取音乐生成状态的的判断)包括创作成功和创作失败的情况

3.2 开始制作Skill

先和Ai互动一下,输入提示词:如何自定义skill呢?

ok,可以开始制作了,将刚刚准备好的信息发给Ai:

发给Ai之后,Ai就开始工作了。

3.3 测试Skill

到这里,就可以开始测试了,如果需要api key的话,将api key给ai:

整体流程没有问题,确实生成了音乐。

3.4 优化Skill

上面整体流程是没有问题的,但是会发现无法让自己输入提示词,这时候就要让AI来修改skill。
提示词:整体流程可以,但是你要让我输入这个提示词,对应字段是gptDescriptionPrompt,然后才能开始生成音乐。

3.5 重新走一遍流程

这个时候可以重新走一遍流程:

流程验证通过: 用户输入描述 → 发起创作 → 轮询状态 → 返回音频链接。整个 skill 工作正常。流程

3.6 发布流程

如果你不知道如何发布,也可以和AI沟通:

四、Skill发布

还是咱们一起来手动操作看看。这里用上传到github仓库的方式来进行方式,各大平台大差不差。

地址:https://github.com/

第一步新建一个仓库New repository:

第二步上传这个skill:

你获取的到有可能是 .skill的格式,但实际这个是一个zip的压缩包格式,手动将这个修改为.zip ,然后解压:

将这个目录上传到github上即可:

最后得到这么一个链接地址:

https://github.com/openclaw-ai-opc/suno-music-skill

五、导入Skill进行使用

导入skil可以和ai互动,也可以通过界面的导入按钮进行导入。

输入地址即可:

这个时候就可以正常的进行使用这个skill了。

六、Skill结构解读

这个时候,再来理解这个skill的内容就会好理解很多。

6.1 SKILL.md

---name: suno-musicdescription: AI音乐生成技能。通过 Suno API 创建音乐作品。触发场景:用户要求"生成音乐""创作歌曲""写歌""AI音乐""生成BGM"等。支持自然语言描述生成音乐,自动轮询获取生成结果。---# Suno AI 音乐生成## 概述通过 Suno API 实现AI音乐生成。用户只需用自然语言描述想要的音乐风格、主题或内容,系统自动完成音乐创作并返回音频链接。## 快速开始### 1. 发起音乐创作使用 `scripts/generate_music.py` 发起创作任务:```bashpython scripts/generate_music.py --token "<API_TOKEN>" --prompt "欢快的音乐" [--instrumental]```参数:`--token` (必填): API 访问令牌`--prompt` (必填): 音乐描述(风格、主题、歌词提示等)`--instrumental` (可选): 设为 `true` 生成纯音乐(无歌词)`--callback-url` (可选): 回调地址### 2. 查询生成状态使用 `scripts/get_music_state.py` 轮询获取结果:```bashpython scripts/get_music_state.py --token "<API_TOKEN>" --task-batch-id "<TASK_BATCH_ID>"```参数:`--token` (必填): API 访问令牌`--task-batch-id` (必填): 任务批次 ID(发起创作时返回)## 工作流程1. **调用 generate_music.py** 发起创作,获取 `taskBatchId`2. **轮询 get_music_state.py** 检查状态(建议间隔 10-30 秒)3. **状态为 finished 时** 获取音频 URL(`cld2AudioUrl` 字段)### 状态说明| taskStatus | 含义 ||------------|------|`create` | 任务创建中 |`processing` | 正在生成 |`finished` | 已完成(成功或失败) |单个任务 `status` 字段:`0` 排队中,`30` 生成完成## 输出示例每批创作返回 2 首歌曲,包含:`title`: 歌曲标题`duration`: 时长(秒)`cld2AudioUrl`: 音频下载链接`cld2ImageUrl`: 封面图片链接`prompt`: AI 生成的歌词## 注意事项- API Token 需要用户自行获取并配置- 创作并发数有限制(响应中会提示剩余并发数)- 建议用自然语言描述风格,如"欢快的流行音乐""低沉的民谣"

让我们拆解这个文件的关键部分:

必填字段:

  • name
    :技能名称,最长 64 个字符,必须和目录名一致
  • description
    :技能描述,这是最关键的字段——AI 就是根据这段描述来判断什么时候该用这个技能

可选但实用的字段:

  • requires.bins
    :运行这个技能需要哪些命令行工具
  • requires.env
    :需要哪些环境变量(比如 API Key)
  • install
    :如何一键安装所需依赖
  • os
    :支持的操作系统

Markdown 正文: 就是用自然语言写的操作指南,告诉 AI “第一步做什么、第二步做什么、遇到什么情况怎么处理”。

6.2 Scripts

这个是脚本,就是要执行什么脚本进行什么操作。

#!/usr/bin/env python3"""Suno AI 音乐生成 - 发起创作任务"""import argparseimport jsonimport urllib.requestimport urllib.errorAPI_URL = "https://dzwlai.com/apiuser/_open/suno/music/generate"def generate_music(token: str, prompt: str, instrumental: bool = False, callback_url: str = "") -> dict:    """    发起音乐创作任务    Args:        token: API 访问令牌        prompt: 音乐描述(风格、主题、歌词提示等)        instrumental: 是否生成纯音乐(无歌词)        callback_url: 回调地址(可选)    Returns:        API 响应 JSON    """    payload = {        "mvVersion""chirp-v5-5",        "inputType""10",        "makeInstrumental"str(instrumental).lower(),        "gptDescriptionPrompt": prompt,        "callbackUrl": callback_url    }    headers = {        "Content-Type""application/json",        "x-token": token    }    data = json.dumps(payload).encode("utf-8")    req = urllib.request.Request(API_URL, data=data, headers=headers, method="POST")    try:        with urllib.request.urlopen(req, timeout=30as response:            return json.loads(response.read().decode("utf-8"))    except urllib.error.HTTPError as e:        error_body = e.read().decode("utf-8"if e.fp else ""        return {"code": e.code, "msg"f"HTTP Error: {e.code}""error": error_body}    except urllib.error.URLError as e:        return {"code": -1"msg"f"Connection Error: {e.reason}"}def main():    parser = argparse.ArgumentParser(description="Suno AI 音乐生成 - 发起创作任务")    parser.add_argument("--token", required=Truehelp="API 访问令牌")    parser.add_argument("--prompt", required=Truehelp="音乐描述")    parser.add_argument("--instrumental", action="store_true"help="生成纯音乐(无歌词)")    parser.add_argument("--callback-url", default=""help="回调地址")    args = parser.parse_args()    result = generate_music(        token=args.token,        prompt=args.prompt,        instrumental=args.instrumental,        callback_url=args.callback_url    )    print(json.dumps(result, ensure_ascii=False, indent=2))    # 如果成功,提取 taskBatchId 便于后续查询    if result.get("code") == 200:        data = result.get("data", {})        task_batch_id = data.get("taskBatchId")        if task_batch_id:            print(f"\n💡 查询命令: python scripts/get_music_state.py --token <TOKEN> --task-batch-id {task_batch_id}")if __name__ == "__main__":    main()

这里用的python的脚本信息。

总结

好了,看到这里,你可能已经心里暗暗嘀咕:哇,这也太复杂了吧?别急,实际操作起来,比你想象的简单多了——理解结构、写描述、敲几行脚本、点几下按钮,30 分钟,你也能拥有自己的 AI 小助手。

写 Skill 就像做饭:一开始看着食谱可能手忙脚乱,但其实大部分步骤都是“加点料、翻翻锅、尝尝味”。唯一不同的是,这锅里炖的不是红烧肉,而是你专属的 AI 技能——生成音乐、自动报表、智能提醒,随你调料。

最棒的是,你自己动手写 Skill,不只是省了找别人“量身定制”的麻烦,还顺便把技术小宇宙点燃了。说不定哪天,你的 Skill 就成了朋友圈炫耀的神器,或者小小的商业机会。

所以,别再犹豫了,动手试一试,让你的 AI 也“听你号令”,下一首爆款音乐,说不定就是你做出来的!

最近开通了知识星球,想一起的,可扫码加入OpenClaw·Ai一人公司一起探索Ai一人公司变现,加入可领取100G的资料直接回本。

目前已经加入 190+ 人,一起探索Ai一人公司副业赚钱

星球合伙人招募:如果你有想法也可以申请成为我们的星球合伙人!

历史文章

一个程序员,如何用AI做一人公司开始赚钱

一夜之间,全行业都在做“龙虾”:谁在抢AI的控制权?

QClaw这只虾都能干啥呢?我不会养了一只废虾吧?? | QClaw超详细使用教程

微信也能用 OpenClaw!ClawBot 插件接入 OpenClaw 详细指南

OpenClaw🦞 3.22 发布:沉默9天,龙虾终于爆发!openclaw系列教程

微信/企业微信接入腾讯QClaw 一文给你讲清楚 | openclaw系列教程

QQ接入腾讯QClaw接入指南 | OpenClaw系列

飞书接入腾讯QClaw | OpenClaw系列

钉钉接入腾讯QClaw | OpenClaw系列

腾讯上线国内首个浏览器“龙虾”——QQ 浏览器QBotClaw

教你用QClaw定制每日新闻:腾讯新闻 Skills 上手指南 | SkillHub仓库的使用

从0到100万:我用10年打造一人公司的逆袭之路 | 一人公司 | 10年的奋斗里程 | 普通人的逆袭之路 | 真实案例

Seedance 2.0 API 已上线 | 支持「人像视频生成」|支持100并发 | 满血版 [灵龙AI API]