Live-API

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:

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: