跳至主要內容

Vertex AI 文字轉語音

屬性詳細資訊
說明具備 Chirp3 HD 聲音與 Gemini TTS 的 Google Cloud 文字轉語音
LiteLLM 上的提供者路由vertex_ai/chirp(Chirp)、vertex_ai/gemini-*-tts(Gemini)

Chirp3 HD 聲音

具備高品質 Chirp3 HD 聲音的 Google Cloud Text-to-Speech API。

快速開始

LiteLLM Python SDK

Chirp3 Quick Start
from litellm import speech
from pathlib import Path

speech_file_path = Path(__file__).parent / "speech.mp3"
response = speech(
model="vertex_ai/chirp",
voice="alloy", # OpenAI voice name - automatically mapped
input="Hello, this is Vertex AI Text to Speech",
vertex_project="your-project-id",
vertex_location="us-central1",
)
response.stream_to_file(speech_file_path)

LiteLLM AI 閘道

1. 設定 config.yaml

config.yaml
model_list:
- model_name: vertex-tts
litellm_params:
model: vertex_ai/chirp
vertex_project: "your-project-id"
vertex_location: "us-central1"
vertex_credentials: "/path/to/service_account.json"

2. 啟動 proxy

Start LiteLLM Proxy
litellm --config /path/to/config.yaml

3. 發出請求

Chirp3 Quick Start
curl http://0.0.0.0:4000/v1/audio/speech \
-H "Authorization: Bearer sk-1234" \
-H "Content-Type: application/json" \
-d '{
"model": "vertex-tts",
"voice": "alloy",
"input": "Hello, this is Vertex AI Text to Speech"
}' \
--output speech.mp3

聲音對應

LiteLLM 會將 OpenAI 聲音名稱對應到 Google Cloud 聲音。您可以直接使用 OpenAI 聲音或 Google Cloud 聲音。

OpenAI VoiceGoogle Cloud Voice
alloyen-US-Studio-O
echoen-US-Studio-M
fableen-GB-Studio-B
onyxen-US-Wavenet-D
novaen-US-Studio-O
shimmeren-US-Wavenet-F

直接使用 Google Cloud 聲音

LiteLLM Python SDK

Chirp3 HD Voice
from litellm import speech

# Pass Chirp3 HD voice name directly
response = speech(
model="vertex_ai/chirp",
voice="en-US-Chirp3-HD-Charon",
input="Hello with a Chirp3 HD voice",
vertex_project="your-project-id",
)
response.stream_to_file("speech.mp3")
Voice as Dict (Multilingual)
from litellm import speech

# Pass as dict for full control over language and voice
response = speech(
model="vertex_ai/chirp",
voice={
"languageCode": "de-DE",
"name": "de-DE-Chirp3-HD-Charon",
},
input="Hallo, dies ist ein Test",
vertex_project="your-project-id",
)
response.stream_to_file("speech.mp3")

LiteLLM AI 閘道

Chirp3 HD Voice
curl http://0.0.0.0:4000/v1/audio/speech \
-H "Authorization: Bearer sk-1234" \
-H "Content-Type: application/json" \
-d '{
"model": "vertex-tts",
"voice": "en-US-Chirp3-HD-Charon",
"input": "Hello with a Chirp3 HD voice"
}' \
--output speech.mp3
Voice as Dict (Multilingual)
curl http://0.0.0.0:4000/v1/audio/speech \
-H "Authorization: Bearer sk-1234" \
-H "Content-Type: application/json" \
-d '{
"model": "vertex-tts",
"voice": {"languageCode": "de-DE", "name": "de-DE-Chirp3-HD-Charon"},
"input": "Hallo, dies ist ein Test"
}' \
--output speech.mp3

瀏覽可用聲音:Google Cloud Text-to-Speech Console

傳遞原始 SSML

當您的輸入包含 <speak> 標籤時,LiteLLM 會自動偵測 SSML,並原樣傳遞。

LiteLLM Python SDK

SSML Input
from litellm import speech

ssml = """
<speak>
<p>Hello, world!</p>
<p>This is a test of the <break strength="medium" /> text-to-speech API.</p>
</speak>
"""

