Gemini Live API consente interazioni vocali e di testo bidirezionali a bassa latenza con Gemini. Con Live API, puoi offrire agli utenti finali l'esperienza di conversazioni vocali naturali e simili a quelle umane, con la possibilità di interrompere le risposte del modello utilizzando comandi vocali o di testo. Il modello può elaborare input di testo e audio (i video saranno disponibili a breve) e può fornire output di testo e audio.
Puoi creare un prototipo con i prompt e Live API in Vertex AI Studio.
Live API è un'API con stato che crea una connessione WebSocket per stabilire una sessione tra il client e il server Gemini. Per maggiori dettagli, consulta la documentazione di riferimento di Live API.
Prima di iniziare
Se non l'hai ancora fatto, completa la
guida introduttiva,
che descrive come configurare il progetto Firebase, collegare l'app a
Firebase, aggiungere l'SDK, inizializzare il servizio Vertex AI e creare un'istanza
LiveModel
.
Assicurati di utilizzare almeno queste versioni delle librerie Firebase:
iOS e versioni successive: non ancora supportata |
Android: v16.3.0 e versioni successive (BoM: v33.12.0 e versioni successive) |
Web: non ancora supportata |
Flutter: v1.5.0 e versioni successive (BoM: v3.9.0 e versioni successive)
Modelli che supportano questa funzionalità
Live API è supportato solo da gemini-2.0-flash-live-preview-04-09
(non da gemini-2.0-flash
).
Utilizza le funzionalità standard di Live API
Questa sezione descrive come utilizzare le funzionalità standard di Live API, in particolare per trasmettere in streaming vari tipi di input e output:
- Inviare e ricevere messaggi
- Inviare e ricevere audio
- Inviare audio e ricevere testo
- Inviare testo e ricevere audio
Inviare e ricevere messaggi
Puoi inviare input di testo in streaming e ricevere output di testo in streaming. Assicurati di
creare un'istanza liveModel
e di impostare la
modalità di risposta suText
.
Swift
Live API non è ancora supportato per le app per la piattaforma Apple, ma ricontrolla a breve.
Kotlin
// Initialize the Vertex AI service and create a `LiveModel` instance
val model = Firebase.vertexAI.liveModel(
// The Live API requires this specific model.
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.status == Status.TURN_COMPLETE) {
// 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 Vertex AI service and create a `LiveModel` instance
LiveGenerativeModel lm = FirebaseVertexAI.getInstance().liveModel(
// The Live API requires this specific model.
"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
Live API non è ancora supportato per le app web, ma ricontrolla a breve.
Dart
import 'package:firebase_vertexai/firebase_vertexai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
late LiveModelSession _session;
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Initialize the Vertex AI service and create a `LiveModel` instance
final model = FirebaseVertexAI.instance.liveModel(
// The Live API requires this specific model.
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
}
Scopri come scegliere un modello e, facoltativamente, una località appropriata per il tuo caso d'uso e la tua app.
Inviare e ricevere audio
Puoi inviare input audio in streaming e ricevere output audio in streaming. Assicurati di creare un'istanza LiveModel
e di impostare la modalità di risposta su Audio
.
Scopri come configurare e personalizzare la voce di risposta (più avanti in questa pagina).
Swift
Live API non è ancora supportato per le app per la piattaforma Apple, ma ricontrolla a breve.
Kotlin
// Initialize the Vertex AI service and create a `LiveModel` instance
val model = Firebase.vertexAI.liveModel(
// The Live API requires this specific model.
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 Vertex AI service and create a `LiveModel` instance
LiveGenerativeModel lm = FirebaseVertexAI.getInstance().liveModel(
// The Live API requires this specific model.
"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
Live API non è ancora supportato per le app web, ma ricontrolla a breve.
Dart
import 'package:firebase_vertexai/firebase_vertexai.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 Vertex AI service and create a `LiveModel` instance
final model = FirebaseVertexAI.instance.liveModel(
// The Live API requires this specific model.
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
}
Scopri come scegliere un modello e, facoltativamente, una località appropriata per il tuo caso d'uso e la tua app.
Creare esperienze più coinvolgenti e interattive
Questa sezione descrive come creare e gestire funzionalità più coinvolgenti o interattive di Live API.
Modificare la voce della risposta
Live API utilizza Chirp 3 per supportare le risposte vocali sintetizzate. Quando utilizzi Vertex AI in Firebase, puoi inviare audio in 5 voci HD e 31 lingue.
Se non specifichi una voce, il valore predefinito è Puck
. In alternativa, puoi configurare il modello in modo che risponda con una delle seguenti voci:
Aoede (donna)Charon (uomo) |
Fenrir (maschio)Kore (femmina) |
Puck (maschio) |
Per ascoltare le demo di queste voci e per l'elenco completo delle lingue disponibili, consulta Chirp 3: voci in HD.
Per specificare una voce, imposta il nome della voce all'interno dell'oggetto speechConfig
come parte della
configurazione del modello:
Swift
Live API non è ancora supportato per le app per la piattaforma Apple, ma ricontrolla a breve.
Kotlin
// ...
val model = Firebase.vertexAI.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 = Voices.FENRIR)
}
)
// ...
Java
// ...
LiveModel model = Firebase.getVertexAI().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(Voices.FENRIR))
.build()
);
// ...
Web
Live API non è ancora supportato per le app web, ma ricontrolla a breve.
Dart
// ...
final model = FirebaseVertexAI.instance.liveModel(
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(voice: Voice.fenrir),
),
);
// ...
Per ottenere i risultati migliori quando chiedi e richiedi al modello di rispondere in una lingua diversa dall'inglese, includi quanto segue nelle istruzioni di sistema:
RESPOND IN LANGUAGE. YOU MUST RESPOND UNMISTAKABLY IN LANGUAGE.
Mantieni il contesto tra sessioni e richieste
Puoi utilizzare una struttura di chat per mantenere il contesto tra sessioni e richieste. Tieni presente che questa opzione funziona solo per l'input e l'output di testo.
Questo approccio è ideale per contesti brevi. Puoi inviare interazioni passo passo per rappresentare la sequenza esatta di eventi. Per contesti più lunghi, ti consigliamo di fornire un riepilogo di un singolo messaggio per liberare la finestra del contesto per le interazioni successive.
Gestire le interruzioni
Vertex AI in Firebase non supporta ancora la gestione delle interruzioni. Ricontrolla presto.
Utilizzare le chiamate di funzioni (strumenti)
Puoi definire strumenti, come le funzioni disponibili, da utilizzare con l'API Live, come accade con i metodi di generazione di contenuti standard. Questa sezione descrive alcune sfumature relative all'utilizzo dell'API Live con la chiamata di funzioni. Per una descrizione completa ed esempi di chiamate di funzioni, consulta la guida alle chiamate di funzioni.
Da un singolo prompt, il modello può generare più chiamate di funzione e il codice necessario per collegarne gli output. Questo codice viene eseguito in un ambiente sandbox, generando messaggi BidiGenerateContentToolCall
successivi. L'esecuzione viene messa in pausa fino a quando non sono disponibili i risultati di ogni chiamata di funzione, il che garantisce l'elaborazione sequenziale.
Inoltre, l'utilizzo dell'API Live con la chiamata di funzioni è particolarmente efficace perché il modello può richiedere all'utente informazioni di follow-up o chiarimenti. Ad esempio, se il modello non dispone di informazioni sufficienti per fornire un valore del parametro a una funzione che vuole chiamare, può chiedere all'utente di fornire maggiori informazioni o chiarimenti.
Il cliente deve rispondere con
BidiGenerateContentToolResponse
.
Limitazioni e requisiti
Tieni presente i seguenti limiti e requisiti di Live API.
Trascrizione
Vertex AI in Firebase non supporta ancora le trascrizioni. Ricontrolla presto.
Lingue
- Lingue di input:consulta l'elenco completo delle lingue di input supportate per i modelli Gemini
- Lingue di output:consulta l'elenco completo delle lingue di output disponibili in Chirp 3: voci in HD
Formati audio
Live API supporta i seguenti formati audio:
- Formato audio di input: audio PCM non compresso a 16 bit a 16 kHz little-endian
- Formato audio di output: audio PCM non compresso a 16 bit a 24 kHz little-endian
Limiti di frequenza
Si applicano i seguenti limiti di frequenza:
- 10 sessioni simultanee per progetto Firebase
- 4 milioni di token al minuto
Lunghezza della sessione
La durata predefinita di una sessione è di 30 minuti. Quando la durata della sessione supera il limite, la connessione viene interrotta.
Il modello è limitato anche dalle dimensioni del contesto. L'invio di grandi blocchi di input potrebbe comportare la chiusura anticipata della sessione.
Rilevamento attività vocale (VAD)
Il modello esegue automaticamente il rilevamento dell'attività vocale (VAD) su uno stream di input audio continuo. La funzionalità VAD è attiva per impostazione predefinita.
Conteggio dei token
Non puoi utilizzare l'API CountTokens
con Live API.