本頁面說明使用 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|) 標示聽者的反應。這會產生自然的回應或重疊語音,而不需要為每個反應單獨進行。
- 簡短附和:在發言者說話時,穿插簡短的聽者反應:
- Turn 1 (Speaker A):
"So the launch is Thursday |oh hmm| Are we actually ready?" - Turn 2 (Speaker B):
"Ready enough |oh really?| The last blocker cleared this morning." - 第 3 輪 (講者 A):
"Then let's ship it |absolutely| and watch the dashboards."
- Turn 1 (Speaker 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")。 - 先測試純文字轉語音:先使用空白的
style欄位合成轉錄稿 (例如在 Agent Studio 中)。大多數要求完全不需要style指令。 - 僅在微調時加入簡短的
style提示:僅在需要特定傳遞調整的回合中加入簡潔的style字串 (例如"casual, friendly"或"muttering, then reassuring"),並在需要一致的基準時,在各回合中重複使用該簡短字串。
多輪對話和語音代理
建構對話式語音代理或其他多輪應用程式時:
- 在 LLM 文字抵達時,為每個回合提出一個 TTS 要求。
- 讓設定的
voice在不同對話中傳遞說話者的身分。請勿在每次對話時重新傳送冗長的角色說明。 - 請將
style留空,或在整個對話中傳送一個簡短的常數字串。 - 將代理的長篇回覆拆成較短的回合,而不是強化
style提示。