API Live обеспечивает голосовое и видеовзаимодействие с Gemini в режиме реального времени с низкой задержкой. Он обрабатывает непрерывные потоки аудио, видео или текста, предоставляя мгновенные, похожие на человеческие, голосовые ответы, создавая естественный диалог для ваших пользователей.

Live API предлагает полный набор функций, таких как обнаружение голосовой активности , использование инструментов и вызов функций , управление сессиями (для управления длительными разговорами) и временные токены (для безопасной аутентификации на стороне клиента).
На этой странице вы найдете примеры и базовые образцы кода, которые помогут вам начать работу.
Попробуйте Live API в Google AI Studio.
Выберите подход к реализации.
При интеграции с Live API вам потребуется выбрать один из следующих подходов к реализации:
- Подключение «сервер-сервер» : ваш бэкэнд подключается к Live API с помощью WebSockets . Как правило, ваш клиент отправляет потоковые данные (аудио, видео, текст) на ваш сервер, который затем перенаправляет их в Live API.
- Клиент-сервер : Ваш фронтенд-код подключается напрямую к Live API, используя WebSockets для потоковой передачи данных, минуя бэкенд.
Интеграция с партнерами
Для упрощения разработки приложений для обработки аудио и видео в реальном времени можно использовать интеграцию со сторонним сервисом, поддерживающим API Gemini Live по протоколам WebRTC или WebSockets.
Создайте чат-бота с искусственным интеллектом в режиме реального времени, используя Gemini Live и Pipecat.
LiveKitИспользуйте API Gemini Live с агентами LiveKit.
Fishjam от Software MansionСоздавайте приложения для потоковой передачи видео и аудио в реальном времени с помощью Fishjam.
Комплект для разработки агентов (ADK)Внедрите API в режиме реального времени с помощью комплекта разработки агентов (ADK).
ВоксимплантС помощью Voximplant вы можете подключать входящие и исходящие вызовы к Live API.
Начать
В этом примере на стороне сервера осуществляется потоковая передача звука с микрофона и воспроизведение полученного аудиосигнала. Полные примеры комплексного решения, включая клиентское приложение, см. в разделе « Примеры приложений» .
Входной аудиоформат должен быть 16-битным PCM, 16 кГц, моно, а принимаемый аудиосигнал должен иметь частоту дискретизации 24 кГц.
Python
Установите вспомогательные функции для потоковой передачи аудио. Могут потребоваться дополнительные системные зависимости (например, portaudio ). Подробные инструкции по установке см. в документации 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-12-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
Установите вспомогательные программы для потоковой передачи звука. Могут потребоваться дополнительные системные зависимости ( sox для Mac/Windows или ALSA для Linux). Подробные инструкции по установке см. в документации по динамикам и микрофонам .
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-12-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);
Примеры приложений
Ознакомьтесь со следующими примерами приложений, демонстрирующими использование Live API для комплексных задач:
- Стартовое приложение для работы с живым звуком на платформе AI Studio, использующее библиотеки JavaScript для подключения к Live API и двусторонней потоковой передачи звука через микрофон и динамики.
- Дополнительные примеры и руководства по началу работы см. в разделе « Интеграция с партнерами» .
Что дальше?
- Ознакомьтесь с полным руководством по возможностям Live API, чтобы узнать о ключевых функциях и настройках, включая обнаружение голосовой активности и встроенные аудиофункции.
- Ознакомьтесь с руководством по использованию инструмента , чтобы узнать, как интегрировать Live API с инструментами и вызывать функции.
- Ознакомьтесь с руководством по управлению сессиями для организации длительных бесед.
- Ознакомьтесь с руководством по временным токенам для безопасной аутентификации в приложениях, работающих по принципу «клиент-сервер» .
- Для получения дополнительной информации о базовом API WebSockets см. справочник по API WebSockets .