文本转语音角色
角色¶
角色 是一种稳定的语音身份,可跨提供商确定性地应用。它可以偏好某个提供商,定义提供商中立的提示意图,并携带针对语音、模型、提示模板、种子和语音设置的提供商特定绑定。
最小角色¶
{
tts: {
auto: "always",
persona: "narrator",
personas: {
narrator: {
label: "Narrator",
provider: "elevenlabs",
providers: {
elevenlabs: {
speakerVoiceId: "EXAVITQu4vr4xnSDxMaL",
modelId: "eleven_multilingual_v2",
},
},
},
},
},
}
完整角色(提供商特定塑形)¶
{
tts: {
auto: "always",
persona: "alfred",
personas: {
alfred: {
label: "Alfred",
description: "Dry, warm British butler narrator.",
provider: "google",
fallbackPolicy: "preserve-persona",
providers: {
google: {
model: "gemini-3.8-flash-tts",
speakerVoice: "Algieba",
promptTemplate: "audio-profile-v1",
},
openai: { model: "gpt-4o-mini-tts", speakerVoice: "cedar" },
elevenlabs: {
speakerVoiceId: "voice_id",
modelId: "eleven_multilingual_v2",
seed: 42,
voiceSettings: {
stability: 0.65,
similarityBoost: 0.8,
style: 0.25,
useSpeakerBoost: true,
speed: 0.95,
},
},
},
},
},
},
}
角色解析¶
当前角色按确定性方式选择:
- 如果已设置,
/tts persona <id>本地偏好。 - 如果已设置,
tts.persona。 - 无角色。
提供商选择按显式优先执行:
- 直接覆盖(CLI、网关、Talk、允许的 TTS 指令)。
/tts provider <id>本地偏好。- 当前角色的
provider。 tts.provider。- 注册表自动选择。
对于每次提供商尝试,OpenClaw 按以下顺序合并配置:
tts.providers.<id>tts.personas.<persona>.providers.<id>- 受信任的请求覆盖
- 允许的模型发出的 TTS 指令覆盖
自定义角色塑形¶
提供商中立的 personas.<id>.prompt.* 配置已弃用。Doctor 会移除这些字段,并指向语音提供商集成点。将内置提供商设置放在 personas.<id>.providers.<provider> 下(例如 Google 的 personaPrompt 或 OpenAI 的 instructions)。对于自定义塑形,请实现一个具有 prepareSynthesis(ctx) 的语音提供商插件,并在 synthesize() 运行之前返回调整后的文本、提供商配置或覆盖项。这样可将富有表现力的提示构建保留在提供商代码中,因为请求语义在那里是已知的。
回退策略¶
fallbackPolicy 控制当角色对尝试的提供商没有绑定时的行为:
| 策略 | 行为 |
|---|---|
preserve-persona |
默认。 提供商中立的提示字段保持可用;提供商可以使用它们或忽略它们。 |
provider-defaults |
该次尝试的提示准备中省略角色;提供商使用中立的默认值,同时继续回退到其他提供商。 |
fail |
跳过该提供商尝试,并设置 reasonCode: "not_configured" 和 personaBinding: "missing"。仍会尝试回退提供商。 |
只有当所有尝试的提供商都被跳过或失败时,整个 TTS 请求才会失败。
Talk 会话的提供商选择是会话范围的。Talk 客户端应从 talk.catalog 中选择提供商 ID、模型 ID、语音 ID 和区域设置,并通过 Talk 会话或交接请求传递它们。打开语音会话不应修改 tts 或全局 Talk 提供商默认值。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw