_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
[ -x "$_ROOT/skill/bin/baiyin-skill-update-check" ] && _UPD=$(bash "$_ROOT/skill/bin/baiyin-skill-update-check" "$_ROOT/skill/baiyin-cover-sing-skill" 2>/dev/null || true)
[ -n "${_UPD:-}" ] && echo "$_UPD"
如果输出 UPGRADE_AVAILABLE :
skill/baiyin-skills-upgrade/SKILL.md,执行其中的「内联升级流程」。AskUserQuestion,使用中文四选一:立即更新 / 以后自动更新 / 暂不更新 / 不再提醒。AskUserQuestion(例如 OpenClaw 当前会话),直接询问用户: 检测到百音技能
如果输出 JUST_UPGRADED :
百音技能 已更新到 v,继续处理你的请求。 如果输出 UP_TO_DATE、SNOOZED、CHECK_DISABLED 或 CHECK_FAILED:
当用户希望通过百音开放平台创建 AI 歌手翻唱任务、查询翻唱进度,或获取最终翻唱结果时,使用这个 skill。
BAIYIN_API_KEYBASE_URL 固定使用 https://ai.hikoon.comBAIYIN_API_KEY 缺失时,才向用户索要 API Key。POST {BASE_URL}/api/open/v1/file/uploadAuthorization: Bearer ,Content-Type: multipart/form-datafile 必填,filename 选填,dir 选填data.url 取公网地址,填入 inputFullUrl 等需要 URL 的字段GET {BASE_URL}/api/open/v1/cover/modelsPOST {BASE_URL}/api/open/v1/cover/singGET {BASE_URL}/api/open/v1/tasks/{taskId}开始创建 AI 歌手翻唱任务前,必须先确认 modelId。
modelId,必须先调用 GET {BASE_URL}/api/open/v1/cover/modelsmodelId 未明确前,不要继续收集 type、reverbType、format、pitchShift 这类次级参数modelId根据用户表达判断当前模式。除非必要,不要要求用户自己选择技术字段名。
modelIdmodelId,先进入模型查询步骤,而不是直接创建任务taskId,或者用户消息里直接提供的 taskId只要已经能组成合法翻唱请求,就不要为了可选字段反复追问用户。
modelIdtaskNameinputFullUrltypereverbTypeformatpitchShifttype = 0reverbType = 3format = "mp3"pitchShift 建议值:+12-12pitchShift 写入请求modelIdtaskNameinputFullUrltype0 或 1。0。reverbType1、2、3。3。formatmp3、wav、m4a、flac。mp3。pitchShift+12-12创建翻唱任务时使用如下基础结构:
{
"modelId": "<user model id>",
"taskName": "<user task name or inferred short name>",
"inputFullUrl": "<optional public audio url>",
"type": 0,
"reverbType": 3,
"format": "mp3",
"pitchShift": 0
}
taskName 等文本字段时,必须确保请求体使用 UTF-8 编码。??、乱码、替代字符当作有效任务名称或结果文本。对于 cover_record 任务,查询接口会返回标准化状态,以及以下结果字段:
recordIdinternalTaskIduserTaskIdaudioUrlinferenceUrlinputFullUrlinputVocalUrlinputInstrumentalUrlformatscore可能状态:
queuedprocessingsucceededfailedprocessing 或 succeeded 后,检查返回结果中的关键文本字段是否可读。??、空值且与原始请求明显不一致,视为异常结果。modelId,就直接创建任务。modelId,先调用 /api/open/v1/cover/models,把可选模型列给用户选。pitchShift 建议值:+12-12taskId。taskId,但用户要查状态或结果,就直接让用户提供 taskId。reverbType、format 这类可选字段;但如果存在明显的男女声转换意图,仍要先提醒 pitchShift 建议值。reverbType = 1。reverbType = 2。reverbType = 3。只有在以下情况下才追问:
modelIdtaskId不要为了确认以下内容单独追问:
inputFullUrltypereverbTypeformatpitchShiftmodelId,先调用 GET /api/open/v1/cover/models。modelId。modelId 明确后,再从用户请求中提取翻唱参数并补默认值。pitchShift 建议值;男转女建议 +12,女转男建议 -12。pitchShift 写入创建请求。taskId、requestId 和当前 status。taskId 调用任务查询接口。taskId。queued 或 processing 就继续等待;状态变成 succeeded 或 failed 就停止。audioUrl、inputVocalUrl、inputInstrumentalUrl 以及其他可用字段。error,不要假装结果已生成。调用 GET /api/open/v1/cover/models 后:
data.rows 作为可选模型列表modelId 和 modelNamedescription、tags、demoUrl、isRecommended 时,一并展示,帮助用户选择modelId 前,不要继续进入创建任务步骤taskIdstatusaudioUrlinputVocalUrlinputInstrumentalUrlinferenceUrlformatscore400 时,说明请求参数不合法或不完整,并让用户修正模型 ID 或请求字段。401 时,说明百音开放平台 API Key 无效或当前环境不可用。402 时,说明账户余额不足。404 时,说明任务不存在,并让用户提供正确的 taskId。failed 时,有后端错误信息就直接返回。示例 1:
Use model_123 to make a cover task called Night SongmodelId = "model_123"taskName = "Night Song"type = 0reverbType = 3format = "mp3"示例 2:
Use model_456 to cover this song: https://example.com/song.mp3modelId = "model_456"inputFullUrl = "https://example.com/song.mp3"taskName示例 3:
帮我做一个 AI 翻唱,但我还没选模型GET {BASE_URL}/api/open/v1/cover/modelsrows 展示给用户选择 modelId示例 4:
Check the last cover tasktaskId from the same conversation when available示例 5:
Show me the result for task_abc123GET /api/open/v1/tasks/task_abc123audioUrl and related fields when status is succeededsucceeded 之前,不要声称翻唱已经完成。queued 或 processing,就如实返回,不要虚构音频结果。inputVocalUrl 或 inputInstrumentalUrl,也要返回已有的 audioUrl 和其他字段。??,必须明确标记为异常结果,不能当作正常成功结果交付。共 5 个版本