Gemini TTS 提示指南

本页介绍了在使用 Gemini 3.8 Flash TTS 和 Gemini 3.8 Flash-Lite TTS 时撰写提示的最佳实践。

如需查看请求语法和代码示例,请参阅 Gemini TTS 概览。

Gemini 3.8 TTS 模型将 text 字段视为逐字转写内容。持续的转弯级方向信息会显示在 speech_metadata 中,而时间点语音事件会以内嵌方式显示在转写内容中。以下请求将轮次级 style 与内嵌语音标记和暂停相结合:

{
  "contents": [{
    "role": "user",
    "parts": [{
      "text": "Wait... <short pause> did you hear that? <gasp> Someone's at the door.",
      "speechMetadata": {"style": "whispered, nervous"}
    }]
  }],
  "generationConfig": {
    "responseModalities": ["AUDIO"],
    "speechConfig": {"voiceConfig": {"voice": "Kore"}}
  }
}

样式字段与内嵌标记

按范围拆分性能指令:

  • 回合级交付 (speech_metadata.style):将持续交付属性(例如情绪、韵律、整体节奏或交付风格(如 "whispering"、"out of breath"、"muttering" 或 "sarcastic"))放入 speech_metadata 的 style 字段中。为了在对话轮次中打造稳定一致的角色和性能,请在语音设计中预先设计角色,并仅使用 style 进行可选的轮次级调整。
  • 时间点事件(内嵌标记):使用尖括号(<cough>、<breath>、<sigh>、<short pause>)将短暂的非语音爆发、呼吸或停顿内嵌在转写内容中。使用尖括号 (<...>) 可获得最高音质,并且应仅标记人声,而非非人声的音效。
范围 放置位置 示例
回合级(在整个回合中持续存在) speech_metadata.style "angry tone"、"speaking rapidly"、"out of breath"、"whispers"、"sarcastic"
时间点(在特定字词处发生) 内嵌在 text 中(<...>) "<cough> Thank you all for coming tonight! <throat-clearing> As I was saying..."

节奏和停顿

您可以从三个级别控制节奏和静音:

  • 标点符号和省略号:使用逗号、短划线 (--) 和省略号 (...) 来表示自然的犹豫。
  • 内嵌暂停标记:在朗读者应暂停的位置插入 <short pause> 或 <long pause>。例如: "Hold on, let me think... <short pause> Alright, I've got it."
  • 回合级语速:在 speech_metadata 中设置 "style": "speaking rapidly" 或 "style": "speaking slowly",以控制整个回合的语速。

韵律和音调

使用 speech_metadata.style 可控制一轮对话中的韵律、音调和语调。例如 "style": "high pitch, cheerful and excited inflection" 或 "style": "monotone and flat"。如果对话过程中情绪发生变化,请将脚本拆分为单独的对话轮次,每轮对话都有自己的 style。

强调方式

将转写内容中的字词(包括标点符号和内嵌标记)大写,以强调这些字词。例如:"This is a VERY important point!" 或 "It was a VERY long day <sigh> ... nobody listens anymore."

爆发性发声和非语音声音

将非语音的人声以内嵌方式放在尖括号 (<...>) 中,并放在应发出声音的位置。使用人声,而不是掌声等非人声音效。建议的人声标记包括:

标记 标记 标记 标记
<argh> <breath> <heavy breath> <exhales>
<cackle> <cheer> <chuckle>/<chuckles> <cough>
<cry> <gasp> <giggle> <groan>
<growl> <grunt> <grr> <hiss>
<laugh>/<laughter> <moan> <pant> <pff>/<phew>
<scream> <shout> <shriek> <sigh>/<sighs>
<sneeze> <snicker> <snort> <sob>
<throat-clearing> <tsk> <whimper> <whispers>/<whispering>
<yawn> <short pause> <long pause>

后通道和重叠语音

在多发言者对话中,将监听者反应用竖线字符 (|reaction|) 括起来,放在活跃发言者的发言中。这样一来,无需为每种反应单独轮流发言,即可实现自然的后台渠道或重叠的语音。

  • 简短的反馈:在发言者发言期间插入简短的听众反应:
    • 第 1 轮(发言者 A):"So the launch is Thursday |oh hmm| Are we actually ready?"
    • 第 2 轮(发言者 B):"Ready enough |oh really?| The last blocker cleared this morning."
    • 第 3 轮(演讲者 A):"Then let's ship it |absolutely| and watch the dashboards."
  • 重叠和交错的语音:使用多个竖线分隔的片段来模拟同步语音。此功能最适合搭配 gemini-3.8-flash-tts 使用:
    • 倒计时或合唱:"Let's surprise him on three |ok| ready?",后跟 "one. two. three. |happy| happy |birthday| birthday!"
    • 完全重叠:"Hello |oh| there |my| it |goodness| must |gracious| be |would| almost |you| time |look| for |at that| dinner"

各代之间的一致性以及应避免的事项

请遵循以下准则,以确保在对话轮次之间保持稳定的声音身份:

  • 在语音设计中预先设计角色,而不是使用长样式块: 从早期模型沿用下来的长篇 "Audio Profile" 段落和多项符号 "Director's Notes" 是导致语音漂移的最常见原因。 在语音设计中预先使用相同的创意直觉,生成持久的自定义 voice_... 角色,然后在 TTS 调用中传递该语音 ID。
  • 依靠语音参考实现稳定性(省略元指令):Gemini 3.8 TTS 模型经过训练,可先锚定音频参考。 请勿添加指示模型保持声音稳定的指令(例如 "do not switch speaker identity" 或 "maintain identical timbre")。额外的提示文本会增加漂移。舍弃不必要的风格指令,让模型在语音参考提供的稳定点附近自然变化。
  • 请勿尝试在 style 中更改不可变的说话人特征:请避免在 speech_metadata.style 中添加年龄、适用性别、姓名或永久性口音变化。您可以从扩展语音库中选择一种地区性语音,也可以使用语音设计功能创建一种语音。
  1. 一次性打造角色:在语音设计中创建角色,或从扩展语音库中选择与目标语言和角色相符的区域性语音。
  2. 撰写包含语流不畅的自然口语转写内容:为了尽可能自然,请将 text 撰写为真实的口语转写内容,包括自然的对话语流不畅和犹豫(例如 "Oh uh yeah I think... hm, so that's interesting")。
  3. 先测试纯 TTS:先使用空的 style 字段合成转写内容。大多数请求根本不需要任何 style 指令。
  4. 仅为调整添加简短的 style 提示:仅为需要进行特定交付调整的对话添加简明的 style 字符串(例如 "casual, friendly" 或 "muttering, then reassuring"),并在需要保持一致基准时,在多个对话中重复使用该简短字符串。

多轮对话和语音代理

构建对话式语音智能体或其他多轮应用时:

  • 在 LLM 文本到达时,为每个轮次发出一个 TTS 请求。
  • 让配置的 voice 在对话轮次之间传递说话者的身份。请勿在每个轮次中重新发送长篇角色描述。
  • 将 style 留空,或为整个对话发送一个简短的常量字符串。
  • 将较长的智能体回答拆分为较短的对话轮次,而不是加强 style 提示。

后续步骤