---
summary: "角色定义、提供者绑定、解析顺序和后备策略"
title: "文本转语音角色"
read_when:
- "您希望跨提供商拥有一个稳定的语音身份"
- "您需要角色和提供商解析顺序"
- "您正在选择角色后备策略"
---
## 人设
**persona** 是一种稳定的语音身份,可以在各个提供商之间一致应用。它可以选择一个提供者,定义提供者中立的提示意图,并为语音、模型、提示模板、种子和语音设置携带提供者特定的绑定。
### 最小 persona
```json5
{
tts: {
auto: "always",
persona: "narrator",
personas: {
narrator: {
label: "Narrator",
provider: "elevenlabs",
providers: {
elevenlabs: {
speakerVoiceId: "EXAVITQu4vr4xnSDxMaL",
modelId: "eleven_multilingual_v2",
},
},
},
},
},
}
```
### 完整 persona(提供商特定 shaping)
```json5
{
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,
},
},
},
},
},
},
}
```
### Persona 解析
活动角色按以下顺序选择:
1. `/tts persona ` 本地偏好(如果已设置)。
2. `tts.persona`(如果已设置)。
3. 无 persona。
提供商选择按显式优先级运行:
1. 直接覆盖(CLI、gateway、Talk、允许的 TTS 指令)。
2. `/tts provider ` 本地偏好。
3. 活动 persona 的 `provider`。
4. `tts.provider`.
5. 注册表自动选择。
对于每次提供商尝试,OpenClaw 按以下顺序合并配置:
1. `tts.providers.`
2. `tts.personas..providers.`
3. 受信任的请求覆盖
4. 允许的模型生成的 TTS 指令覆盖
### 自定义 persona shaping
提供商中立的 `personas..prompt.*` 配置已停用。 Doctor 删除这些字段并指向语音提供者 API。将内置提供程序设置放在 `personas..providers.` 下(例如 Google `personaPrompt` 或 OpenAI `instructions`)。对于自定义整形,请使用 `prepareSynthesis(ctx)` 实现语音提供程序插件,并在 `synthesize()` 运行之前返回调整后的文本、提供程序配置或覆盖。这可以在请求语义已知的提供者代码中保持富有表现力的提示构造。
### 回退策略
`fallbackPolicy` 控制当某个 persona 对尝试的提供商**没有绑定**时的行为:
| 策略 | 行为 |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `preserve-persona` | **默认。** 保留提供商无关提示字段;提供商可以使用它们,也可以忽略它们。 |
| `provider-defaults` | 在该次尝试中,persona 不会参与提示准备;提供商使用其中性默认值,同时继续回退到其他提供商。 |
| `fail` | 跳过该提供商尝试,并返回 `reasonCode: "not_configured"` 和 `personaBinding: "missing"`。仍会继续尝试回退提供商。 |
只有当**每个**被尝试的提供商都被跳过或失败时,整个 TTS 请求才会失败。
Talk 会话提供商选择是会话范围内的。Talk 客户端应从 `talk.catalog` 中选择提供商 id、模型 id、语音 id 和语言区域,并通过 Talk 会话或 handoff 请求传递它们。打开语音会话不应修改 `tts` 或全局 Talk 提供商默认值。