Die Live API ermöglicht bidirektionale Sprach- und Videointeraktionen mit geringer Latenz mit Gemini. Mit der Live API können Sie Endnutzern natürliche, menschenähnliche Sprachunterhaltungen ermöglichen. Dazu gehört auch die Möglichkeit, die Antworten des Modells mit Sprachbefehlen zu unterbrechen.
In diesem Dokument werden die Grundlagen der Verwendung der Live API behandelt, einschließlich ihrer Funktionen, Einstiegsbeispiele und grundlegender Anwendungsbeispiele. Wenn Sie Informationen dazu suchen, wie Sie eine interaktive Unterhaltung mit der Live API starten, lesen Sie den Abschnitt Interaktive Unterhaltungen mit der Live API. Informationen dazu, welche Tools die Live API verwenden kann, finden Sie unter Integrierte Tools.
Unterstützte Modelle
Die Live API wird sowohl im Google Gen AI SDK als auch in Vertex AI Studio unterstützt. Einige Funktionen (z. B. Texteingabe und ‑ausgabe) sind nur über das Gen AI SDK verfügbar.
Sie können die Live API mit den folgenden Modellen verwenden:
Modellversion | Verfügbarkeitsstufe |
---|---|
gemini-live-2.5-flash |
Privater GA-Release* |
gemini-live-2.5-flash-preview-native-audio |
Öffentliche Vorschau |
* Wenden Sie sich an Ihren Google-Kundenbetreuer, um Zugriff anzufordern.
Weitere Informationen, einschließlich technischer Spezifikationen und Einschränkungen, finden Sie in der Live API-Referenz.
Beispiele für Starter
Sie können mit einem unserer Beispiele mit der Live API beginnen:
Jupyter-Notebooks:
- Erste Schritte mit der Live API in Vertex AI mit WebSockets
- Erste Schritte mit der Live API mit dem Google Gen AI SDK
Demoanwendungen und ‑anleitungen:
Live API-Funktionen
- Multimodale Echtzeit-Analyse:Unterhalten Sie sich mit Gemini über das, was in einem Videofeed oder bei der Bildschirmfreigabe zu sehen ist. Dabei wird das Streamen von Audio und Video unterstützt.
- Integrierte Tools verwenden:Tools wie Funktionsaufrufe und Google Suche als Grundlage lassen sich nahtlos in Ihre Unterhaltungen einbinden, um die Interaktionen praktischer und dynamischer zu gestalten.
- Interaktionen mit geringer Latenz:Sie können mit Gemini natürlich klingende Interaktionen mit geringer Latenz führen.
- Mehrsprachiger Support:Sie können sich in 24 unterstützten Sprachen unterhalten.
- (Nur GA-Versionen) Unterstützung für bereitgestellten Durchsatz:Nutzen Sie ein Abonnement mit fester Gebühr und fester Laufzeit, das in verschiedenen Laufzeiten verfügbar ist und Durchsatz für unterstützte generative KI-Modelle in Vertex AI reserviert, einschließlich der Live API.
Gemini 2.5 Flash mit Live API umfasst auch natives Audio als Angebot in der öffentlichen Vorschau. Mit der nativen Audiofunktion wird Folgendes eingeführt:
- Affektiver Dialog:Die Live API versteht die Stimmlage des Nutzers und reagiert darauf. Dieselben Wörter, die auf unterschiedliche Weise gesprochen werden, können zu sehr unterschiedlichen und differenzierteren Gesprächen führen.
- Proaktive Audio- und Kontextanalyse:Die Live API ignoriert auf intelligente Weise Umgebungsgespräche und andere irrelevante Audioinhalte und erkennt, wann sie zuhören und wann sie stumm bleiben soll.
Weitere Informationen zu nativem Audio finden Sie unter Integrierte Tools.
Unterstützte Audioformate
Die Live API unterstützt die folgenden Audioformate:
- Eingabeaudio:Rohes 16‑Bit-PCM-Audio mit 16 kHz, Little Endian
- Ausgabe-Audio:Rohes 16‑Bit-PCM-Audio mit 24 kHz, Little Endian
Textantworten auf Audioeingabe erhalten
Sie können Audio senden und Textantworten empfangen, indem Sie das Audio in ein 16-Bit-PCM-Format mit 16 kHz und Mono umwandeln. Im folgenden Beispiel wird eine WAV-Datei gelesen und im richtigen Format gesendet:
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())
Sprachantworten auf Texteingabe erhalten
In diesem Beispiel wird gezeigt, wie Sie Texteingaben senden und synthetisierte Sprachantworten empfangen:
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))
Weitere Beispiele für das Senden von Text finden Sie in unserem Leitfaden für den Einstieg.
Audio transkribieren
Mit der Live API können sowohl Eingabe- als auch Ausgabeaudio transkribiert werden. Verwenden Sie das folgende Beispiel, um die Transkription zu aktivieren:
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)}"))
Weitere Informationen
Weitere Informationen zur Verwendung der Live API finden Sie hier: