Este tutorial mostra como estabelecer ligação à API Live através de WebSockets. Neste tutorial, vai configurar um projeto para usar a API Live com WebSockets, enviar um ficheiro de áudio para o modelo e receber áudio em resposta. Google Cloud
Para mais informações sobre WebSockets, consulte a documentação da API WebSockets.
Antes de começar
Antes de poder enviar pedidos, tem de configurar a autenticação com a Vertex AI. Pode configurar a autenticação através de uma chave da API ou através das Credenciais padrão da aplicação (ADC).
Para este tutorial, a forma mais rápida de começar é usar uma chave da API:
Se for um novo utilizador do Google Cloud, obtenha uma chave da API do modo expresso.
Se já tiver um Google Cloud projeto, obtenha uma Google Cloud chave de API associada a uma conta de serviço. Só é possível associar uma chave da API a uma conta de serviço se esta opção estiver ativada nas definições da política da organização. Se não conseguir ativar esta definição, use as credenciais predefinidas da aplicação.
Para obter instruções sobre como configurar a autenticação através do ADC, consulte o nosso guia de início rápido.
Instale a biblioteca WebSockets
Execute o seguinte comando para instalar a biblioteca websockets:
pip install websockets
Configure variáveis de ambiente
Defina as variáveis de ambiente para o ID do projeto e a localização. Substitua PROJECT_ID pelo ID do seu projeto.Google Cloud
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
export GOOGLE_CLOUD_LOCATION=global
Inicie uma sessão de áudio
O exemplo seguinte estabelece uma sessão, transmite áudio a partir de um ficheiro e imprime o tamanho dos fragmentos 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())