Get started with Live API

Die Live API ermöglicht latenzarme Sprach- und Videointeraktionen in Echtzeit mit Gemini. Es verarbeitet kontinuierliche Audio-, Video- oder Textstreams, um sofortige, menschenähnliche gesprochene Antworten zu liefern und so eine natürliche Konversationsumgebung für Ihre Nutzer zu schaffen.

Live API – Übersicht

Die Live API bietet eine umfassende Reihe von Funktionen wie Voice Activity Detection (Erkennung von Sprachaktivität), Tool-Nutzung und Funktionsaufrufe, Sitzungsverwaltung (zur Verwaltung von langen Unterhaltungen) und ephemere Tokens (zur sicheren clientseitigen Authentifizierung).

Auf dieser Seite finden Sie Beispiele und grundlegende Codebeispiele, mit denen Sie schnell loslegen können.

Live API in Google AI Studio ausprobieren

Implementierungsansatz auswählen

Bei der Integration mit der Live API müssen Sie einen der folgenden Implementierungsansätze auswählen:

  • Server-zu-Server: Ihr Backend stellt über WebSockets eine Verbindung zur Live API her. Normalerweise sendet Ihr Client Streamdaten (Audio, Video, Text) an Ihren Server, der sie dann an die Live API weiterleitet.
  • Client-zu-Server: Ihr Frontend-Code stellt über WebSockets eine direkte Verbindung zur Live API her, um Daten zu streamen. Ihr Backend wird dabei umgangen.

Einbindung in Partnerlösungen

Um die Entwicklung von Audio- und Video-Apps in Echtzeit zu optimieren, können Sie eine Drittanbieterintegration verwenden, die die Gemini Live API über WebRTC oder WebSockets unterstützt.

Jetzt starten

In diesem serverseitigen Beispiel wird Audio vom Mikrofon gestreamt und das zurückgegebene Audio wird abgespielt. Vollständige End-to-End-Beispiele einschließlich einer Clientanwendung finden Sie unter Beispielanwendungen.

Das Eingabe-Audioformat sollte 16-Bit-PCM, 16 kHz, Mono sein und das empfangene Audio hat eine Abtastrate von 24 kHz.

Python

Installieren Sie Helfer für das Audiostreaming. Möglicherweise sind zusätzliche Abhängigkeiten auf Systemebene erforderlich, z.B. portaudio. Eine ausführliche Installationsanleitung finden Sie in der PyAudio-Dokumentation.

pip install pyaudio
import asyncio
from google import genai
import pyaudio

client = genai.Client()

# --- pyaudio config ---
FORMAT = pyaudio.paInt16
CHANNELS = 1
SEND_SAMPLE_RATE = 16000
RECEIVE_SAMPLE_RATE = 24000
CHUNK_SIZE = 1024

pya = pyaudio.PyAudio()

# --- Live API config ---
MODEL = "gemini-2.5-flash-native-audio-preview-09-2025"
CONFIG = {
    "response_modalities": ["AUDIO"],
    "system_instruction": "You are a helpful and friendly AI assistant.",
}

audio_queue_output = asyncio.Queue()
audio_queue_mic = asyncio.Queue(maxsize=5)
audio_stream = None

async def listen_audio():
    """Listens for audio and puts it into the mic audio queue."""
    global audio_stream
    mic_info = pya.get_default_input_device_info()
    audio_stream = await asyncio.to_thread(
        pya.open,
        format=FORMAT,
        channels=CHANNELS,
        rate=SEND_SAMPLE_RATE,
        input=True,
        input_device_index=mic_info["index"],
        frames_per_buffer=CHUNK_SIZE,
    )
    kwargs = {"exception_on_overflow": False} if __debug__ else {}
    while True:
        data = await asyncio.to_thread(audio_stream.read, CHUNK_SIZE, **kwargs)
        await audio_queue_mic.put({"data": data, "mime_type": "audio/pcm"})

async def send_realtime(session):
    """Sends audio from the mic audio queue to the GenAI session."""
    while True:
        msg = await audio_queue_mic.get()
        await session.send_realtime_input(audio=msg)

async def receive_audio(session):
    """Receives responses from GenAI and puts audio data into the speaker audio queue."""
    while True:
        turn = session.receive()
        async for response in turn:
            if (response.server_content and response.server_content.model_turn):
                for part in response.server_content.model_turn.parts:
                    if part.inline_data and isinstance(part.inline_data.data, bytes):
                        audio_queue_output.put_nowait(part.inline_data.data)

        # Empty the queue on interruption to stop playback
        while not audio_queue_output.empty():
            audio_queue_output.get_nowait()

async def play_audio():
    """Plays audio from the speaker audio queue."""
    stream = await asyncio.to_thread(
        pya.open,
        format=FORMAT,
        channels=CHANNELS,
        rate=RECEIVE_SAMPLE_RATE,
        output=True,
    )
    while True:
        bytestream = await audio_queue_output.get()
        await asyncio.to_thread(stream.write, bytestream)

async def run():
    """Main function to run the audio loop."""
    try:
        async with client.aio.live.connect(
            model=MODEL, config=CONFIG
        ) as live_session:
            print("Connected to Gemini. Start speaking!")
            async with asyncio.TaskGroup() as tg:
                tg.create_task(send_realtime(live_session))
                tg.create_task(listen_audio())
                tg.create_task(receive_audio(live_session))
                tg.create_task(play_audio())
    except asyncio.CancelledError:
        pass
    finally:
        if audio_stream:
            audio_stream.close()
        pya.terminate()
        print("\nConnection closed.")

