A API Live permite interações bidirecionais de voz e vídeo com baixa latência com o Gemini. Use a API Live para oferecer aos utilizadores finais conversas de voz naturais e semelhantes às de um ser humano, incluindo a capacidade de interromper as respostas do modelo com comandos de voz.
Este documento aborda os princípios básicos da utilização da API Live, incluindo as respetivas capacidades, exemplos iniciais e exemplos de código de casos de utilização básicos. Se estiver à procura de informações sobre como iniciar uma conversa interativa através da API Live, consulte o artigo Conversas interativas com a API Live. Se procura informações sobre as ferramentas que a API Live pode usar, consulte as ferramentas incorporadas.
Modelos suportados
A API Live é suportada para utilização no SDK de IA gen da Google e no Vertex AI Studio. Algumas funcionalidades (como a entrada e a saída de texto) só estão disponíveis através do SDK de IA gen.
Pode usar a API Live com os seguintes modelos:
Versão do modelo | Nível de disponibilidade |
---|---|
gemini-live-2.5-flash |
GA privado* |
gemini-live-2.5-flash-preview-native-audio |
Pré-visualização pública |
* Contacte o representante da equipa da sua Conta Google para pedir acesso.
Para mais informações, incluindo especificações técnicas e limitações, consulte o guia de referência da API Live.
Exemplos de iniciadores
Pode começar a usar a API Live com um dos seguintes tutoriais de bloco de notas, aplicações de demonstração ou guias.
Tutoriais do bloco de notas
Transfira estes tutoriais de notebooks do GitHub ou abra-os no ambiente da sua escolha.
Use WebSockets com a API Live
Streaming de áudio e vídeo
Aplicações e guias de demonstração
- App de demonstração WebSocket
- Kit de desenvolvimento de agentes: streaming de áudio personalizado
- Project Livewire
Capacidades da API Live
- Compreensão multimodal em tempo real: converse com o Gemini sobre o que vê num feed de vídeo ou através da partilha de ecrã, usando o suporte integrado para streaming de áudio e vídeo.
- Utilização de ferramentas integradas: integre na perfeição ferramentas como a chamada de funções e a fundamentação com a Pesquisa Google nas suas conversas para interações mais práticas e dinâmicas.
- Interações de baixa latência: tenha interações de baixa latência semelhantes às humanas com o Gemini.
- Apoio técnico multilingue: converse em 24 idiomas suportados.
- (Apenas versões de GA) Suporte para Provisioned Throughput: use uma subscrição de custo fixo e prazo fixo disponível em vários prazos que reserva o débito para modelos de IA generativa suportados no Vertex AI, incluindo a API Live.
O Gemini 2.5 Flash com a API Live também inclui áudio nativo como uma oferta de pré-visualização pública. O áudio nativo apresenta:
- Diálogo afetivo: a API Live compreende e responde ao tom de voz do utilizador. As mesmas palavras ditas de formas diferentes podem levar a conversas muito diferentes e mais detalhadas.
- Áudio proativo e reconhecimento do contexto: a API Live ignora de forma inteligente as conversas ambientais e outro áudio irrelevante, compreendendo quando deve ouvir e quando deve permanecer em silêncio.
Para mais informações sobre o áudio nativo, consulte o artigo Ferramentas integradas.
Formatos de áudio suportados
A API Live suporta os seguintes formatos de áudio:
- Áudio de entrada: áudio PCM de 16 bits não processado a 16 kHz, little-endian
- Áudio de saída: áudio PCM de 16 bits não processado a 24 kHz, little-endian
Receba respostas de texto a partir da entrada de áudio
Pode enviar áudio e receber respostas de texto convertendo o áudio num formato PCM de 16 bits, 16 kHz e mono. O exemplo seguinte lê um ficheiro WAV e envia-o no formato correto:
Python
# Test file: https://storage.googleapis.com/generativeai-downloads/data/16000.wav # Install helpers for converting files: pip install librosa soundfile import asyncio import io from pathlib import Path from google import genai from google.genai import types import soundfile as sf import librosa client = genai.Client( vertexai=True, project=GOOGLE_CLOUD_PROJECT, location=GOOGLE_CLOUD_LOCATION, ) model = "gemini-live-2.5-flash" config = {"response_modalities": ["TEXT"]} async def main(): async with client.aio.live.connect(model=model, config=config) as session: buffer = io.BytesIO() y, sr = librosa.load("sample.wav", sr=16000) sf.write(buffer, y, sr, format="RAW", subtype="PCM_16") buffer.seek(0) audio_bytes = buffer.read() # If already in correct format, you can use this: # audio_bytes = Path("sample.pcm").read_bytes() await session.send_realtime_input( audio=types.Blob(data=audio_bytes, mime_type="audio/pcm;rate=16000") ) async for response in session.receive(): if response.text is not None: print(response.text) if __name__ == "__main__": asyncio.run(main())
Receba respostas de voz a partir da entrada de texto
Use este exemplo para enviar texto introduzido e receber respostas de voz sintetizada:
Python
import asyncio import numpy as np from IPython.display import Audio, Markdown, display from google import genai from google.genai.types import ( Content, LiveConnectConfig, HttpOptions, Modality, Part, SpeechConfig, VoiceConfig, PrebuiltVoiceConfig, ) client = genai.Client( vertexai=True, project=GOOGLE_CLOUD_PROJECT, location=GOOGLE_CLOUD_LOCATION, ) voice_name = "Aoede" config = LiveConnectConfig( response_modalities=["AUDIO"], speech_config=SpeechConfig( voice_config=VoiceConfig( prebuilt_voice_config=PrebuiltVoiceConfig( voice_name=voice_name, ) ), ), ) async with client.aio.live.connect( model="gemini-live-2.5-flash", config=config, ) as session: text_input = "Hello? Gemini are you there?" display(Markdown(f"**Input:** {text_input}")) await session.send_client_content( turns=Content(role="user", parts=[Part(text=text_input)])) audio_data = [] async for message in session.receive(): if ( message.server_content.model_turn and message.server_content.model_turn.parts ): for part in message.server_content.model_turn.parts: if part.inline_data: audio_data.append( np.frombuffer(part.inline_data.data, dtype=np.int16) ) if audio_data: display(Audio(np.concatenate(audio_data), rate=24000, autoplay=True))
Para ver mais exemplos de envio de texto, consulte o nosso guia de introdução.
Transcreva áudio
A API Live pode transcrever o áudio de entrada e saída. Use o exemplo seguinte para ativar a transcrição:
Python
import asyncio from google import genai from google.genai import types client = genai.Client( vertexai=True, project=GOOGLE_CLOUD_PROJECT, location=GOOGLE_CLOUD_LOCATION, ) model = "gemini-live-2.5-flash" config = { "response_modalities": ["AUDIO"], "input_audio_transcription": {}, "output_audio_transcription": {} } async def main(): async with client.aio.live.connect(model=model, config=config) as session: message = "Hello? Gemini are you there?" await session.send_client_content( turns={"role": "user", "parts": [{"text": message}]}, turn_complete=True ) async for response in session.receive(): if response.server_content.model_turn: print("Model turn:", response.server_content.model_turn) if response.server_content.input_transcription: print("Input transcript:", response.server_content.input_transcription.text) if response.server_content.output_transcription: print("Output transcript:", response.server_content.output_transcription.text) if __name__ == "__main__": asyncio.run(main())
WebSockets
# Set model generation_config CONFIG = { 'response_modalities': ['AUDIO'], } headers = { "Content-Type": "application/json", "Authorization": f"Bearer {bearer_token[0]}", } # Connect to the server async with connect(SERVICE_URL, additional_headers=headers) as ws: # Setup the session await ws.send( json.dumps( { "setup": { "model": "gemini-2.0-flash-live-preview-04-09", "generation_config": CONFIG, 'input_audio_transcription': {}, 'output_audio_transcription': {} } } ) ) # Receive setup response raw_response = await ws.recv(decode=False) setup_response = json.loads(raw_response.decode("ascii")) # Send text message text_input = "Hello? Gemini are you there?" display(Markdown(f"**Input:** {text_input}")) msg = { "client_content": { "turns": [{"role": "user", "parts": [{"text": text_input}]}], "turn_complete": True, } } await ws.send(json.dumps(msg)) responses = [] input_transcriptions = [] output_transcriptions = [] # Receive chucks of server response async for raw_response in ws: response = json.loads(raw_response.decode()) server_content = response.pop("serverContent", None) if server_content is None: break if (input_transcription := server_content.get("inputTranscription")) is not None: if (text := input_transcription.get("text")) is not None: input_transcriptions.append(text) if (output_transcription := server_content.get("outputTranscription")) is not None: if (text := output_transcription.get("text")) is not None: output_transcriptions.append(text) model_turn = server_content.pop("modelTurn", None) if model_turn is not None: parts = model_turn.pop("parts", None) if parts is not None: for part in parts: pcm_data = base64.b64decode(part["inlineData"]["data"]) responses.append(np.frombuffer(pcm_data, dtype=np.int16)) # End of turn turn_complete = server_content.pop("turnComplete", None) if turn_complete: break if input_transcriptions: display(Markdown(f"**Input transcription >** {''.join(input_transcriptions)}")) if responses: # Play the returned audio message display(Audio(np.concatenate(responses), rate=24000, autoplay=True)) if output_transcriptions: display(Markdown(f"**Output transcription >** {''.join(output_transcriptions)}"))
Mais informações
Para mais informações sobre a utilização da API Live, consulte: