Die Live API ermöglicht latenzarme, Echtzeit-Sprach- und Videointeraktionen mit Gemini. Sie verarbeitet kontinuierliche Audio-, Video- oder Textstreams, um sofortige, menschenähnliche gesprochene Antworten zu liefern und so eine natürliche Konversation für Ihre Nutzer zu ermöglichen.
Die Live API bietet eine umfassende Palette von Funktionen für die Entwicklung von Echtzeit-KI-Anwendungen, darunter:
- Eingebaute Erkennung der Sprachaktivitäten (VAD) zur Verwaltung von Unterbrechungen.
- Unterstützung für die Nutzung von Tools und Funktionsaufrufe zum Erstellen von Anwendungen, die Aktionen ausführen oder Kontext aus der realen Welt einbinden können.
- Sitzungsspezifische Tokens für die sichere Authentifizierung in Client-zu-Server-Anwendungen.
- Sitzungsverwaltung für die Verwaltung längerer Unterhaltungen.
Auf dieser Seite finden Sie Codebeispiele für die Audio-zu-Audio-Umwandlung und Beispielanwendungen für funktionierende Prototypen. Weitere Informationen finden Sie im umfassenden Leitfaden zu Funktionen.
Beispielanwendungen
In den folgenden Beispielanwendungen wird veranschaulicht, wie die Live API für End-to-End-Anwendungsfälle verwendet wird:
- Starter-App für Live-Audio in AI Studio, die JavaScript-Bibliotheken verwendet, um eine Verbindung zur Live API herzustellen und bidirektionales Audio über das Mikrofon und die Lautsprecher zu streamen.
- Python-Rezeptbuch für die Live API mit Pyaudio, das eine Verbindung zur Live API herstellt
Einbindung in Partnerlösungen
Alternativ kannst du auch Drittanbieterplattformen verwenden, die die Gemini Live API bereits integriert haben. Diese Partner arbeiten über das WebRTC-Protokoll und können die Entwicklung von Echtzeit-Sprach- und Videoanwendungen vereinfachen.
Sie können Folgendes verwenden:
Informationen zu Partnerintegrationen finden Sie in der jeweiligen Entwicklerdokumentation.
Bevor Sie mit dem Erstellen beginnen
Bevor Sie mit der Live API beginnen, müssen Sie zwei wichtige Entscheidungen treffen: die Auswahl eines Modells und die Auswahl eines Implementierungsansatzes.
Modell auswählen
Wenn Sie einen audiobasierten Anwendungsfall entwickeln, bestimmt Ihre Modellauswahl die Architektur zur Audiogenerierung, die für die Erstellung der Audioantwort verwendet wird:
- Native Audio mit Gemini 2.5 Flash: Mit dieser Option erhalten Sie die natürlichste und realistischste Sprache sowie eine bessere mehrsprachige Leistung.
Außerdem ermöglicht es erweiterte Funktionen wie affektive (empathiefähige) Dialoge, proaktive Audioausgabe (bei der das Modell entscheiden kann, bestimmte Eingaben zu ignorieren oder darauf zu reagieren) und „Denken“.
Native Audio wird von den folgenden Modellen für native Audioinhalte unterstützt:
gemini-2.5-flash-preview-native-audio-dialog
gemini-2.5-flash-exp-native-audio-thinking-dialog
- Halbkaskaden-Audio mit Gemini 2.0 Flash:
Bei dieser Option, die mit dem Modell
gemini-2.0-flash-live-001
verfügbar ist, wird eine kaskadierte Modellarchitektur (nativer Audioeingang und Text-zu-Sprache-Ausgabe) verwendet. Sie bietet eine bessere Leistung und Zuverlässigkeit in Produktionsumgebungen, insbesondere bei der Verwendung von Tools.
Implementierungsansatz auswählen
Bei der Einbindung in die Live API musst du einen der folgenden Implementierungsansätze auswählen:
- Server-zu-Server: Dein Backend stellt über WebSockets eine Verbindung zur Live API her. Normalerweise sendet dein Client Streamdaten (Audio, Video, Text) an deinen Server, der sie dann an die Live API weiterleitet.
- Client-zu-Server: Dein Frontend-Code stellt über WebSockets eine direkte Verbindung zur Live API her, um Daten zu streamen, ohne dein Backend zu nutzen.
Jetzt starten
Die folgenden Beispiele enthalten vollständigen Code für gängige Anwendungsfälle. Sie zeigen, wie Sie eine Verbindung mit einem API-Schlüssel herstellen und das Verhalten des Modells mithilfe von Systemanweisungen steuern.
Im Leitfaden zu den Live API-Funktionen finden Sie eine umfassende Liste der verfügbaren Funktionen und Konfigurationen.
Audio senden und empfangen
In diesem Beispiel wird eine WAV-Datei gelesen, im richtigen Format gesendet und die empfangenen Daten als WAV-Datei gespeichert.
Sie können Audio senden, indem Sie es in das Monoformat 16-Bit PCM, 16 kHz umwandeln. Sie können Audio empfangen, indem Sie AUDIO
als Antwortmodalität festlegen. Die Ausgabe verwendet eine Abtastrate von 24 kHz.
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
import wave
from google import genai
from google.genai import types
import soundfile as sf
import librosa
client = genai.Client(api_key="GEMINI_API_KEY")
# Half cascade model:
# model = "gemini-2.0-flash-live-001"
# Native audio output model:
model = "gemini-2.5-flash-preview-native-audio-dialog"
config = {
"response_modalities": ["AUDIO"],
"system_instruction": "You are a helpful assistant and answer in a friendly tone.",
}
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")
)
wf = wave.open("audio.wav", "wb")
wf.setnchannels(1)
wf.setsampwidth(2)
wf.setframerate(24000) # Output is 24kHz
async for response in session.receive():
if response.data is not None:
wf.writeframes(response.data)
# Un-comment this code to print audio data info
# if response.server_content.model_turn is not None:
# print(response.server_content.model_turn.parts[0].inline_data.mime_type)
wf.close()
if __name__ == "__main__":
asyncio.run(main())
JavaScript
// Test file: https://storage.googleapis.com/generativeai-downloads/data/16000.wav
import { GoogleGenAI, Modality } from '@google/genai';
import * as fs from "node:fs";
import pkg from 'wavefile'; // npm install wavefile
const { WaveFile } = pkg;
const ai = new GoogleGenAI({ apiKey: "GEMINI_API_KEY" });
// Half cascade model:
// const model = "gemini-2.0-flash-live-001"
// Native audio output model:
const model = "gemini-2.5-flash-preview-native-audio-dialog"
const config = {
responseModalities: [Modality.AUDIO],
systemInstruction: "You are a helpful assistant and answer in a friendly tone."
};
async function live() {
const responseQueue = [];
async function waitMessage() {
let done = false;
let message = undefined;
while (!done) {
message = responseQueue.shift();
if (message) {
done = true;
} else {
await new Promise((resolve) => setTimeout(resolve, 100));
}
}
return message;
}
async function handleTurn() {
const turns = [];
let done = false;
while (!done) {
const message = await waitMessage();
turns.push(message);
if (message.serverContent && message.serverContent.turnComplete) {
done = true;
}
}
return turns;
}
const session = await ai.live.connect({
model: model,
callbacks: {
onopen: function () {
console.debug('Opened');
},
onmessage: function (message) {
responseQueue.push(message);
},
onerror: function (e) {
console.debug('Error:', e.message);
},
onclose: function (e) {
console.debug('Close:', e.reason);
},
},
config: config,
});
// Send Audio Chunk
const fileBuffer = fs.readFileSync("sample.wav");
// Ensure audio conforms to API requirements (16-bit PCM, 16kHz, mono)
const wav = new WaveFile();
wav.fromBuffer(fileBuffer);
wav.toSampleRate(16000);
wav.toBitDepth("16");
const base64Audio = wav.toBase64();
// If already in correct format, you can use this:
// const fileBuffer = fs.readFileSync("sample.pcm");
// const base64Audio = Buffer.from(fileBuffer).toString('base64');
session.sendRealtimeInput(
{
audio: {
data: base64Audio,
mimeType: "audio/pcm;rate=16000"
}
}
);
const turns = await handleTurn();
// Combine audio data strings and save as wave file
const combinedAudio = turns.reduce((acc, turn) => {
if (turn.data) {
const buffer = Buffer.from(turn.data, 'base64');
const intArray = new Int16Array(buffer.buffer, buffer.byteOffset, buffer.byteLength / Int16Array.BYTES_PER_ELEMENT);
return acc.concat(Array.from(intArray));
}
return acc;
}, []);
const audioBuffer = new Int16Array(combinedAudio);
const wf = new WaveFile();
wf.fromScratch(1, 24000, '16', audioBuffer); // output is 24kHz
fs.writeFileSync('audio.wav', wf.toBuffer());
session.close();
}
async function main() {
await live().catch((e) => console.error('got error', e));
}
main();
Nächste Schritte
- Vollständige Anleitung zu den Funktionen der Live API
- Im Leitfaden zur Tool-Nutzung erfährst du, wie du Gemini-Tools in die Live API einbinden kannst.
- Im Leitfaden zur Sitzungsverwaltung erfahren Sie, wie Sie die Effizienz von Sitzungen maximieren.
- Weitere Informationen zur zugrunde liegenden WebSockets API finden Sie in der WebSockets API-Referenz.