Die Gemini Live API ermöglicht bidirektionale Text- und Sprachinteraktionen mit Gemini mit geringer Latenz. Mit der Live API können Sie Endnutzern natürliche, menschenähnliche Sprachunterhaltungen ermöglichen. Die Antworten des Modells können dabei durch Text- oder Sprachbefehle unterbrochen werden. Das Modell kann Text- und Audioeingaben verarbeiten (Video folgt in Kürze) und Text- und Audioausgaben generieren.
Sie können Prototypen mit Prompts und Live API in Google AI Studio oder Vertex AI Studio erstellen.
Die Live API ist eine zustandsbehaftete API, die eine WebSocket-Verbindung herstellt, um eine Sitzung zwischen dem Client und dem Gemini-Server herzustellen. Weitere Informationen finden Sie in der Referenzdokumentation zu Live API (Gemini Developer API | Vertex AI Gemini API).
Hinweis
Klicken Sie auf Ihren Gemini API-Anbieter, um anbieterspezifische Inhalte und Code auf dieser Seite aufzurufen. |
Falls noch nicht geschehen, folgen Sie dem Startleitfaden. Darin wird beschrieben, wie Sie Ihr Firebase-Projekt einrichten, Ihre App mit Firebase verbinden, das SDK hinzufügen, den Backend-Dienst für den ausgewählten Gemini API-Anbieter initialisieren und eine LiveModel
-Instanz erstellen.
Modelle, die diese Funktion unterstützen
Die Modelle, die Live API unterstützen, hängen vom ausgewählten Gemini API-Anbieter ab.
Unabhängig vom API-Anbieter unterstützen die Modelle gemini-2.0-flash
und gemini-2.5-flash
nicht den Live API.
Gemini Developer API
gemini-live-2.5-flash
(privater GA-Release*)gemini-live-2.5-flash-preview
gemini-2.0-flash-live-001
gemini-2.0-flash-live-preview-04-09
Vertex AI Gemini API
gemini-live-2.5-flash
(privater GA-Release*)gemini-2.0-flash-live-preview-04-09
(nur inus-central1
verfügbar)
Beachten Sie, dass bei den 2.5-Modellnamen für Live API das Segment live
unmittelbar auf das Segment gemini
folgt.
* Wenden Sie sich an Ihren Google Cloud-Account-Management-Team, um Zugriff anzufordern.
Standardfunktionen von Live API verwenden
In diesem Abschnitt wird beschrieben, wie Sie die Standardfunktionen von Live API verwenden, insbesondere zum Streamen verschiedener Arten von Ein- und Ausgaben:
- Text senden und empfangen
- Audio senden und empfangen
- Audio senden und Text empfangen
- Text senden und Audio empfangen
Streaming-Text aus Streaming-Texteingabe generieren
Bevor Sie dieses Beispiel ausprobieren, müssen Sie den Abschnitt Vorbereitung in diesem Leitfaden durcharbeiten, um Ihr Projekt und Ihre App einzurichten. In diesem Abschnitt klicken Sie auch auf eine Schaltfläche für den von Ihnen ausgewählten Gemini API-Anbieter, damit auf dieser Seite anbieterspezifische Inhalte angezeigt werden. |
Sie können gestreamte Texteingaben senden und gestreamte Textausgaben empfangen. Achten Sie darauf, dass Sie eine liveModel
-Instanz erstellen und die Antwortmodalität auf Text
festlegen.
Swift
Die Funktion Live API wird für Apps auf Apple-Plattformen noch nicht unterstützt. Schauen Sie aber bald wieder vorbei.
Kotlin
// Initialize the Gemini Developer API backend service
// Create a `LiveModel` instance with the flash-live model (only model that supports the Live API)
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel(
modelName = "gemini-2.0-flash-live-preview-04-09",
// Configure the model to respond with text
generationConfig = liveGenerationConfig {
responseModality = ResponseModality.TEXT
}
)
val session = model.connect()
// Provide a text prompt
val text = "tell a short story"
session.send(text)
var outputText = ""
session.receive().collect {
if(it.turnComplete) {
// Optional: if you don't require to send more requests.
session.stopReceiving();
}
outputText = outputText + it.text
}
// Output received from the server.
println(outputText)
Java
ExecutorService executor = Executors.newFixedThreadPool(1);
// Initialize the Gemini Developer API backend service
// Create a `LiveModel` instance with the flash-live model (only model that supports the Live API)
LiveGenerativeModel lm = FirebaseAI.getInstance(GenerativeBackend.googleAI()).liveModel(
"gemini-2.0-flash-live-preview-04-09",
// Configure the model to respond with text
new LiveGenerationConfig.Builder()
.setResponseModalities(ResponseModality.TEXT)
.build()
);
LiveModelFutures model = LiveModelFutures.from(lm);
ListenableFuture<LiveSession> sessionFuture = model.connect();
class LiveContentResponseSubscriber implements Subscriber<LiveContentResponse> {
@Override
public void onSubscribe(Subscription s) {
s.request(Long.MAX_VALUE); // Request an unlimited number of items
}
@Override
public void onNext(LiveContentResponse liveContentResponse) {
// Handle the response from the server.
System.out.println(liveContentResponse.getText());
}
@Override
public void onError(Throwable t) {
System.err.println("Error: " + t.getMessage());
}
@Override
public void onComplete() {
System.out.println("Done receiving messages!");
}
}
Futures.addCallback(sessionFuture, new FutureCallback<LiveSession>() {
@Override
public void onSuccess(LiveSession ses) {
LiveSessionFutures session = LiveSessionFutures.from(ses);
// Provide a text prompt
String text = "tell me a short story?";
session.send(text);
Publisher<LiveContentResponse> publisher = session.receive();
publisher.subscribe(new LiveContentResponseSubscriber());
}
@Override
public void onFailure(Throwable t) {
// Handle exceptions
}
}, executor);
Web
Die Live API wird für Web-Apps noch nicht unterstützt. Schauen Sie aber bald wieder vorbei.
Dart
import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
late LiveModelSession _session;
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Initialize the Gemini Developer API backend service
// Create a `LiveModel` instance with the flash-live model (only model that supports the Live API)
final model = FirebaseAI.googleAI().liveModel(
model: 'gemini-2.0-flash-live-preview-04-09',
// Configure the model to respond with text
config: LiveGenerationConfig(responseModalities: [ResponseModality.text]),
);
_session = await model.connect();
// Provide a text prompt
final prompt = Content.text('tell a short story');
await _session.send(input: prompt, turnComplete: true);
// In a separate thread, receive the response
await for (final message in _session.receive()) {
// Process the received message
}
Einheit
using Firebase;
using Firebase.AI;
async Task SendTextReceiveText() {
// Initialize the Gemini Developer API backend service
// Create a `LiveModel` instance with the flash-live model (only model that supports the Live API)
var model = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetLiveModel(
modelName: "gemini-2.0-flash-live-preview-04-09",
// Configure the model to respond with text
liveGenerationConfig: new LiveGenerationConfig(
responseModalities: new[] { ResponseModality.Text })
);
LiveSession session = await model.ConnectAsync();
// Provide a text prompt
var prompt = ModelContent.Text("tell a short story");
await session.SendAsync(content: prompt, turnComplete: true);
// Receive the response
await foreach (var message in session.ReceiveAsync()) {
// Process the received message
if (!string.IsNullOrEmpty(message.Text)) {
UnityEngine.Debug.Log("Received message: " + message.Text);
}
}
}
Gestreamtes Audio aus gestreamter Audioeingabe generieren
Bevor Sie dieses Beispiel ausprobieren, müssen Sie den Abschnitt Vorbereitung in diesem Leitfaden durcharbeiten, um Ihr Projekt und Ihre App einzurichten. In diesem Abschnitt klicken Sie auch auf eine Schaltfläche für den von Ihnen ausgewählten Gemini API-Anbieter, damit auf dieser Seite anbieterspezifische Inhalte angezeigt werden. |
Sie können gestreamte Audioeingaben senden und gestreamte Audioausgaben empfangen. Achten Sie darauf, eine LiveModel
-Instanz zu erstellen und die Antwortmodalität auf Audio
festzulegen.
Antwortstimme konfigurieren und anpassen
Swift
Die Funktion Live API wird für Apps auf Apple-Plattformen noch nicht unterstützt. Schauen Sie aber bald wieder vorbei.
Kotlin
// Initialize the Gemini Developer API backend service
// Create a `LiveModel` instance with the flash-live model (only model that supports the Live API)
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel(
modelName = "gemini-2.0-flash-live-preview-04-09",
// Configure the model to respond with text
generationConfig = liveGenerationConfig {
responseModality = ResponseModality.AUDIO
}
)
val session = model.connect()
// This is the recommended way.
// However, you can create your own recorder and handle the stream.
session.startAudioConversation()
Java
ExecutorService executor = Executors.newFixedThreadPool(1);
// Initialize the Gemini Developer API backend service
// Create a `LiveModel` instance with the flash-live model (only model that supports the Live API)
LiveGenerativeModel lm = FirebaseAI.getInstance(GenerativeBackend.googleAI()).liveModel(
"gemini-2.0-flash-live-preview-04-09",
// Configure the model to respond with text
new LiveGenerationConfig.Builder()
.setResponseModalities(ResponseModality.TEXT)
.build()
);
LiveModelFutures model = LiveModelFutures.from(lm);
ListenableFuture<LiveSession> sessionFuture = model.connect();
Futures.addCallback(sessionFuture, new FutureCallback<LiveSession>() {
@Override
public void onSuccess(LiveSession ses) {
LiveSessionFutures session = LiveSessionFutures.from(ses);
session.startAudioConversation();
}
@Override
public void onFailure(Throwable t) {
// Handle exceptions
}
}, executor);
Web
Die Live API wird für Web-Apps noch nicht unterstützt. Schauen Sie aber bald wieder vorbei.
Dart
import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
import 'package:your_audio_recorder_package/your_audio_recorder_package.dart';
late LiveModelSession _session;
final _audioRecorder = YourAudioRecorder();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Initialize the Gemini Developer API backend service
// Create a `LiveModel` instance with the flash-live model (only model that supports the Live API)
final model = FirebaseAI.googleAI().liveModel(
model: 'gemini-2.0-flash-live-preview-04-09',
// Configure the model to respond with audio
config: LiveGenerationConfig(responseModalities: [ResponseModality.audio]),
);
_session = await model.connect();
final audioRecordStream = _audioRecorder.startRecordingStream();
// Map the Uint8List stream to InlineDataPart stream
final mediaChunkStream = audioRecordStream.map((data) {
return InlineDataPart('audio/pcm', data);
});
await _session.startMediaStream(mediaChunkStream);
// In a separate thread, receive the audio response from the model
await for (final message in _session.receive()) {
// Process the received message
}
Einheit
using Firebase;
using Firebase.AI;
async Task SendTextReceiveAudio() {
// Initialize the Gemini Developer API backend service
// Create a `LiveModel` instance with the flash-live model (only model that supports the Live API)
var model = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetLiveModel(
modelName: "gemini-2.0-flash-live-preview-04-09",
// Configure the model to respond with audio
liveGenerationConfig: new LiveGenerationConfig(
responseModalities: new[] { ResponseModality.Audio })
);
LiveSession session = await model.ConnectAsync();
// Start a coroutine to send audio from the Microphone
var recordingCoroutine = StartCoroutine(SendAudio(session));
// Start receiving the response
await ReceiveAudio(session);
}
IEnumerator SendAudio(LiveSession liveSession) {
string microphoneDeviceName = null;
int recordingFrequency = 16000;
int recordingBufferSeconds = 2;
var recordingClip = Microphone.Start(microphoneDeviceName, true,
recordingBufferSeconds, recordingFrequency);
int lastSamplePosition = 0;
while (true) {
if (!Microphone.IsRecording(microphoneDeviceName)) {
yield break;
}
int currentSamplePosition = Microphone.GetPosition(microphoneDeviceName);
if (currentSamplePosition != lastSamplePosition) {
// The Microphone uses a circular buffer, so we need to check if the
// current position wrapped around to the beginning, and handle it
// accordingly.
int sampleCount;
if (currentSamplePosition > lastSamplePosition) {
sampleCount = currentSamplePosition - lastSamplePosition;
} else {
sampleCount = recordingClip.samples - lastSamplePosition + currentSamplePosition;
}
if (sampleCount > 0) {
// Get the audio chunk
float[] samples = new float[sampleCount];
recordingClip.GetData(samples, lastSamplePosition);
// Send the data, discarding the resulting Task to avoid the warning
_ = liveSession.SendAudioAsync(samples);
lastSamplePosition = currentSamplePosition;
}
}
// Wait for a short delay before reading the next sample from the Microphone
const float MicrophoneReadDelay = 0.5f;
yield return new WaitForSeconds(MicrophoneReadDelay);
}
}
Queue audioBuffer = new();
async Task ReceiveAudio(LiveSession liveSession) {
int sampleRate = 24000;
int channelCount = 1;
// Create a looping AudioClip to fill with the received audio data
int bufferSamples = (int)(sampleRate * channelCount);
AudioClip clip = AudioClip.Create("StreamingPCM", bufferSamples, channelCount,
sampleRate, true, OnAudioRead);
// Attach the clip to an AudioSource and start playing it
AudioSource audioSource = GetComponent();
audioSource.clip = clip;
audioSource.loop = true;
audioSource.Play();
// Start receiving the response
await foreach (var message in liveSession.ReceiveAsync()) {
// Process the received message
foreach (float[] pcmData in message.AudioAsFloat) {
lock (audioBuffer) {
foreach (float sample in pcmData) {
audioBuffer.Enqueue(sample);
}
}
}
}
}
// This method is called by the AudioClip to load audio data.
private void OnAudioRead(float[] data) {
int samplesToProvide = data.Length;
int samplesProvided = 0;
lock(audioBuffer) {
while (samplesProvided < samplesToProvide && audioBuffer.Count > 0) {
data[samplesProvided] = audioBuffer.Dequeue();
samplesProvided++;
}
}
while (samplesProvided < samplesToProvide) {
data[samplesProvided] = 0.0f;
samplesProvided++;
}
}
Ansprechendere und interaktivere Erlebnisse schaffen
In diesem Abschnitt wird beschrieben, wie Sie ansprechendere oder interaktivere Funktionen der Live API erstellen und verwalten.
Stimme für die Antwort ändern
Live API verwendet Chirp 3, um synthetische Sprachantworten zu unterstützen. Wenn Sie Firebase AI Logic verwenden, können Sie Audio in verschiedenen HD-Sprachen senden. Eine vollständige Liste und Demos der einzelnen Stimmen finden Sie unter Chirp 3: HD-Stimmen.
Wenn Sie eine Stimme angeben möchten, legen Sie den Namen der Stimme im speechConfig
-Objekt als Teil der Modellkonfiguration fest.
Wenn Sie keine Stimme angeben, wird standardmäßig Puck
verwendet.
Bevor Sie dieses Beispiel ausprobieren, müssen Sie den Abschnitt Vorbereitung in diesem Leitfaden durcharbeiten, um Ihr Projekt und Ihre App einzurichten. In diesem Abschnitt klicken Sie auch auf eine Schaltfläche für den von Ihnen ausgewählten Gemini API-Anbieter, damit auf dieser Seite anbieterspezifische Inhalte angezeigt werden. |
Swift
Die Funktion Live API wird für Apps auf Apple-Plattformen noch nicht unterstützt. Schauen Sie aber bald wieder vorbei.
Kotlin
// ...
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel(
modelName = "gemini-2.0-flash-live-preview-04-09",
// Configure the model to use a specific voice for its audio response
generationConfig = liveGenerationConfig {
responseModality = ResponseModality.AUDIO
speechConfig = SpeechConfig(voice = Voice("VOICE_NAME"))
}
)
// ...
Java
// ...
LiveModel model = FirebaseAI.getInstance(GenerativeBackend.googleAI()).liveModel(
"gemini-2.0-flash-live-preview-04-09",
// Configure the model to use a specific voice for its audio response
new LiveGenerationConfig.Builder()
.setResponseModalities(ResponseModality.AUDIO)
.setSpeechConfig(new SpeechConfig(new Voice("VOICE_NAME")))
.build()
);
// ...
Web
Die Live API wird für Web-Apps noch nicht unterstützt. Schauen Sie aber bald wieder vorbei.
Dart
// ...
final model = FirebaseAI.googleAI().liveGenerativeModel(
model: 'gemini-2.0-flash-live-preview-04-09',
// Configure the model to use a specific voice for its audio response
config: LiveGenerationConfig(
responseModality: ResponseModality.audio,
speechConfig: SpeechConfig(voiceName: 'VOICE_NAME'),
),
);
// ...
Einheit
var model = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetLiveModel(
modelName: "gemini-2.0-flash-live-preview-04-09",
liveGenerationConfig: new LiveGenerationConfig(
responseModalities: new[] { ResponseModality.Audio },
speechConfig: SpeechConfig.UsePrebuiltVoice("VOICE_NAME"))
);
Wenn Sie das Modell auffordern, in einer anderen Sprache als Englisch zu antworten, sollten Sie Folgendes in Ihre Systemanweisungen aufnehmen:
RESPOND IN LANGUAGE. YOU MUST RESPOND UNMISTAKABLY IN LANGUAGE.
Kontext über Sitzungen und Anfragen hinweg beibehalten
Sie können eine Chatstruktur verwenden, um den Kontext über Sitzungen und Anfragen hinweg beizubehalten. Das funktioniert nur für die Texteingabe und Textausgabe.
Dieser Ansatz eignet sich am besten für kurze Kontexte. Sie können turn-by-turn-Interaktionen senden, um die genaue Abfolge der Ereignisse darzustellen. Bei längeren Kontexten empfehlen wir, eine Zusammenfassung der einzelnen Nachrichten bereitzustellen, um das Kontextfenster für nachfolgende Interaktionen freizugeben.
Unterbrechungen verarbeiten
Firebase AI Logic unterstützt die Verarbeitung von Unterbrechungen noch nicht. Schauen Sie später noch einmal vorbei!
Funktionsaufrufe (Tools) verwenden
Sie können Tools wie verfügbare Funktionen für die Live API definieren, genau wie bei den Standardmethoden zur Inhaltserstellung. In diesem Abschnitt werden einige Besonderheiten bei der Verwendung der Live API mit Funktionsaufrufen beschrieben. Eine vollständige Beschreibung und Beispiele für Funktionsaufrufe finden Sie im Leitfaden zu Funktionsaufrufen.
Aus einem einzelnen Prompt kann das Modell mehrere Funktionsaufrufe und den Code generieren, der zum Verketten ihrer Ausgaben erforderlich ist. Dieser Code wird in einer Sandbox-Umgebung ausgeführt und generiert nachfolgende BidiGenerateContentToolCall
-Nachrichten. Die Ausführung wird angehalten, bis die Ergebnisse jedes Funktionsaufrufs verfügbar sind. So wird eine sequenzielle Verarbeitung sichergestellt.
Die Verwendung der Live API mit Funktionsaufrufen ist besonders leistungsstark, da das Modell Folge- oder Klarstellungsanfragen an den Nutzer senden kann. Wenn das Modell beispielsweise nicht genügend Informationen hat, um einen Parameterwert für eine Funktion bereitzustellen, die es aufrufen möchte, kann es den Nutzer bitten, weitere oder präzisierende Informationen anzugeben.
Der Client sollte mit BidiGenerateContentToolResponse
antworten.
Beschränkungen und Anforderungen
Beachten Sie die folgenden Einschränkungen und Anforderungen der Live API.
Sprache-zu-Text
Firebase AI Logic unterstützt Transkriptionen noch nicht. Schauen Sie später noch einmal vorbei!
Sprachen
- Eingabesprachen:Eine vollständige Liste der unterstützten Eingabesprachen für Gemini-Modelle
- Ausgabesprachen:Eine vollständige Liste der verfügbaren Ausgabesprachen finden Sie unter Chirp 3: HD-Stimmen.
Audioformate
Die Live API unterstützt die folgenden Audioformate:
- Eingabeaudioformat:Rohes 16‑Bit-PCM-Audio bei 16 kHz, Little Endian
- Audioausgabeformat:Rohes 16‑Bit-PCM-Audio mit 24 kHz, Little Endian
Ratenlimits
Für Live API gelten Ratenlimits sowohl für gleichzeitige Sitzungen pro Firebase-Projekt als auch für Tokens pro Minute (TPM).
Gemini Developer API:
- Die Limits variieren je nach Gemini Developer API-Nutzungsebene Ihres Projekts (siehe Dokumentation zu Ratenbeschränkungen).
Vertex AI Gemini API:
- 5.000 gleichzeitige Sitzungen pro Firebase-Projekt
- 4 Millionen Tokens pro Minute
Sitzungsdauer
Die Standardlänge einer Sitzung beträgt 10 Minuten. Wenn die Sitzungsdauer das Limit überschreitet, wird die Verbindung beendet.
Das Modell ist auch durch die Kontextgröße begrenzt. Das Senden großer Eingabebereiche kann zu einem vorzeitigen Beenden der Sitzung führen.
Erkennung von Sprachaktivitäten (Voice Activity Detection, VAD)
Das Modell führt automatisch eine kontinuierliche Spracherkennung (Voice Activity Detection, VAD) für einen kontinuierlichen Audioeingabestream durch. VAD ist standardmäßig aktiviert.
Token zählen
Sie können die CountTokens
API nicht mit der Live API verwenden.
Feedback zu Firebase AI Logic geben