La API de Live permite interacciones de voz y video bidireccionales de baja latencia con Gemini. Usa la API de Live para brindar a los usuarios finales conversaciones de voz naturales y similares a las humanas, incluida la capacidad de interrumpir las respuestas del modelo con comandos de voz.
En este documento, se abordan los conceptos básicos para usar la API de Live, incluidas sus capacidades, ejemplos iniciales y ejemplos de código de casos de uso básicos. Si buscas información para iniciar una conversación interactiva con la API de Live, consulta Conversaciones interactivas con la API de Live. Si buscas información sobre las herramientas que puede usar la API en vivo, consulta Herramientas integradas.
Modelos compatibles
La API de Live se admite para su uso en el SDK de IA generativa de Google y en Vertex AI Studio. Algunas funciones (como la entrada y salida de texto) solo están disponibles con el SDK de IA generativa.
Puedes usar la API de Live con los siguientes modelos:
Versión del modelo | Nivel de disponibilidad |
---|---|
gemini-live-2.5-flash |
DG privada* |
gemini-live-2.5-flash-preview-native-audio |
Versión preliminar pública |
* Comunícate con tu representante del equipo de cuentas de Google para solicitar acceso.
Para obtener más información, incluidas las especificaciones técnicas y las limitaciones, consulta la guía de referencia de la API de Live.
Ejemplos de activadores
Puedes comenzar a usar la API de Live con uno de nuestros ejemplos:
Notebooks de Jupyter:
- Comienza a usar la API de Live en Vertex AI con WebSockets
- Comienza a usar la API de Live con el SDK de IA generativa de Google
Aplicaciones y guías de demostración:
- App de demostración de WebSocket
- Kit de desarrollo de agentes: Transmisión de audio personalizada
- Project Livewire
Capacidades de la API en vivo
- Comprensión multimodal en tiempo real: Conversa con Gemini sobre lo que ve en un feed de video o a través del uso compartido de pantalla, con compatibilidad integrada para la transmisión de audio y video.
- Uso de herramientas integradas: Integra sin problemas herramientas como llamadas a funciones y fundamentación con la Búsqueda de Google en tus conversaciones para lograr interacciones más prácticas y dinámicas.
- Interacciones de baja latencia: Ten interacciones de baja latencia y similares a las humanas con Gemini.
- Compatibilidad multilingüe: Conversa en 24 idiomas admitidos.
- (Solo versiones de DG) Compatibilidad con la capacidad de procesamiento aprovisionada: Usa una suscripción de costo fijo y plazo fijo disponible en varias duraciones que reserva capacidad de procesamiento para los modelos de IA generativa compatibles en Vertex AI, incluida la API de Live.
Gemini 2.5 Flash con la API de Live también incluye audio nativo como oferta de versión preliminar pública. El audio nativo presenta las siguientes novedades:
- Diálogo afectivo: La API en vivo comprende el tono de voz del usuario y responde en consecuencia. Las mismas palabras dichas de diferentes maneras pueden generar conversaciones muy diferentes y más matizadas.
- Audio proactivo y reconocimiento del contexto: La API de Live ignora de forma inteligente las conversaciones ambientales y otros audios irrelevantes, y comprende cuándo escuchar y cuándo permanecer en silencio.
Para obtener más información sobre el audio nativo, consulta Herramientas integradas.
Formatos de audio compatibles
La API de Live admite los siguientes formatos de audio:
- Audio de entrada: Audio PCM sin procesar de 16 bits a 16 kHz, little-endian
- Audio de salida: Audio PCM sin procesar de 16 bits a 24 kHz, little-endian
Obtén respuestas de texto a partir de la entrada de audio
Puedes enviar audio y recibir respuestas de texto convirtiendo el audio a un formato PCM de 16 bits, 16 kHz y mono. En el siguiente ejemplo, se lee un archivo WAV y se envía en el formato correcto:
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())
Obtén respuestas de voz a partir de una entrada de texto
Usa este ejemplo para enviar entrada de texto y recibir respuestas 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 obtener más ejemplos de cómo enviar texto, consulta nuestra guía de introducción.
Transcribe audio
La API de Live puede transcribir el audio de entrada y salida. Usa el siguiente ejemplo para habilitar la transcripción:
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)}"))
Más información
Para obtener más información sobre el uso de la API de Live, consulta los siguientes recursos: