跳转至

文本转语音角色

角色

角色 是一种稳定的语音身份,可跨提供商确定性地应用。它可以偏好某个提供商,定义提供商中立的提示意图,并携带针对语音、模型、提示模板、种子和语音设置的提供商特定绑定。

最小角色

{
  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,
            },
          },
        },
      },
    },
  },
}

角色解析

当前角色按确定性方式选择:

  1. 如果已设置,/tts persona <id> 本地偏好。
  2. 如果已设置,tts.persona。
  3. 无角色。

提供商选择按显式优先执行:

  1. 直接覆盖(CLI、网关、Talk、允许的 TTS 指令)。
  2. /tts provider <id> 本地偏好。
  3. 当前角色的 provider。
  4. tts.provider。
  5. 注册表自动选择。

对于每次提供商尝试,OpenClaw 按以下顺序合并配置:

  1. tts.providers.<id>
  2. tts.personas.<persona>.providers.<id>
  3. 受信任的请求覆盖
  4. 允许的模型发出的 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