本页面介绍了使用 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字段合成转写内容(例如,在 Agent Studio 中)。大多数请求根本不需要style指令。 - 仅针对调整添加简短的
style提示:仅针对需要特定语气调整的轮次添加简短的style字符串(例如"casual, friendly"或"muttering, then reassuring"),并在需要一致的基准时在轮次中重复使用该确切的简短字符串。
多轮对话和语音智能体
在构建对话式语音智能体或其他多轮对话应用时:
- 在 LLM 文本到达时,为每轮对话发出一个 TTS 请求。
- 让配置的
voice在不同轮次中传递说话者的身份。请勿在每个轮次中重新发送冗长的人设说明。 - 将
style留空,或在整个对话中发送一个简短的常量字符串。 - 将较长的智能体回答拆分为较短的轮次,而不是强化
style提示。