本文档介绍了如何在 Live API 中配置合成语音回答和语音活动检测。您可以配置各种高清语音和语言的回答,还可以配置语音活动检测设置,以允许用户打断模型。
设置语言和语音
如需设置回答语言和语音,请按如下方式进行配置:
控制台
- 依次打开 Vertex AI Studio > 实时流。
- 在输出扩展控件中,从语音下拉菜单中选择一种语音。
- 在同一扩展控件中,从语言下拉菜单中选择一种语言。
- 点击 启动会话以启动会话。
Python
from google.genai.types import LiveConnectConfig, SpeechConfig, VoiceConfig, PrebuiltVoiceConfig config = LiveConnectConfig( response_modalities=["AUDIO"], speech_config=SpeechConfig( voice_config=VoiceConfig( prebuilt_voice_config=PrebuiltVoiceConfig( voice_name=voice_name, ) ), language_code="en-US", ), )
支持的语音
Live API 在 voice_name 字段中支持以下 30 种语音选项:
|
Zephyr - 明快 Kore - 坚定 Orus - 坚定 Autonoe - 明快 Umbriel - 轻松 Erinome - 清晰 Laomedeia - 欢快 Schedar - 平稳 Achird - 友好 Sadachbia - 活泼 |
Puck - 欢快 Fenrir - 兴奋 Aoede - 轻快 Enceladus - 气声 Algieba - 流畅 Algenib - 沙哑 Achernar - 柔和 Gacrux - 成熟 Zubenelgenubi - 随意 Sadaltager - 博学 |
Charon - 信息丰富 Leda - 青春活力 Callirrhoe - 轻松愉快 Iapetus - 清晰明了 Despina - 流畅自然 Rasalgethi - 信息丰富 Alnilam - 坚定有力 Pulcherrima - 积极向上 Vindemiatrix - 温柔舒缓 Sulafat - 温暖舒适 |
支持的语言
Live API 支持以下 24 种语言:
| 语言 | BCP-47 代码 | 语言 | BCP-47 代码 |
|---|---|---|---|
| 阿拉伯语(埃及语) | ar-EG | 德语(德国) | de-DE |
| 英语(美国) | en-US | 西班牙语(美国) | es-US |
| 法语(法国) | fr-FR | 印地语(印度) | hi-IN |
| 印度尼西亚语(印度尼西亚) | id-ID | 意大利语(意大利) | it-IT |
| 日语(日本) | ja-JP | 韩语(韩国) | ko-KR |
| 葡萄牙语(巴西) | pt-BR | 俄语(俄罗斯) | ru-RU |
| 荷兰语(荷兰) | nl-NL | 波兰语(波兰) | pl-PL |
| 泰语(泰国) | th-TH | 土耳其语(土耳其) | tr-TR |
| 越南语(越南) | vi-VN | 罗马尼亚语(罗马尼亚) | ro-RO |
| 乌克兰语(乌克兰) | uk-UA | 孟加拉语(孟加拉) | bn-BD |
| 英语(印度) | en-IN 和 hi-IN 软件包 | 马拉地语(印度) | mr-IN |
| 泰米尔语(印度) | ta-IN | 泰卢固语(印度) | te-IN |
配置语音活动检测
语音活动检测 (VAD) 可让模型识别用户何时在说话。这对于创建自然对话至关重要,因为这使用户可以随时中断模型。
模型会自动对连续的音频输入流执行语音活动检测 (VAD)。您可以使用设置消息的 realtimeInputConfig.automaticActivityDetection 字段配置 VAD 设置。当 VAD 检测到中断时,系统会取消并舍弃正在进行的生成操作。会话历史记录中仅保留已发送给客户端的信息。服务器随后会发送一条消息来报告中断情况。
如果音频流暂停超过 1 秒(例如,如果用户关闭麦克风),请发送 audioStreamEnd 事件以对所有缓存的音频执行 flush 操作。客户端可以随时恢复发送音频数据。
或者,在设置消息中将 realtimeInputConfig.automaticActivityDetection.disabled 设置为 true,以停用自动 VAD。使用此配置时,客户端会检测用户语音,并在适当的时间发送 activityStart 和 activityEnd 消息。不会发送 audioStreamEnd。中断以 activityEnd 进行标记。
Python
from pathlib import Path from IPython.display import display, Markdown from google.genai.types import LiveConnectConfig, RealtimeInputConfig, AutomaticActivityDetection, StartSensitivity, EndSensitivity, Blob config = LiveConnectConfig( response_modalities=["TEXT"], realtime_input_config=RealtimeInputConfig( automatic_activity_detection=AutomaticActivityDetection( disabled=False, # default start_of_speech_sensitivity=StartSensitivity.START_SENSITIVITY_LOW, # Either START_SENSITIVITY_LOW or START_SENSITIVITY_HIGH end_of_speech_sensitivity=EndSensitivity.END_SENSITIVITY_LOW, # Either END_SENSITIVITY_LOW or END_SENSITIVITY_HIGH prefix_padding_ms=20, silence_duration_ms=100, ) ), ) async with client.aio.live.connect( model=MODEL_ID, config=config, ) as session: audio_bytes = Path("sample.pcm").read_bytes() await session.send_realtime_input( media=Blob(data=audio_bytes, mime_type="audio/pcm;rate=16000") ) # if stream gets paused, send: # await session.send_realtime_input(audio_stream_end=True) response = [] async for message in session.receive(): if message.server_content.interrupted is True: # The model generation was interrupted response.append("The session was interrupted") if message.text: response.append(message.text) display(Markdown(f"**Response >** {''.join(response)}"))