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 字段合成转写内容(例如,在 Agent Studio 中)。大多数请求根本不需要 style 指令。
  4. 仅针对调整添加简短的 style 提示:仅针对需要特定语气调整的轮次添加简短的 style 字符串(例如 "casual, friendly" 或 "muttering, then reassuring"),并在需要一致的基准时在轮次中重复使用该确切的简短字符串。

多轮对话和语音智能体

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

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

后续步骤