if __name__ == "__main__":
    try:
        asyncio.run(run())
    except KeyboardInterrupt:
        print("Interrupted by user.")

JavaScript

Installieren Sie Helfer für das Audiostreaming. Möglicherweise sind zusätzliche Abhängigkeiten auf Systemebene erforderlich (sox für Mac/Windows oder ALSA für Linux). Eine detaillierte Installationsanleitung finden Sie in der Dokumentation zu Lautsprecher und Mikrofon.

npm install mic speaker
import { GoogleGenAI, Modality } from '@google/genai';
import mic from 'mic';
import Speaker from 'speaker';

const ai = new GoogleGenAI({});
// WARNING: Do not use API keys in client-side (browser based) applications
// Consider using Ephemeral Tokens instead
// More information at: https://ai.google.dev/gemini-api/docs/ephemeral-tokens

// --- Live API config ---
const model = 'gemini-2.5-flash-native-audio-preview-09-2025';
const config = {
  responseModalities: [Modality.AUDIO],
  systemInstruction: "You are a helpful and friendly AI assistant.",
};

async function live() {
  const responseQueue = [];
  const audioQueue = [];
  let speaker;

  async function waitMessage() {
    while (responseQueue.length === 0) {
      await new Promise((resolve) => setImmediate(resolve));
    }
    return responseQueue.shift();
  }

  function createSpeaker() {
    if (speaker) {
      process.stdin.unpipe(speaker);
      speaker.end();
    }
    speaker = new Speaker({
      channels: 1,
      bitDepth: 16,
      sampleRate: 24000,
    });
    speaker.on('error', (err) => console.error('Speaker error:', err));
    process.stdin.pipe(speaker);
  }

  async function messageLoop() {
    // Puts incoming messages in the audio queue.
    while (true) {
      const message = await waitMessage();
      if (message.serverContent && message.serverContent.interrupted) {
        // Empty the queue on interruption to stop playback
        audioQueue.length = 0;
        continue;
      }
      if (message.serverContent && message.serverContent.modelTurn && message.serverContent.modelTurn.parts) {
        for (const part of message.serverContent.modelTurn.parts) {
          if (part.inlineData && part.inlineData.data) {
            audioQueue.push(Buffer.from(part.inlineData.data, 'base64'));
          }
        }
      }
    }
  }

  async function playbackLoop() {
    // Plays audio from the audio queue.
    while (true) {
      if (audioQueue.length === 0) {
        if (speaker) {
          // Destroy speaker if no more audio to avoid warnings from speaker library
          process.stdin.unpipe(speaker);
          speaker.end();
          speaker = null;
        }
        await new Promise((resolve) => setImmediate(resolve));
      } else {
        if (!speaker) createSpeaker();
        const chunk = audioQueue.shift();
        await new Promise((resolve) => {
          speaker.write(chunk, () => resolve());
        });
      }
    }
  }

  // Start loops
  messageLoop();
  playbackLoop();

  // Connect to Gemini Live API
  const session = await ai.live.connect({
    model: model,
    config: config,
    callbacks: {
      onopen: () => console.log('Connected to Gemini Live API'),
      onmessage: (message) => responseQueue.push(message),
      onerror: (e) => console.error('Error:', e.message),
      onclose: (e) => console.log('Closed:', e.reason),
    },
  });

  // Setup Microphone for input
  const micInstance = mic({
    rate: '16000',
    bitwidth: '16',
    channels: '1',
  });
  const micInputStream = micInstance.getAudioStream();

  micInputStream.on('data', (data) => {
    // API expects base64 encoded PCM data
    session.sendRealtimeInput({
      audio: {
        data: data.toString('base64'),
        mimeType: "audio/pcm;rate=16000"
      }
    });
  });

  micInputStream.on('error', (err) => {
    console.error('Microphone error:', err);
  });

  micInstance.start();
  console.log('Microphone started. Speak now...');
}

live().catch(console.error);

Beispielanwendungen

Die folgenden Beispielanwendungen veranschaulichen die Verwendung der Live API für End-to-End-Anwendungsfälle:

  • Starter-App für Live-Audio in AI Studio, in der JavaScript-Bibliotheken verwendet werden, um eine Verbindung zur Live API herzustellen und bidirektionales Audio über Ihr Mikrofon und Ihre Lautsprecher zu streamen.
  • Weitere Beispiele und Anleitungen für den Einstieg finden Sie unter Partnerintegrationen.

Nächste Schritte

  • Im vollständigen Leitfaden zu den Funktionen der Live API finden Sie wichtige Funktionen und Konfigurationen, darunter die Spracherkennung und native Audiofunktionen.
  • Im Leitfaden zur Tool-Nutzung erfahren Sie, wie Sie die Live API in Tools und Funktionsaufrufe einbinden.
  • Weitere Informationen zum Verwalten von Unterhaltungen mit langer Ausführungszeit finden Sie im Leitfaden Sitzungsverwaltung.
  • Lesen Sie den Leitfaden zu Einmal-Tokens für die sichere Authentifizierung in Client-zu-Server-Anwendungen.
  • Weitere Informationen zur zugrunde liegenden WebSockets API finden Sie in der WebSockets API-Referenz.