response = speech(
model="vertex_ai/chirp",
voice="en-US-Studio-O",
input=ssml, # Auto-detected as SSML
vertex_project="your-project-id",
)
response.stream_to_file("speech.mp3")
Force SSML Mode
from litellm import speech

# Force SSML mode with use_ssml=True
response = speech(
model="vertex_ai/chirp",
voice="en-US-Studio-O",
input="<speak><prosody rate='slow'>Speaking slowly</prosody></speak>",
use_ssml=True,
vertex_project="your-project-id",
)
response.stream_to_file("speech.mp3")

LiteLLM AI 閘道

SSML Input
curl http://0.0.0.0:4000/v1/audio/speech \
-H "Authorization: Bearer sk-1234" \
-H "Content-Type: application/json" \
-d '{
"model": "vertex-tts",
"voice": "en-US-Studio-O",
"input": "<speak><p>Hello!</p><break time=\"500ms\"/><p>How are you?</p></speak>"
}' \
--output speech.mp3

支援的參數

參數說明Values
voice聲音選擇OpenAI voice、Google Cloud voice 名稱,或 dict
input要轉換的文字純文字或 SSML
speed說話速度0.25 到 4.0(預設:1.0)
response_format音訊格式mp3opuswavpcmflac
use_ssml強制 SSML 模式True / False

非同步用法

Async Speech Generation
import asyncio
from litellm import aspeech

async def main():
response = await aspeech(
model="vertex_ai/chirp",
voice="alloy",
input="Hello from async",
vertex_project="your-project-id",
)
response.stream_to_file("speech.mp3")

asyncio.run(main())

Gemini TTS

具備音訊輸出能力的 Gemini 模型,使用 chat completions API。

注意

限制:

  • 僅支援 pcm16 音訊格式
  • 尚不支援串流
  • 必須設定 modalities: ["audio"]
  • 透過 LiteLLM Proxy 使用時,必須在請求主體中包含 "allowed_openai_params": ["audio", "modalities"],以啟用音訊參數

快速開始

LiteLLM Python SDK

Gemini TTS Quick Start
from litellm import completion
import json

# Load credentials
with open('path/to/service_account.json', 'r') as file:
vertex_credentials = json.dumps(json.load(file))

response = completion(
model="vertex_ai/gemini-2.5-flash-preview-tts",
messages=[{"role": "user", "content": "Say hello in a friendly voice"}],
modalities=["audio"],
audio={
"voice": "Kore",
"format": "pcm16"
},
vertex_credentials=vertex_credentials
)
print(response)

LiteLLM AI 閘道

1. 設定 config.yaml

config.yaml
model_list:
- model_name: gemini-tts
litellm_params:
model: vertex_ai/gemini-2.5-flash-preview-tts
vertex_project: "your-project-id"
vertex_location: "us-central1"
vertex_credentials: "/path/to/service_account.json"

2. 啟動 proxy

Start LiteLLM Proxy
litellm --config /path/to/config.yaml

3. 發出請求

Gemini TTS Request
curl http://0.0.0.0:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-1234" \
-d '{
"model": "gemini-tts",
"messages": [{"role": "user", "content": "Say hello in a friendly voice"}],
"modalities": ["audio"],
"audio": {"voice": "Kore", "format": "pcm16"},
"allowed_openai_params": ["audio", "modalities"]
}'

支援的模型

  • vertex_ai/gemini-2.5-flash-preview-tts
  • vertex_ai/gemini-2.5-pro-preview-tts

可用聲音請參見 Gemini TTS 文件

進階用法

Gemini TTS with System Prompt
from litellm import completion

response = completion(
model="vertex_ai/gemini-2.5-pro-preview-tts",
messages=[
{"role": "system", "content": "You are a helpful assistant that speaks clearly."},
{"role": "user", "content": "Explain quantum computing in simple terms"}
],
modalities=["audio"],
audio={"voice": "Charon", "format": "pcm16"},
temperature=0.7,
max_tokens=150,
vertex_credentials=vertex_credentials
)