Interfejs Live API umożliwia interakcje z Gemini z użyciem głosu i wideo w czasie rzeczywistym z niewielkimi opóźnieniami. Przetwarza ciągłe strumienie audio, wideo lub tekstu, aby dostarczać natychmiastowe, podobne do ludzkich odpowiedzi głosowe, tworząc naturalne doświadczenie konwersacyjne dla użytkowników.

Live API oferuje kompleksowy zestaw funkcji, takich jak wykrywanie aktywności głosowej, korzystanie z narzędzi i wywoływanie funkcji, zarządzanie sesjami (do zarządzania długotrwałymi rozmowami) i tokeny tymczasowe (do bezpiecznego uwierzytelniania po stronie klienta).
Na tej stronie znajdziesz przykłady i podstawowe fragmenty kodu, które pomogą Ci zacząć.
Wypróbuj interfejs Live API w Google AI Studio
Wybierz metodę implementacji
Podczas integracji z interfejsem Live API musisz wybrać jedną z tych metod implementacji:
- Serwer-serwer: backend łączy się z interfejsem Live API za pomocą WebSockets. Zwykle klient wysyła dane strumieniowe (audio, wideo, tekst) na serwer, który następnie przekazuje je do interfejsu Live API.
- Klient-serwer: kod frontendu łączy się bezpośrednio z interfejsem Live API za pomocą WebSockets, aby przesyłać strumieniowo dane z pominięciem backendu.
Integracje z partnerami
Aby usprawnić tworzenie aplikacji audio i wideo działających w czasie rzeczywistym, możesz użyć integracji innej firmy, która obsługuje interfejs Gemini Live API przez WebRTC lub WebSockets.
Pipecat by Daily
Tworzenie chatbota AI działającego w czasie rzeczywistym za pomocą Gemini Live i Pipecat.
LiveKit
Korzystanie z interfejsu Gemini Live API z agentami LiveKit.
Pakiet Agent Development Kit (ADK)
Wdrażanie interfejsu Live API za pomocą pakietu Agent Development Kit (ADK).
Voximplant
Wdrażanie interfejsu Live API za pomocą Voximplant.
Rozpocznij
Ten przykład po stronie serwera przesyła strumieniowo dźwięk z mikrofonu i odtwarza zwrócony dźwięk. Pełne przykłady kompleksowe, w tym aplikację klienta, znajdziesz w sekcji Przykładowe aplikacje.
Wejściowy format audio powinien być w formacie 16-bit PCM, 16 kHz, mono, a otrzymywane audio ma częstotliwość próbkowania 24 kHz.
Python
Zainstaluj aplikacje pomocnicze do strumieniowania audio. Mogą być wymagane dodatkowe zależności na poziomie systemu (np. portaudio). Szczegółowe instrukcje instalacji znajdziesz w dokumentacji 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
Zainstaluj aplikacje pomocnicze do streamingu audio. Mogą być wymagane dodatkowe zależności na poziomie systemu (sox w przypadku komputerów Mac/Windows lub ALSA w przypadku systemu Linux). Szczegółowe instrukcje instalacji znajdziesz w dokumentacji dotyczącej głośnika i mikrofonu.
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);
Przykładowe zastosowania
Zapoznaj się z przykładami aplikacji, które pokazują, jak używać interfejsu Live API w przypadkach użycia typu end-to-end:
- Aplikacja startowa do transmisji audio na żywo w AI Studio, która korzysta z bibliotek JavaScript do łączenia się z interfejsem Live API i przesyłania dwukierunkowego dźwięku przez mikrofon i głośniki.
- Dodatkowe przykłady i przewodniki znajdziesz w sekcji Integracje z partnerami.
Co dalej?
- Zapoznaj się z pełnym przewodnikiem po możliwościach interfejsu Live API, aby poznać kluczowe funkcje i konfiguracje, w tym wykrywanie aktywności głosowej i natywne funkcje audio.
- Przeczytaj przewodnik Korzystanie z narzędzi, aby dowiedzieć się, jak zintegrować interfejs Live API z narzędziami i wywoływaniem funkcji.
- Więcej informacji o zarządzaniu długimi rozmowami znajdziesz w przewodniku Zarządzanie sesjami.
- Przeczytaj przewodnik Tokeny tymczasowe, aby dowiedzieć się więcej o bezpiecznym uwierzytelnianiu w aplikacjach klient-serwer.
- Więcej informacji o interfejsie WebSockets API znajdziesz w dokumentacji referencyjnej interfejsu WebSockets API.