本页介绍了在使用 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."
- 第 1 轮(发言者 A):
- 重叠和交错的语音:使用多个竖线分隔的片段来模拟同步语音。此功能最适合搭配
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中添加年龄、适用性别、姓名或永久性口音变化。您可以从扩展语音库中选择一种地区性语音,也可以使用语音设计功能创建一种语音。
推荐的工作流程
- 一次性打造角色:在语音设计中创建角色,或从扩展语音库中选择与目标语言和角色相符的区域性语音。
- 撰写包含语流不畅的自然口语转写内容:为了尽可能自然,请将
text撰写为真实的口语转写内容,包括自然的对话语流不畅和犹豫(例如"Oh uh yeah I think... hm, so that's interesting")。 - 先测试纯 TTS:先使用空的
style字段合成转写内容。大多数请求根本不需要任何style指令。 - 仅为调整添加简短的
style提示:仅为需要进行特定交付调整的对话添加简明的style字符串(例如"casual, friendly"或"muttering, then reassuring"),并在需要保持一致基准时,在多个对话中重复使用该简短字符串。
多轮对话和语音代理
构建对话式语音智能体或其他多轮应用时:
- 在 LLM 文本到达时,为每个轮次发出一个 TTS 请求。
- 让配置的
voice在对话轮次之间传递说话者的身份。请勿在每个轮次中重新发送长篇角色描述。 - 将
style留空,或为整个对话发送一个简短的常量字符串。 - 将较长的智能体回答拆分为较短的对话轮次,而不是加强
style提示。