L'API Gemini Live consente l'interazione bidirezionale in tempo reale con i modelli Gemini, supportando input audio, video e di testo e output audio nativi. Questa guida spiega come eseguire l'integrazione con l'API utilizzando l'SDK Google GenAI sul server.
Panoramica
L'API Gemini Live utilizza WebSocket per la comunicazione in tempo reale. L'SDK google-genai fornisce un'interfaccia asincrona di alto livello per la gestione di queste connessioni.
Concetti chiave:
- Sessione: una connessione persistente al modello.
- Config: configurazione di modalità (audio/testo), voce e istruzioni di sistema.
- Input in tempo reale: invio di frame audio e video come blob.
Connessione all'API Live
Avvia una sessione dell'API Live con una chiave API:
Python
import asyncio
from google import genai
client = genai.Client(api_key="YOUR_API_KEY")
model = "gemini-2.5-flash-native-audio-preview-12-2025"
config = {"response_modalities": ["AUDIO"]}
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
print("Session started")
# Send content...
if __name__ == "__main__":
asyncio.run(main())
JavaScript
import { GoogleGenAI, Modality } from '@google/genai';
const ai = new GoogleGenAI({ apiKey: "YOUR_API_KEY"});
const model = 'gemini-2.5-flash-native-audio-preview-12-2025';
const config = { responseModalities: [Modality.AUDIO] };
async function main() {
const session = await ai.live.connect({
model: model,
callbacks: {
onopen: function () {
console.debug('Opened');
},
onmessage: function (message) {
console.debug(message);
},
onerror: function (e) {
console.debug('Error:', e.message);
},
onclose: function (e) {
console.debug('Close:', e.reason);
},
},
config: config,
});
console.debug("Session started");
// Send content...
session.close();
}
main();
Invio dell'SMS in corso…
Il testo può essere inviato utilizzando send_realtime_input (Python) o sendRealtimeInput (JavaScript).
Python
await session.send_realtime_input(text="Hello, how are you?")
JavaScript
session.sendRealtimeInput({
text: 'Hello, how are you?'
});
Invio dell'audio
L'audio deve essere inviato come dati PCM non elaborati (audio PCM non elaborato a 16 bit, 16 kHz, little-endian).
Python
# Assuming 'chunk' is your raw PCM audio bytes
await session.send_realtime_input(
audio=types.Blob(
data=chunk,
mime_type="audio/pcm;rate=16000"
)
)
JavaScript
// Assuming 'chunk' is a Buffer of raw PCM audio
session.sendRealtimeInput({
audio: {
data: chunk.toString('base64'),
mimeType: 'audio/pcm;rate=16000'
}
});
Per un esempio di come ottenere l'audio dal dispositivo client (ad es. il browser), vedi l'esempio end-to-end su GitHub.
Invio del video
I frame video vengono inviati come immagini singole (ad es. JPEG o PNG) a una frequenza fotogrammi specifica (massimo 1 fotogramma al secondo).
Python
# Assuming 'frame' is your JPEG-encoded image bytes
await session.send_realtime_input(
video=types.Blob(
data=frame,
mime_type="image/jpeg"
)
)
JavaScript
// Assuming 'frame' is a Buffer of JPEG-encoded image data
session.sendRealtimeInput({
video: {
data: frame.toString('base64'),
mimeType: 'image/jpeg'
}
});
Per un esempio di come recuperare il video dal dispositivo client (ad es. il browser), vedi l'esempio end-to-end su GitHub.
Ricezione dell'audio
Le risposte audio del modello vengono ricevute come blocchi di dati.
Python
async for response in session.receive():
if response.server_content and response.server_content.model_turn:
for part in response.server_content.model_turn.parts:
if part.inline_data:
audio_data = part.inline_data.data
# Process or play the audio data
JavaScript
// Inside the onmessage callback
const content = response.serverContent;
if (content?.modelTurn?.parts) {
for (const part of content.modelTurn.parts) {
if (part.inlineData) {
const audioData = part.inlineData.data;
// Process or play audioData (base64 encoded string)
}
}
}
Consulta l'app di esempio su GitHub per scoprire come ricevere l'audio sul tuo server e riprodurlo nel browser.
SMS in arrivo
Le trascrizioni dell'input dell'utente e dell'output del modello sono disponibili nei contenuti del server.
Python
async for response in session.receive():
content = response.server_content
if content:
if content.input_transcription:
print(f"User: {content.input_transcription.text}")
if content.output_transcription:
print(f"Gemini: {content.output_transcription.text}")
JavaScript
// Inside the onmessage callback
const content = response.serverContent;
if (content?.inputTranscription) {
console.log('User:', content.inputTranscription.text);
}
if (content?.outputTranscription) {
console.log('Gemini:', content.outputTranscription.text);
}
Gestione delle chiamate allo strumento
L'API supporta la chiamata di strumenti (chiamata di funzioni). Quando il modello richiede una chiamata allo strumento, devi eseguire la funzione e inviare la risposta.
Python
async for response in session.receive():
if response.tool_call:
function_responses = []
for fc in response.tool_call.function_calls:
# 1. Execute the function locally
result = my_tool_function(**fc.args)
# 2. Prepare the response
function_responses.append(types.FunctionResponse(
name=fc.name,
id=fc.id,
response={"result": result}
))
# 3. Send the tool response back to the session
await session.send_tool_response(function_responses=function_responses)
JavaScript
// Inside the onmessage callback
if (response.toolCall) {
const functionResponses = [];
for (const fc of response.toolCall.functionCalls) {
const result = myToolFunction(fc.args);
functionResponses.push({
name: fc.name,
id: fc.id,
response: { result }
});
}
session.sendToolResponse({ functionResponses });
}
Passaggi successivi
- Leggi la guida completa alle funzionalità dell'API Live per scoprire le funzionalità e le configurazioni chiave, tra cui il rilevamento dell'attività vocale e le funzionalità audio native.
- Leggi la guida Utilizzo degli strumenti per scoprire come integrare l'API Live con gli strumenti e la chiamata a funzioni.
- Leggi la guida Gestione delle sessioni per gestire le conversazioni a lunga esecuzione.
- Leggi la guida Token effimeri per l'autenticazione sicura nelle applicazioni client-to-server.
- Per saperne di più sull'API WebSockets sottostante, consulta i riferimenti all'API WebSockets.