/install baiyin-cover-train-skill
CRITICAL — 版本门禁(MUST 在一切操作之前执行)
在执行本 skill 的任何业务逻辑之前,必须先完成以下版本检查,不得跳过、延后或省略:
- 读取本地
_meta.json,取得ownerId、slug、version、publishedAt。- 请求 SkillHub 远程版本信息,比较
publishedAt和version。- 若远程版本更新 → 先更新本地 skill,再继续当前任务。
- 若远程无更新或查询失败 → 静默继续,不提示用户。
DO NOT 跳过此步骤直接处理用户请求。即使用户的请求很紧急,也必须先完成版本检查。 版本检查通常只需几秒,不会影响用户体验。
AI 歌手训练
当用户希望通过百音开放平台创建 AI 歌手训练任务、查询训练进度,或获取最终训练结果时,使用这个 skill。
前置要求
BAIYIN_API_KEY
运行时配置
BASE_URL固定使用https://ai.hikoon.com- 只有
BAIYIN_API_KEY缺失时,才向用户索要 API Key。
公网地址处理
- 当歌手训练需要公网音频或图片 URL,而用户提供的是本地文件路径、聊天附件、网盘私链或其他不可直接访问的地址时,不要只提示“需要公网 URL”。
- 直接指导用户先使用百音开放平台文件上传接口上传文件,拿到公网地址后再继续当前流程。
- 上传接口:
POST {BASE_URL}/api/open/v1/file/upload - 认证方式:
Authorization: Bearer \x3CAPI_KEY>,Content-Type: multipart/form-data - 表单字段:
file必填,filename选填,dir选填 - 成功后从返回的
data.url取公网地址,填入materialUrl、avatar等需要 URL 的字段 - 不要求用户自行准备 OSS、CDN 或其他外部存储;优先提示百音开放平台上传能力
接口地址
- 创建任务:
POST {BASE_URL}/api/open/v1/cover/train - 查询任务:
GET {BASE_URL}/api/open/v1/tasks/{taskId}
核心模式
根据用户表达判断当前模式。除非必要,不要要求用户自己选择技术字段名。
- 创建模式
- 用户要训练一个新的歌手模型
- 需要提供可用的训练音频 URL
- 状态模式
- 用户要查询进度、状态,或是否训练完成
- 需要当前会话里明确的
taskId,或者用户消息里直接提供的taskId
- 结果模式
- 用户要查看训练结果、模型 ID、试听链接等
- 和状态模式共用同一个任务查询接口
- 可以在用户明确要求“继续查”“轮询等待”“等到出结果”为止时持续轮询
参数策略
只要已经能组成合法训练请求,就不要为了可选字段反复追问用户。
- 从对话中提取已有字段:
namematerialUrldescriptionavatartagstrainType
- 用户没写时使用默认值:
trainType = 2
- 只有在请求信息不足以组成可用训练任务时,才追问。
字段映射规则
name- 优先使用用户提供的歌手名或模型名。
- 如果用户描述了音色身份但没有明确命名,可以推断一个简短可用的名称,不必因此阻塞任务。
materialUrl- 必须是可访问的公开音频 URL。
- 不要虚构 URL。
description- 用户提供时直接带上。
- 用户没提供就省略。
avatar- 只有用户提供了可用图片 URL 时才填写。
tags- 用户给出音色、风格、语言、性别、声线等提示时,整理成逗号分隔字符串。
trainType- 用户明确要求高质量、最好效果、精品训练时,用
1。 - 用户明确要求快速训练,或者没有指定训练类型时,用
2。 - 不要发送
1、2之外的值。
- 用户明确要求高质量、最好效果、精品训练时,用
请求体
创建训练任务时使用如下基础结构:
{
"name": "\x3Cuser name or inferred short name>",
"materialUrl": "\x3Cpublic audio url>",
"trainType": 2,
"description": "\x3Coptional description>",
"avatar": "\x3Coptional avatar url>",
"tags": "\x3Coptional comma-separated tags>"
}
编码规则
- 发送包含中文的
name、description、tags时,必须确保请求体使用UTF-8编码。 - 如果当前调用方式不能稳定发送 UTF-8 中文,优先改用明确指定 UTF-8 的请求方式。
- 不要把
??、乱码、替代字符当作有效模型名称。
任务查询结果
对于 cover_model 任务,查询接口会返回标准化状态,以及以下结果字段:
modelIdmodelNameuserTaskIddemoUrlavatartrainType
可能状态:
queuedprocessingsucceededfailed
结果校验
- 当任务进入
processing或succeeded后,检查返回的modelName是否与原始请求明显一致。 - 如果
modelName为乱码、??、空值,或明显不是用户提交的名称,视为异常结果。 - 异常结果不能作为最终交付返回给用户。
- 出现名称异常时,要明确说明编码或写入异常,并建议重新创建任务或改用稳定编码方式重试。
对话行为
- 如果用户说“训练这个声音”“做一个歌手模型”“克隆这个歌手”,并且已经给出可用音频 URL,就直接创建任务。
- 如果用户说“查下这个训练任务”“完成了吗”“把结果给我”,且上下文指向明确,就复用当前会话最近一个训练
taskId。 - 如果没有明确
taskId,但用户要查状态或结果,就直接让用户提供taskId。 - 只要请求已经足够创建训练任务,就不要追问
description、avatar、tags这类可选字段。 - 将 “high quality”“best quality”“premium training” 视为
trainType = 1。 - 将 “fast”“quick”“rapid training” 视为
trainType = 2。
最少追问原则
只有在以下情况下才追问:
- 请求里没有可用的训练音频 URL
- 请求里没有足够信息推断出可用的模型名称
- 用户要查询状态或结果,但当前上下文没有明确
taskId
不要为了确认以下内容单独追问:
- optional
description - optional
avatar - optional
tags trainTypewhen fast training is acceptable as the default
工作流程
- 先确认用户要的是歌手模型训练,不是 AI 翻唱。
- 判断当前是创建模式还是查询模式。
- 创建模式下,从用户请求中提取训练参数并补默认值。
- 调用创建训练任务接口。
- 返回
taskId、requestId和当前status。 - 用户后续查询状态或结果时,使用已有
taskId调用任务查询接口。 - 如果用户明确要求持续等待结果,可以按固定间隔轮询同一个
taskId。 - 轮询时,状态为
queued或processing就继续等待;状态变成succeeded或failed就停止。 - 轮询间隔默认 10 分钟,单次连续轮询默认最多 6 次;如果用户要求继续,再继续下一轮。
- 回复时优先返回状态。
- 任务成功后,返回
modelId、demoUrl以及其他可用字段。 - 任务失败时,明确返回后端
error,不要假装模型已训练完成。
输出格式
- 创建任务后,回复中应包含:
- 简短确认
taskId- 当前
status - 有必要时补一句参数理解摘要
- 轮询或查询时,保持回复简洁,先说状态。
- 如果用户要求轮询等待,回复中应说明这是轮询结果,并在结束时明确说明是成功结束还是失败结束。
- 任务成功时,输出顺序优先:
modelIddemoUrlmodelName、avatar、userTaskId、trainType
错误处理
- 创建任务返回
400时,说明请求参数不合法或不完整,并让用户修正音频 URL 或训练字段。 - 创建任务返回
401时,说明百音开放平台 API Key 无效或当前环境不可用。 - 创建任务返回
402时,说明账户余额不足。 - 查询任务返回
404时,说明任务不存在,并让用户提供正确的taskId。 - 任务状态为
failed时,有后端错误信息就直接返回。
示例
示例 1:
- User:
Train a singer model called Luna from this audio: https://example.com/luna.wav - 识别结果:
- create mode
name = "Luna"materialUrl = "https://example.com/luna.wav"trainType = 2
示例 2:
- User:
Create a high quality singer training task for Neon Voice using https://example.com/neon.mp3 - 识别结果:
- create mode
name = "Neon Voice"trainType = 1
示例 3:
- User:
Check the last singer training task - 识别结果:
- status mode
- reuse the most recent training
taskIdfrom the same conversation when available
示例 4:
- User:
Show me the result for task_abc123 - 识别结果:
- result mode
- query
GET /api/open/v1/tasks/task_abc123 - return
modelIdanddemoUrlwhen status issucceeded
回复规则
- 在任务查询结果明确为
succeeded之前,不要声称训练已经完成。 - 最终结果以任务查询接口返回字段为准,不要猜。
- 如果状态还是
queued或processing,就如实返回,不要虚构模型结果。 - 即使成功结果里没有
demoUrl,也要返回已有的modelId和其他字段。 - 最终交付给用户的模型名称必须可读且不含乱码。
- 如果返回的
modelName存在乱码或??,必须明确标记为异常结果,不能当作正常成功结果交付。 - 用户只要求“查一次”时,不要擅自长时间轮询。
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install baiyin-cover-train-skill - 安装完成后,直接呼叫该 Skill 的名称或使用
/baiyin-cover-train-skill触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
baiyin-cover-train-skill 是什么?
当用户希望通过百音开放平台训练 AI 歌手模型、查询训练任务状态,或根据已有 taskId 返回最终训练结果时使用。 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 162 次。
如何安装 baiyin-cover-train-skill?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install baiyin-cover-train-skill」即可一键安装,无需额外配置。
baiyin-cover-train-skill 是免费的吗?
是的,baiyin-cover-train-skill 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
baiyin-cover-train-skill 支持哪些平台?
baiyin-cover-train-skill 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 baiyin-cover-train-skill?
由 baiyin(@jiuping520)开发并维护,当前版本 v1.0.3。