Neste tutorial, mostramos como se conectar à API Live usando WebSockets. Neste tutorial, você vai configurar um projeto Google Cloud para usar a API Live com WebSockets, enviar um arquivo de áudio para o modelo e receber áudio em resposta.
Para mais informações sobre WebSockets, consulte a documentação da API WebSockets.
Antes de começar
Antes de enviar solicitações, você precisa configurar a autenticação com a Vertex AI. É possível configurar a autenticação usando uma chave de API ou usando as credenciais padrão do aplicativo (ADC).
Para este tutorial, a maneira mais rápida de começar é usar uma chave de API:
Se você for um novo usuário do Google Cloud, receba uma chave de API do modo expresso.
Se você já tiver um projeto Google Cloud , receba uma chave de API Google Cloud vinculada a uma conta de serviço. Só é possível vincular uma chave de API a uma conta de serviço se ela estiver ativada nas configurações da política da organização. Se não for possível ativar essa configuração, use as credenciais padrão do aplicativo.
Para instruções sobre como configurar a autenticação usando o ADC, consulte nosso guia de início rápido.
Instalar a biblioteca WebSockets
Execute o seguinte comando para instalar a biblioteca websockets:
pip install websockets
Configurar variáveis de ambiente
Defina variáveis de ambiente para o ID e o local do projeto. Substitua PROJECT_ID pelo
Google Cloud ID do projeto.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
export GOOGLE_CLOUD_LOCATION=global
Iniciar uma sessão de áudio
O exemplo a seguir estabelece uma sessão, transmite áudio de um arquivo e imprime o tamanho dos trechos de áudio recebidos na resposta.
import asyncio
import websockets
import json
import base64
import os
import sys
# Replace the [PROJECT_ID] and [LOCATION] with your Google Cloud Project ID and location.
PROJECT_ID = os.environ.get("GOOGLE_CLOUD_PROJECT")
LOCATION = os.environ.get("GOOGLE_CLOUD_LOCATION")
# Authentication
token_list = !gcloud auth application-default print-access-token
ACCESS_TOKEN = token_list[0]
# Configuration
MODEL_ID = "gemini-live-2.5-flash-preview-native-audio-09-2025"
# Construct the WSS URL
HOST = f"{LOCATION}-aiplatform.googleapis.com"
path = "google.cloud.aiplatform.v1.LlmBidiService/BidiGenerateContent"
URI = f"wss://{HOST}/ws/{path}"
MODEL_RESOURCE = f"projects/{PROJECT_ID}/locations/{LOCATION}/publishers/google/models/{MODEL_ID}"
async def main():
headers = {"Authorization": f"Bearer {ACCESS_TOKEN}"}
async with websockets.connect(URI, additional_headers=headers) as ws:
print("Session established.")
# Send Setup (Handshake)
await ws.send(json.dumps({
"setup": {
"model": MODEL_RESOURCE,
"generation_config": { "response_modalities": ["AUDIO"] }
}
}))
# Define Tasks
async def send_audio():
# Download sample if missing
if not os.path.exists("input.wav"):
!wget -q https://storage.googleapis.com/cloud-samples-data/generative-ai/audio/where_the_nearest_train_station_is.wav -O input.wav
with open("input.wav", "rb") as f:
while chunk := f.read(1024):
msg = {
"realtime_input": {
"media_chunks": [{
"mime_type": "audio/pcm;rate=16000",
"data": base64.b64encode(chunk).decode("utf-8")
}]
}
}
await ws.send(json.dumps(msg))
await asyncio.sleep(0.01)
print("Done sending audio.")
async def receive_audio():
async for msg in ws:
data = json.loads(msg)
try:
parts = data["serverContent"]["modelTurn"]["parts"]
for part in parts:
if "inlineData" in part:
b64_audio = part["inlineData"]["data"]
print(f"Received chunk: {len(b64_audio)} bytes")
except KeyError:
pass
if data.get("serverContent", {}).get("turnComplete"):
print("Turn complete. Exiting.")
break
# Run Together
await asyncio.gather(send_audio(), receive_audio())
if __name__ == "__main__":
# Check if running in Jupyter/Colab
if "ipykernel" in sys.modules:
await main()
else:
asyncio.run(main())