关于 voice
voice 是用于生成文本转语音旁白和音效的 ChatCut 技能,涵盖音色选择与管理、经授权的声音克隆,以及让旁白配合视觉编辑的工作流。
主要功能
- 01根据文本生成旁白
- 02管理并试听音色选项
- 03克隆获授权的声音参考
- 04添加富有表现力的语气提示
- 05生成自定义音效
- 06支持旁白同步工作流
适用场景
- 01为视频制作旁白
- 02在生成 TTS 前试听音色
- 03用克隆音色替换说错的短语
- 04根据描述制作音效
MCP 相关
该技能使用 ChatCut 工具,包括用于音色目录与管理的 `manage_voice`、用于 TTS 的 `submit_voice`,以及用于音效的 `submit_sound`。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ chatcut-inc/ agent-plugin --skill voice安装后在 Claude Code 中输入/voice确认已加载。
附带文件references/fix-spoken-mistakes.mdreferences/video-sync.md
详细介绍
语音与音效生成器
如果尚未加载 submit_voice、manage_voice、pull_asset 或 submit_sound,请先使用 ToolSearch 加载它们,再调用,以便使用其实际参数,而不是猜测参数。
生成配音(TTS)和音效。对于 TTS,请在调用 submit_voice 前选择具体的服务提供商和语音。
适用场景
- 根据文本生成配音/旁白
- 为视频创建文本转语音音频
- 为现有视频、时间线、屏幕录制、幻灯片动画、产品演示、B-roll 剪辑、MG 解说或其他视觉序列添加、替换或重做旁白/配音
- 在剪辑、加速、减速、移动、重新排序或替换视觉内容后,让现有旁白/配音继续与其所描述的内容保持同步
- 如果用户尚未选择具体语音,提供 TTS 语音选项并试听
- 根据参考音频克隆用户本人的声音或经明确授权的声音
- 使用经授权说话者的克隆声音,纠正实际说错的单词或短语,同时保留画面和后续时间安排
- 仅在先检查音效库后,才根据文本描述生成自定义音效
TTS(文本转语音)
如果用户想要纠正现有录音中实际读错的某个词或短语,请先阅读 references/fix-spoken-mistakes.md,再进行编辑或生成。该工作流会保留画面并保护后续时间安排,只替换有问题的声音。如果录音本身正确,只是转录文本有误,请勿使用合成语音;应直接修正转录文本。完整改写或制作全新的配音时,请使用常规旁白流程。
如果当前请求有现成的视觉目标,且用户想为该目标添加旁白、配音、对口型配音或替换语音,请在起草新旁白、使用现有旁白文本生成 TTS 或放置音频之前,先阅读 references/video-sync.md。即使用户没有明确说“同步”或“匹配画面”,也要这样做;只要存在视觉目标,旁白的时间安排和含义就可能需要配合屏幕内容。只有在没有视觉目标,或用户只想根据文本制作音频资源时,才使用常规的独立 TTS 流程。
如果时间线上已有旁白或配音,而用户要求在保持配音同步的同时更改画面,也请阅读 references/video-sync.md。即使不需要生成新的 TTS,这仍属于同步维护任务。
使用 manage_voice 作为统一的目录和管理入口,并使用
submit_voice 进行最终 TTS 生成。manage_voice action="list" voiceType="all"
会在一个标准化列表中返回官方和克隆音色。只有
voiceType="custom" 支持创建访问权限、应用、克隆、预览、重命名或删除操作。当前接口约定如下:
- 必须提供
provider。中文优化旁白使用doubao,英文或多语言旁白使用elevenlabs,现成的 ChatCut 自定义音色使用fish-audio。 - 必须提供
voiceId,且该参数因提供方而异。请勿混用不同目录。 submit_voice只会创建音频资源。时间线放置、替换、裁剪和对齐需稍后使用时间线工具完成。- 对于长篇旁白,多次调用
submit_voice会很有用:当工作流需要分别定时或放置语音片段时,可按自然停顿、句组或脚本节拍边界拆分,例如分镜节拍、场景级广告片段,或用户要求制作单独资源时。 - 对于 Doubao,支持使用
speedRatio、loudnessRatio、pitch、emotion、emotionScale、performancePrompt和explicitDialect这些参数进行调节,但并非所有音色都支持每项表现控制。请以manage_voice action="list"返回的所选官方条目为准。 - 对于 ElevenLabs,支持使用
modelId、speed和stability这些音色参数。对于eleven_v3,可在文本中使用内联音频标签,以实现情绪、语气、非语言提示、口音提示、停顿或局部语速等表现效果。 - 对于
fish-audio,将现成音色的 ChatCutcustomVoiceId作为voiceId传入。submit_voice会执行权威的 Pro/就绪状态检查、创建生成任务,并在成功后扣除标准 TTS 点数。切勿传入或索取提供方内部的 Fish 模型 ID。当前 Fish S2.1 模型支持在text中使用方括号内联提示,以控制局部情绪、表达方式和副语言效果。
对用户隐藏音色提供方信息
Doubao、ElevenLabs、Fish Audio、它们的模型名称及其他提供方身份信息,都是内部实现细节。切勿在面向用户的回复、进度更新、音色推荐、试听卡片、克隆说明、成功摘要或错误信息中披露或归因于这些信息。请改用 ChatCut 产品用语:
- 将精选目录中的音色称为
official voices/官方音色。 - 将已保存的自定义音色称为
cloned voices/克隆音色、My Voices/我的音色,或使用用户可见的已保存名称。 - 在 ChatCut 功能层面描述状态和失败。如果工具或 提供商错误中包含提供商名称、模型名称、提供商音色 ID 或 提供商 URL,请保留可操作的含义,但在回复前移除这些详细信息。
提供商名称和提供商专用 ID 仅在内部工具参数、工具结果解读以及这些实现说明中 有效。请勿将它们从工具输出复制到可见的 UI 元数据或文案中。
官方音色控件来自 manage_voice action="list":
- 针对目标旁白语言和用户可见的区域设置调用它。
将返回的每个
(provider, voiceId, name, summary, sampleUrl, capabilities)元组视为不可拆分的整体。 - 仅使用该条目
capabilities.supportedControls中的字段;切勿根据记忆中的音色名称或系列 推断控件支持情况。 - 控件不能保证特定的表演风格。使用返回的标签和示例来挑选自然合适的音色,然后使用受支持的 控件适度调整表达。
- 对于声明支持
audioTags的条目,当用户要求富有表现力的演绎,例如情绪、语气、非语言提示、口音提示或局部语速时,可使用内联音频标签。官方示例适用于以下实用的 TTS 类别: - 情绪/语气标签包括
[happy]、[sad]、[angry]、[excited]、[curious]、[sarcastic]、[crying]、[annoyed]、[appalled]、[thoughtful]、[surprised]和[mischievously];发声方式和 非语言提示标签,例如[whispers]、[laughs]、[sighs]、[exhales]、[inhales deeply]、[clears throat]、[snorts]、[swallows]、[wheezing]和[coughs]; 语速/停顿/局部速度标签,例如[slowly]、[pause]、[short pause]、[long pause]、[rushed]和[drawn out];以及 口音/特殊表演标签,例如[strong X accent],如[strong French accent],以及[sings]、[singing]、[woo]和[pirate voice]。官方示例并未涵盖所有情况;当用户明确 要求这种演绎时,可以尝试类似的听觉标签,且标签应描述音色听起来的效果,而非 视觉动作。将标签直接写入text,并放在其所影响的短语附近。将标签视为局部提示,而非 整段文本的控制项。 - 对于停顿和语速,可根据需要使用标点、文本结构、
较短的生成片段或
[short pause]和[slowly]等局部音频标签。
Fish Audio 对克隆音色的控件支持:
- 当前的
fish-audio路由使用 Fish S2.1。请在submit_voice.text中直接用方括号加入简洁的自然语言提示,例如[happy]、[calm]、[angry]、[excited]、[whisper]、[laugh]、[sigh]、[gasp]、[pause]、[emphasis]、[inhale]或[exhale]。 S2.1 不限于固定的标签列表,因此[whispers sweetly]或[laughing nervously]这样的具体听觉描述也有效。 - 将提示放在它要影响的短语或时刻前。Fish S2.1 接受文本中的任意位置加入提示,因此可以用多个简短提示实现局部过渡,例如
[calm] 先别着急。[excited] 好消息是,我们已经找到解决办法了!或I thought it was over [gasp] but then the lights came back [relieved]. - 谨慎使用提示,仅在所需的表达方式能从中受益时添加。过渡处优先使用一条清晰指令,避免叠加相互冲突的指示。请将生成结果视为模型指引,而非确定的编辑边界;如果需要精确控制片段级时序或分别重试,请拆分为多个
submit_voice调用。 - 不要在此路由中使用 Fish S1 的旧版
(parenthesis)情绪语法,也不要添加单独的emotion参数:S2.1 提示应放在text中。默认的声音克隆预览句不要加标签。不要代替用户给自定义预览添加提示,但应保留用户有意加入的提示,且不得超过 100 个字符的预览限制。
// English / multilingual via ElevenLabs
mcp__skill__submit_voice({
provider: "elevenlabs",
text: "Hello world",
voiceId: "peter",
});
// Chinese via Doubao
mcp__skill__submit_voice({
provider: "doubao",
text: "你好世界",
voiceId: "liuchang",
});
// With speed adjustment (Doubao only)
mcp__skill__submit_voice({
provider: "doubao",
text: "这是一段稍快的中文旁白。",
voiceId: "liuchang",
speedRatio: 1.5,
});
// With expressive Doubao controls
mcp__skill__submit_voice({
provider: "doubao",
text: "这次事故提醒我们,安全永远不能侥幸。",
voiceId: "liuchang",
emotion: "sad",
emotionScale: 3,
performancePrompt: "痛心但克制,语速稍慢,像新闻专题旁白",
pitch: -1,
speedRatio: 0.92,
});
// With ElevenLabs delivery controls
mcp__skill__submit_voice({
provider: "elevenlabs",
text: "The launch changed how teams plan their daily work.",
voiceId: "peter",
speed: 0.95,
stability: 0.4,
});
// With local Fish Audio S2.1 delivery cues on a ready cloned voice
mcp__skill__submit_voice({
provider: "fish-audio",
voiceId: "<confirmed custom voice id>",
text: "[calm] 先别着急。[excited] 好消息是,我们已经找到解决办法了!",
name: "Expressive custom voiceover",
});
生成前试听语音
仅在最后一步发出原生克隆入口
<clone-voice/> 是可执行的编辑器操作,不是散文、代码或内部流程标签。切勿引用它、用反引号包裹、将其描述为下一步,或在进度更新、工具调用前的说明、计划或其他中间助手消息中发出它。
请先完成所有必要的检查和工具调用。如果之后仍应使用原生对话框,请按照下方 原生 ChatCut 编辑器 中的 进入对话框步骤 操作。该步骤必须是本次运行中面向用户的最后一条助手消息:在完成提醒之后不要再调用工具、添加任何内容,也不要再次发出该标签。单次 Agent 运行最多只能呈现一个独立的原生克隆入口。
按宿主和可用参考音频选择克隆路径
在加载 widget-forms 或询问克隆所需输入之前,先确定宿主路径:
- 在原生 ChatCut 编辑器中,先检查用户是否已提供可读取的音频附件,或明确指出可访问的、包含音频的 ChatCut 资产用于此次克隆请求,包括时间线中的音频或视频项目。如果是,不要让用户再次选择同一来源,也不要输出
<clone-voice/>。解析或派生其音频资产,运行创建前检查,只收集缺少的名称、预览文本和明确授权,然后使用下文的 Agent 驱动克隆流程。 - 在原生 ChatCut 编辑器中,只有在用户尚未提供可用参考音频时,才使用编辑器对话框。遵循下文 自定义语音克隆 中的原生对话框路径。
- 在外部 Codex / Claude 宿主中,绝不要输出
<clone-voice/>;这些宿主不会呈现或分发原生编辑器操作。请使用下文的 Agent 驱动附件流程。
项目中已有的任意语音都不构成同意,也不能作为克隆参考。只有当用户为当前克隆请求提供或指出了音频,并且之后给出了下文要求的完整授权时,才使用直接路径。
当用户明确选择时间线中的音频项目时,使用 preview_timeline 解析该项目及其源范围。对于时长为 10 秒到 3 分钟的音频资产,直接复用。对于视频,使用 pull_asset,再用 ffmpeg 按支持的音频格式提取所选片段,然后加载 asset-import 并使用 push_asset 上传结果。对于任何超过 3 分钟的来源,截取一段干净的 30–60 秒片段;如果不足 10 秒,则请用户提供更长的参考音频。继续使用所得的音频资产 id,不要输出 <clone-voice/>;选择来源不等于授权。
根据实时状态选择交互方式
将统一语音查询视为必经步骤。每当用户请求 TTS,却未指定具体的官方语音或自定义语音,也未明确选择语音克隆时:
- 如果尚未加载
manage_voice,使用ToolSearch加载它。 - 调用
manage_voice action="list" voiceType="all",并提供目标旁白语言、对话区域设置以及任何有用的官方语音筛选条件。 - 仅将返回的标准化
voices列表作为候选目录。该列表已将克隆语音排在匹配的官方语音之前。
在推荐或呈现任何语音选择界面之前,必须完成这些步骤。绝不要根据聊天记录或静态 Skill 文件推断用户保存的语音或官方语音。
明确请求克隆语音,已经构成了具体的来源选择。在这种情况下,不要仅仅为了从官方语音和克隆语音中选择而调用合并列表。首先确认当前请求是否已提供可用参考音频;然后执行 manage_voice voiceType="custom" action="check-create-access",再遵循所选宿主路径。只有在完成上述工作后,才能按照最终操作规则显示独立的原生入口。
请求使用用户自己的语音进行旁白(例如“我自己的声音”“我的自定义语音”,或在尚无可用自定义语音时进行克隆的工作流),同样属于具体的来源选择,而不是请求查看官方选项。检查用户的自定义语音:只试听已就绪的语音以及 Clone another voice;如果没有已就绪的语音,则直接走克隆路径。只有在用户拒绝克隆或主动询问官方语音时,才提供官方语音。克隆语音的旁白由文本合成,因此可以使用说话者从未录制过的语言;用户不会说某种旁白语言,应成为使用其克隆语音的理由,而绝不是切换到官方语音的理由。
Agent 可以根据旁白文本推断合适的语气、情绪、表达方式或使用场景建议。请将这些内容视为推荐信号,而不是用户对音色来源的选择。合理的推断绝不能排除下方组合试听界面中已就绪、可播放的自定义音色。
在渲染任何内容之前,先对请求进行分类:
- **请求使用本人音色:**遵循上述本人音色规则;绝不能用官方音色试听来回应。
- **指定了具体自定义音色:**用户指定了一个已就绪的自定义音色,或选择了唯一一个已命名的自定义音色选项时,使用该自定义音色。如果用户选择
Choose my cloned voice,且有多个音色已就绪,则只展示这些已就绪的自定义音色作为可播放选项,然后再继续。 - **指定了具体官方预设:**使用或确认该预设;不要重新打开音源选择分支。
- **已选择克隆操作:**仅在此时,于下一条回复中立即进入上述针对宿主的克隆流程。不要等用户再次提出要求,不要让他们打开菜单或面板,也不要让这个选项处于未处理状态。在原生编辑器中,先完成任何必要的检查或预检,再进入对话框;在外部 Codex / Claude 宿主中,开始附件流程。
- **至少有一个已就绪的自定义音色,但未指定具体音色:**渲染一个组合的可播放试听界面。先放置具有真实
previewUrl的已就绪自定义音色,再添加 2-4 个带可播放样本的合适官方音色,最后放置Clone another voice。不要询问仅有文本的已保存音色与官方音色来源问题,也不要使用<choices/>。 - **没有已就绪的自定义音色,且未指定音色偏好:**推断一小组多样且普遍适用的 2-4 个官方音色,将它们渲染为可播放卡片,最后放置
Clone my voice。不要使用仅有文本的来源选项。 - **没有已就绪的自定义音色,但有音色要求:**优先使用明确的要求,例如“中年男性”“温暖的女性”或“专业”;否则,可以根据旁白内容合理推断特征并用于推荐。展示 2-4 个匹配的官方可播放卡片,并在同一个选择界面中放置一个克隆操作卡片。不要在此回复末尾附加独立的
<clone-voice/>按钮。
将分支标签本地化,并根据当前状态调整。含义如下:
- 中文:
- 已命名的自定义音色:
使用「<name>」 - 自定义音色列表:
选择我的克隆音色 - 精选目录:
选择官方音色 - 首次克隆:
克隆我的音色 - 额外克隆:
克隆新音色
- 已命名的自定义音色:
- 英文:
- 已命名的自定义音色:
Use “<name>” - 自定义音色列表:
Choose my cloned voice - 精选目录:
Choose an official voice - 首次克隆:
Clone my voice - 额外克隆:
Clone another voice
- 已命名的自定义音色:
- 西班牙语:
- 已命名的自定义音色:
Usar «<name>» - 自定义音色列表:
Elegir mi voz clonada - 精选目录:
Elegir una voz oficial - 首次克隆:
Clonar mi voz - 额外克隆:
Clonar otra voz
- 已命名的自定义音色:
如果尚未提供可用参考,原生中文示例:
<widget>
<form-visual id="voiceId" label="请选择并试听音色" media-kind="audio" required="true">
<visual-option value="<returned voiceId>" name="<returned localized name>" summary="<returned summary>" media="<returned sampleUrl>" media-kind="audio"/>
<visual-option value="clone_voice" name="克隆我的音色"/>
</form-visual>
</widget>
如果尚未提供可用参考,对话框操作应放在可播放网格中:
<visual-option value="clone_voice" name="克隆我的音色" />
在常规音色选择过程中,始终提供一条合适的克隆路径,但绝不要在同一条回复中同时显示克隆操作卡片和独立的原生 <clone-voice/> 入口。用户选择克隆后会发生什么,取决于服务提供方是否可用、套餐和配额;这些因素不应影响是否显示克隆选项。提供该选项不需要用户同意;只有在调用克隆工具之前,才需要明确许可和受支持的参考内容。特定场景的参考可以有意采用更精简的试听界面,不提供克隆操作,并在正文中说明直接从项目克隆的备用方案。
在推荐、渲染或提交 TTS 音色选项之前,请使用当前的 manage_voice action="list" voiceType="all" 结果。该结果是 ChatCut Web、Desktop 和已发布插件共享的实时目录。不要根据记忆、翻译后的名称、文件名或宽泛描述创建音色选项。
首先确定两种不同的语言:
- 用户对话语言:用户与你交谈时使用的语言。用于周边文案、选项名称和摘要。
- 目标旁白语言:将要合成的文本所使用的语言。仅用于选择提供方和语音目录。
在收集输入或呈现选项之前,先加载 widget-forms。该技能负责当前宿主的表单、附件和媒体卡片行为。本技能负责语音候选项、必填字段、安全规则,以及传递给语音工具的资源 ID。不要在此处嵌入特定宿主的 UI 说明。
“help me generate ... voice over in Chinese” 是用英语提出的中文旁白请求,因此试听组件文案应使用英语,语音候选项应来自 Doubao。
对于官方语音试听:
- 调用
manage_voice action="list" voiceType="all",并传入目标旁白的language、用户对话的locale,以及任何明确提出的性别、年龄、语气或使用场景要求。如果用户没有明确提出这些要求,可使用简洁的推断语气或使用场景查询来筛选官方候选项。应将推断出的特征表述为建议,而非用户明确提出的偏好。如果没有匹配的官方语音,只放宽可选筛选条件,并清楚说明最接近的受支持选项;绝不要因为返回的可播放自定义语音缺少官方目录标签就将其排除。 - 优先展示返回的、已就绪且带有试听音频的自定义语音,之后再展示 2-4 个返回的官方语音。
- 加载
widget-forms并请求一个必选的playable_single_choice。每个官方选项都要提供同一返回元组中的voiceId、本地化name、summary和匹配的sampleUrl。原样提供sampleUrl;绝不要添加推断出的 S3、CDN、编辑器、本地主机或生产环境基础 URL,也不要根据文件名格式重建 URL。这与自定义语音的previewUrl不同;后者必须严格按照manage_voice返回的内容使用。 - 在每个常规推荐/选择界面上,始终添加一个无媒体操作选项,并将其稳定值设为
clone_voice,作为最后一张卡片。如果没有已就绪的自定义语音,标签为Clone my voice;如果有,则为Clone another voice;请按上述含义本地化。在原生 ChatCut 中,这是一个不带media的紧凑型<visual-option>,而不是单独的按钮。在外部宿主中,则使用等效的纯标签选项。特定场景的参考内容可以明确要求用更窄的界面替代此常规界面。 - 等待用户选择。如果答案对应
clone_voice,则在下一轮呈现特定宿主的克隆入口/工作流;不要在试听回复中直接开始克隆。在原生编辑器中,克隆卡片会直接打开克隆对话框,并将保存的语音返回同一个选择器,因此提交的答案已经是附带语音上下文的自定义语音。 - 对于官方语音,调用
submit_voice,并原样传入所选元组的provider和voiceId。 - 对于现有自定义语音,调用
manage_voice voiceType="custom" action="apply",并传入其完整映射的customVoiceId。用户请求生成最终语音时,将同一 ID 作为voiceId传给submit_voice,并设置provider: "fish-audio"。
对于仅包含自定义语音的试听,应纳入每个相关的、状态为 ready 且带有 previewUrl 的自定义语音。将完整的 customVoiceId 用作其稳定值,将存储的名称用作显示标签(若有 previewText,则将其用作摘要),并将工具原样返回的 previewUrl 用作音频媒体。不要复制、下载、改写该 URL,不要通过主机名验证它,也不要编造该 URL。如果已就绪的语音缺少试听内容,则应从试听界面中省略,而不是将其做成无法播放的纯文本卡片。
确保每个选项的类型、提交 ID、显示标签、预览、摘要和功能都与同一个 manage_voice 元组绑定。目标旁白语言用于筛选官方条目;对话语言用于控制所有可见文案。将标签到元组的映射保留在上下文中,这样即使宿主返回的是可见标签,也能在无需再次确认的情况下映射答案。
自定义音色克隆
音色克隆是一个需要取得同意的独立流程。在选择音色时主动提供此选项是必须的,但这不等于开始克隆。切勿仅因为项目中有一段音频,就克隆第三方的音色。
原生 ChatCut 编辑器
如果用户尚未为本次克隆请求提供可用的参考音频附件或 ChatCut 音频资源,请委托现有编辑器对话框创建,并遵循下方的进入对话框顺序。不要先在 Agent 小组件中询问音色名称、语言、上传参考音频或授权。对话框负责重新检查使用权限和名额、录音/上传、授权、持久化源文件、注册到 Fish Audio、预览和重试。
如果用户已为本次克隆请求提供可用的参考音频,则不要让他们重新打开对话框,也不要要求他们重新选择文件。请遵循下方的基于可用参考音频由 Agent 驱动克隆。创建预检成功后,只收集缺失字段:明确授权、音色名称和预览文本。然后调用 manage_voice voiceType="custom" action="clone",并传入解析后的 ChatCut 音频资源 ID。
对于对话框流程,由 Agent 负责展示入口。用户选择克隆分支后,立即:
- 用一句简短、自然的话告诉用户,可以点击下方按钮开始克隆。
- 单独一行原样呈现
<clone-voice/>。 - 添加一句简短的本地化提示,说明保存音色后,编辑器会将它放入消息框,发送该消息即可让 Agent 继续处理请求。
根据对话和语言调整提示和提醒。完成所有必需工具调用后,这个三部分顺序必须是本轮助手的最后一条消息;不得将其放在工具调用前或中间消息中。示例:
- 中文:
可以点击下方按钮开始克隆你的音色啦。\n<clone-voice/>\n保存后音色会放进输入框,直接发送,我就继续。 - 英语:
Click the button below to start cloning your voice.\n<clone-voice/>\nOnce you save it, the voice appears in the message box. Send it and I'll continue. - 西班牙语:
Haz clic en el botón de abajo para empezar a clonar tu voz.\n<clone-voice/>\nCuando la guardes, aparecerá en el cuadro de mensaje. Envíalo y continuaré.
以上仅为示例,并非固定文案。不要说“按照以下步骤操作”,也不要暗示 Agent 会收集克隆所需的信息。不要让用户自行前往编辑器菜单寻找克隆功能。发送入口和提醒后,停止操作,等待用户告知已完成,或发送对话框“保存”操作生成的草稿。
用户保存音色后,编辑器会将克隆音色附件和本地化版本的 Continue generating with this voice. 一并插入提示词草稿。等待用户发送该草稿。该句会遵循编辑器语言,因此应以附加的音色而非其文字内容作为克隆完成的信号。附加的隐藏音色上下文中包含准确的自定义音色 ID;实际需要生成语音时,使用 submit_voice provider="fish-audio" 继续现有请求。不要输出原始 <audio> HTML,也不要再次显示“重试/应用”小组件。
基于可用参考音频由 Agent 驱动克隆
以下任一情况适用时,请使用此流程:
- 原生 ChatCut Agent 已有可读取的附件,或可访问由用户为本次克隆请求提供的 ChatCut 音频资源;或
- 外部 Codex / Claude 宿主无法打开原生编辑器对话框,因此通过对话附件收集参考音频。 除非用户明确提交许可,否则绝不要调用克隆操作。ChatCut 会在向 Fish Audio 注册之前,将每段提交的克隆源录音持久存档到自己的用户文件存储中。即使项目素材之后被删除,这份源录音仍会保留,以便未来迁移服务提供商;绝不要仅仅为了创建语音,就要求用户重新录制或重新选择已可访问的参考素材。
用户选择 clone_voice,或以其他方式明确要求从已可用的参考素材进行克隆后,在要求用户再次上传之前,先解析本次克隆请求中已提供的任何参考素材。不要使用 providerAvailable:false 阻止用户提交素材;在呈现选择后,服务提供商集成可能已启用,而克隆操作才是权威的可用性检查。如果账户无法创建其他克隆,请在要求用户提供不必要的输入之前,使用权益和名额字段说明升级或名额已满的情况。如果克隆操作本身返回 CUSTOM_VOICE_PROVIDER_NOT_CONFIGURED,请说明克隆暂时不可用,并保留请求的名称和导入的参考素材,以便之后重试此流程。
在询问名称、录音、上传内容或同意之前,调用 manage_voice voiceType="custom" action="check-create-access",并将该最新结果视为权威的创建预检。不要仅用 list 检查权益:对于不符合资格的免费账户,check-create-access 会有意触发运行时受功能限制的升级卡片。
- 免费账户的
freeTrialAvailable:false:不要收集其他参考素材。请说明免费自定义语音名额已占用,用户必须删除现有语音或升级才能创建其他语音。在原生编辑器中,产品会打开定价对话框;在 Agent 对话中,现有的受功能限制升级卡片具有同等作用。不要编造购买 URL,也不要绕过此流程继续克隆。 - Pro 账户的
activeVoiceCount >= voiceSlotLimit:不要收集其他参考素材。请准确说明当前有多少个语音处于启用状态,以及已达到当前套餐的限制,然后提供两种对话操作:通过运行时的升级卡片升级套餐,或关闭此流程/继续使用现有语音。用户升级或腾出名额之前,不要调用clone。 - 否则,继续以下收集流程。过期的预检结果绝不能覆盖克隆端点的结果:如果
clone仍返回FEATURE_NOT_INCLUDED或CUSTOM_VOICE_QUOTA_EXCEEDED,请遵循相同的恢复流程,且不要自动重试。
- 说明参考音频将经过安全处理,以创建可重复使用的克隆音色。不要透露底层服务提供商。
- 要求提供名称、明确的授权/风险确认、预览文本和一份有效的参考音频。如果用户已提供参考音频,请重复使用,并且只询问其他缺失字段。用户必须确认说话者是自己,或自己已获得许可,并确认不会将该音色用于冒充他人、欺诈或违法活动。ChatCut 会检测上传音频的语言,因此不要询问用户选择语言。ChatCut 支持的稳定格式包括 AAC、FLAC、M4A、MP3、OGG、WAV 和 WebM。音频时长必须为 10 秒至 3 分钟;建议使用 30-60 秒清晰的单人语音,不含音乐、混响或背景噪音。
- 加载
widget-forms,并且只请求此与宿主无关的收集信息契约中缺失的部分:voice_name:short_text,必填。voice_reference:audio_reference,仅当尚未解析出可用参考音频时,才要求恰好一段录音或一个附件。preview_text:short_text,可编辑,且不得超过 100 个 Unicode 字符。预填下方本地化默认文本,但允许用户将其替换为任何想用于克隆音色预览的文本。voice_consent:explicit_consent,必填,初始状态为未选中。如果宿主支持媒体字段,请让适配器在一次信息收集中保留所有缺失字段。如果宿主会单独收集对话附件,请遵循适配器的附件流程,并且不要将附加文件视为同意。不要再次询问用户在当前克隆请求中已明确提供的字段。
授权和使用承诺是继续操作的硬性门槛。信息收集返回后,请独立确认用户已明确提交上方完全一致的本地化授权选项。在收到该确认之前,立即停止:不要导入所附参考音频,不要调用 manage_voice voiceType="custom" action="clone" 或 action="preview",也不要声称克隆已开始。用户提供的名称、附件、笼统的“是”、此前无关的批准,或显示其他字段已完成的控件状态,都不构成授权。如果缺少授权或授权含糊,只再次询问完整的授权确认,并等待用户答复。
克隆前规范化已提交的结果:
{
voiceName: "<submitted name>",
sourceAssetId: "<ChatCut audio assetId>",
previewText: "<submitted preview text or localized default>",
confirmedConsent: true,
}
所有可见文案均使用用户的对话语言本地化。授权复选框应使用与“创建音色”对话框相同的产品文案,不要改写:
- Chinese:
我确认拥有该音色或已获得克隆授权,并承诺不将其用于冒充他人、欺诈或其他违法用途。 - English:
I confirm that I own this voice or have permission to clone it, and will not use it for impersonation, fraud, or unlawful purposes. - Spanish:
Confirmo que esta voz me pertenece o que tengo permiso para clonarla, y que no la utilizaré para suplantar identidades, cometer fraude ni otros fines ilícitos.
使用 ChatCut 检测到的语言标签,不要询问用户手动识别语言。
信息收集结果必须解析为 ChatCut 音频 assetId。如果宿主返回的是可读取的附件,则加载 asset-import,将其导入目标项目,并使用返回的音频 assetId。绝不要将本地路径、附件 URL 或原始字节传给 manage_voice。如果没有可读取的音频,请停止并索取音频。使用用户提交的 preview_text,并去除其前后空白。如果内容为空,则使用本地化默认文本:
- Chinese:
这是你的克隆音色,希望你喜欢这个效果。 - English:
This is your cloned voice. Hope you like it. - Spanish:
Tu voz clonada. Espero que te guste.根据用户的对话语言选择默认值。最终预览文本必须包含 1-100 个 Unicode 字符。如果提交的值过长,请在克隆前让用户缩短;不要悄悄截断或替换为默认值。保留用户的原话,不要根据对话上下文改写。
然后调用:
mcp__skill__manage_voice({
voiceType: "custom",
action: "clone",
sourceAssetId: "<uploaded audio asset id>",
name: "<submitted voice name>",
confirmedConsent: true,
previewText: "<submitted preview text or localized default>",
});
该工具会等待克隆和预览生成都完成。工具返回就绪的语音和 previewUrl 后,请让已加载的 widget-forms 适配器渲染一个 playable_preview:使用完整的 customVoiceId 作为稳定值,提交的语音名称作为显示名称,提交的 previewText 作为摘要,并将工具准确返回的 previewUrl 作为音频媒体。这是仅供展示的预览,不是另一个收集信息或选择表单。不要在正文中放入 URL,不要输出原始的 <audio> 元素,也不要替换为不受支持的 Markdown 音频/链接语法。
紧接着可播放预览,询问一个单一的分支选择:Retry / 重试 / Reintentar,或 Apply / 应用 / Aplicar。此分支选择使用 <choices/>,而不是另一个表单组件。等待期间,在上下文中保留完整的 customVoiceId、提交的名称、提交的 previewText 和 previewUrl。
Retry表示为同一语音收集替换录音或上传文件;不要占用另一个名额,也不要在替换成功前丢弃之前就绪的语音。如果当前工具界面无法原位替换来源,请说明这一限制,而不是创建第二个语音。Apply表示为当前 AI 草稿/请求选择克隆语音。使用选定的customVoiceId调用manage_voice voiceType="custom" action="apply"。此操作会执行权威的 Pro/就绪状态检查,不会生成音频或消耗额度。成功后,保留自定义语音 ID 作为选定语音并继续对话;只有用户实际要求生成最终语音时,才使用provider: "fish-audio"调用submit_voice。如果返回FEATURE_NOT_INCLUDED,不要将语音说成已应用,也不要合成。请说明,免费克隆语音可供预览,但要将其应用于生成旁白需要 Pro;运行时带功能门控的升级卡片相当于编辑器中的付费墙。
免费方案可尝试克隆一次并试听预览,但不能将克隆语音用于最终 TTS。Pro 自定义语音名额等于 floor(monthly plan credits / 100);就绪或处理中状态的语音都会占用一个名额。名额不包含免费生成:使用克隆语音生成最终 TTS 会消耗常规语音生成额度,且仅在生成成功后扣除。上述三条规则均以后台为准。
当用户要求使用克隆语音生成最终语音时,使用 ChatCut 自定义语音 ID 调用 submit_voice:
mcp__skill__submit_voice({
provider: "fish-audio",
voiceId: "<confirmed custom voice id>",
text: "<final narration text>",
name: "Custom voiceover",
});
如果工具返回 FEATURE_NOT_INCLUDED / feature_not_included,请告知用户,Free 方案提供一个自定义语音预览名额,但使用克隆语音生成最终 TTS 需要 Pro。不要重试、切换语音,也不要通过其他工具提交提供方 ID 来绕过门控。对于此限制,运行时会显示标准的定价升级卡片;请邀请用户升级后重试。
对于付费账户,请表述为:账户已创建 activeVoiceCount 个语音,已达到当前订阅方案的 voiceSlotLimit 限制;提供升级操作和关闭/继续操作。不要将配额错误引导至免费账户的付费墙文案。
音效
对于普通编辑音效(SFX),不要先生成。消耗额度前,先使用内置音效库:
- 调用
browse_library,设置category:"sound-effects",并使用"whoosh"、"camera shutter"、"notification"、"censor beep"或"record scratch"等查询词。 - 检查返回的
library:sound:<id>。 - 使用
edit_item放置音效,并将fromFrame设为音效的锚点/编辑时刻帧:
mcp__core__browse_library({
category: "sound-effects",
query: "short whoosh transition",
});
mcp__core__edit_item({
adds: [
{
type: "audio",
assetId: "library:sound:whoosh-short",
fromFrame: 120,
trackId: "A1",
},
],
});
仅在以下情况下,才使用 submit_sound 根据文本描述生成音效:
- 用户明确要求生成音效、原创音效或定制音效。
- 所需音效过于具体,现有音效库中没有。
browse_library({ category:"sound-effects", query })没有返回合适的匹配项。
// Custom/generated sound effect after the library has no suitable match
mcp__skill__submit_sound({ prompt: "A dog barking in the distance" });
// With custom duration (0.5-22 seconds)
mcp__skill__submit_sound({
prompt: "Thunder and heavy rain",
durationSeconds: 15,
});
// High prompt adherence
mcp__skill__submit_sound({
prompt: "Sci-fi laser gun firing",
promptInfluence: 0.8,
});
提升效果的小贴士:
- 描述要具体:使用“A dog barking loudly”,而不只是“dog”。
- 补充场景:“Footsteps on wooden floor in an empty room”。
- 指定风格:“Cinematic whoosh”或“8-bit game sound”。
参数
TTS
| 字段 | 描述 | 备注 |
|---|---|---|
provider | doubao、elevenlabs 或 fish-audio | 必填 |
text | 要合成的文本 | 必填 |
voiceId | 精选 ID 或 ChatCut 自定义语音 ID | 必填 |
speedRatio | 语速 | 仅限 Doubao |
modelId | ElevenLabs 模型 ID | 仅限 ElevenLabs |
stability | ElevenLabs 稳定性 | 仅限 ElevenLabs |
speed | ElevenLabs 语速 | 仅限 ElevenLabs |
name | 资源名称 | 可选 |
自定义语音
| 操作 | 必填字段 | 结果 |
|---|---|---|
list | 无 | 使用权限、名额数量、现有语音 |
check-create-access | 无 | 收集参考音频前的权威创建权限检查 |
apply | customVoiceId | Pro/就绪状态检查;选择语音但不生成 |
clone | sourceAssetId、name、confirmedConsent、previewText | 可重复使用的 Fish Audio 语音及预览 |
preview | customVoiceId、previewText | 更新后的短试听 |
rename | customVoiceId、name | 更新产品/提供商显示名称 |
delete | customVoiceId、confirmedDelete:true | 永久删除提供商语音并释放名额 |
不要使用或公开单独的 manage_fish_audio_voice 工具。Fish 模型 ID、公开/不公开发布、任意标签、封面图片以及提供商级目录管理均属于内部集成细节。只有在用户明确确认后才能删除;仅需更改名称时使用 rename。
音效
| 字段 | 描述 | 备注 |
|---|---|---|
prompt | 音效描述 | 必填 |
durationSeconds | 时长 | 0.5-22 秒 |
promptInfluence | 提示词遵循度 | 0-1 |
name | 资源名称 | 可选 |
语音
使用 manage_voice action="list" voiceType="all" 获取当前统一的候选语音列表、本地化显示名称、预览和提交 ID。
语音预设因服务提供方而异——切勿混用
官方语音 ID 因服务提供方而异。始终将返回的 provider 和
voiceId 配对使用;混用不同目录元组中的值会导致失败。
如果需要特定语音和特定语言:
- 对于任何旁白语言,都要使用该
language查询目录,并使用返回的 服务提供方/语音配对。不要猜测原始服务提供方 ID。
硬性规则——禁止的操作
- 切勿使用其他服务提供方的语音预设名称。
- 如果用户未指定具体语音,切勿在必须先执行自定义语音
list的关卡之前展示官方语音推荐。 - 切勿根据明确或推断出的语音特征,将可播放预览的就绪自定义语音排除在综合试听界面之外。
- 切勿从语音推荐或选择界面中省略最后的克隆操作卡片。
- 如果用户仅宽泛地描述语音,且尚未确认具体预设,切勿提交 TTS。
- 对于当前请求,切勿在调用
manage_voice action="list" voiceType="all"之前推荐或展示任何 TTS 语音选项。 - 切勿声称可以稳定控制年龄、地区口音、发音词典或精确时长;当前工具未将这些信息作为可靠字段提供。
- 除非用户提出要求,否则切勿用 TTS 替换原始录制语音。
- 在用户明确提交克隆流程要求的完整所有权/许可及合法使用承诺之前,切勿导入或克隆参考语音。切勿从附件、其他已完成字段、一般性批准或之前无关的上下文中推断用户已确认。
- 切勿通过向
submit_voice或其他生成工具传入服务提供方语音 ID,绕过克隆语音的 Pro 检查。 - 如果用户已为当前克隆请求提供可用的参考语音,切勿强行打开原生克隆对话框或要求用户重新选择音频。应先检查访问权限,收集缺失的授权、名称和预览文本,然后使用其 ChatCut 音频资源 ID 进行克隆。
- 切勿将项目中已有的无关语音视为克隆参考或克隆许可。
- 切勿将克隆语音预览渲染为原始
<audio>HTML、Markdown 链接或裸 URL。应使用widget-forms的playable_preview,并提供工具确切返回的previewUrl;将 Retry / Apply 放在当前宿主要求的独立分支控件中。 - 切勿在中间消息中输出
<clone-voice/>,也不要在一次 Agent 运行中输出多次。先完成必需的工具调用;如果原生对话框仍是正确路径,则按其对话框开启顺序操作,然后停止。 - 切勿向用户透露 Doubao、ElevenLabs、Fish Audio、服务提供方模型名称、服务提供方专用 ID 或服务提供方 URL。使用「官方语音」和「克隆语音」这类产品术语,并从可见的错误和状态消息中清除服务提供方详情。