L'API Live consente interazioni vocali e video in tempo reale a bassa latenza con Gemini. Elabora flussi continui di audio, video o testo per fornire risposte immediate e simili a quelle umane, creando un'esperienza conversazionale naturale per gli utenti.

L'API Live offre un insieme completo di funzionalità come il rilevamento dell'attività vocale, l'utilizzo degli strumenti e le chiamate di funzione, la gestione delle sessioni (per la gestione di conversazioni di lunga durata) e i token effimeri (per l'autenticazione sicura lato client).
Questa pagina ti consente di iniziare a utilizzare esempi e campioni di codice di base.
Prova l'API Live in Google AI Studio
Scegliere un approccio di implementazione
Quando esegui l'integrazione con l'API Live, devi scegliere uno dei seguenti approcci di implementazione:
- Da server a server: il backend si connette all'API Live utilizzando WebSockets. In genere, il client invia i dati dello stream (audio, video, testo) al server, che a sua volta li inoltra all'API Live.
- Da client a server: il codice frontend si connette direttamente all'API Live utilizzando WebSockets per trasmettere i dati in streaming, bypassando il backend.
Integrazioni con i partner
Per semplificare lo sviluppo di app audio e video in tempo reale, puoi utilizzare un'integrazione di terze parti che supporti l'API Gemini Live tramite WebRTC o WebSocket.
Inizia
Questo esempio lato server trasmette l'audio dal microfono e riproduce l'audio restituito. Per esempi end-to-end completi, inclusa un'applicazione client, consulta Applicazioni di esempio.
Il formato audio di input deve essere PCM a 16 bit, 16 kHz, mono e l'audio ricevuto utilizza una frequenza di campionamento di 24 kHz.
Python
Installa helper per lo streaming audio. Potrebbero essere necessarie dipendenze aggiuntive a livello di sistema
(ad es. portaudio). Per la procedura di installazione dettagliata, consulta la documentazione di PyAudio.
pip install pyaudioimport 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
Installa i componenti aggiuntivi per lo streaming audio. Potrebbero essere necessarie dipendenze aggiuntive a livello di sistema (sox per Mac/Windows o ALSA per Linux). Consulta la documentazione relativa
all'altoparlante e al microfono
per i passaggi di installazione dettagliati.
npm install mic speakerimport { 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);
Applicazioni di esempio
Dai un'occhiata alle seguenti applicazioni di esempio che illustrano come utilizzare l'API Live per casi d'uso end-to-end:
- App iniziale per l'audio live su AI Studio, utilizzando librerie JavaScript per connettersi all'API Live e trasmettere audio bidirezionale tramite microfono e altoparlanti.
- Consulta la sezione Integrazioni dei partner per altri esempi e guide introduttive.
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 le chiamate di funzione.
- 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.