Это подробное руководство, описывающее возможности и конфигурации, доступные в Live API. Обзор и примеры кода для распространенных сценариев использования см. на странице «Начало работы с Live API» .
Прежде чем начать
- Ознакомьтесь с основными понятиями: если вы еще этого не сделали, сначала прочтите страницу «Начало работы с Live API» . Она познакомит вас с фундаментальными принципами Live API, принципами его работы и различными подходами к реализации .
- Попробуйте использовать Live API в AI Studio: Возможно, вам будет полезно протестировать Live API в Google AI Studio, прежде чем начать разработку. Чтобы использовать Live API в Google AI Studio, выберите Stream .
Сравнение моделей
В таблице ниже приведены основные различия между моделями Gemini 3.1 Flash Live Preview и Gemini 2.5 Flash Live Preview :
| Особенность | Gemini 3.1 Flash Live Preview | Gemini 2.5 Flash Live Preview |
|---|---|---|
| Мышление | Используется thinkingLevel для управления глубиной мышления с помощью таких настроек, как minimal , low , medium и high . По умолчанию используется minimal для оптимизации минимальной задержки. См. раздел «Уровни и бюджеты мышления» . | Используется thinkingBudget для установки количества жетонов мышления. Динамическое мышление включено по умолчанию. Установите thinkingBudget равным 0 , чтобы отключить его. См. Уровни и бюджеты мышления . |
| Получение ответа | Одно серверное событие может одновременно содержать несколько частей контента (например, inlineData и текстовую расшифровку). Убедитесь, что ваш код обрабатывает все части каждого события, чтобы избежать потери контента. | Каждое серверное событие содержит только одну часть контента. Части доставляются в отдельных событиях. |
| Контент клиента | send_client_content поддерживается только для инициализации истории контекста (требуется установка initial_history_in_client_content в конфигурации сессии). Для отправки текстовых обновлений во время разговора используйте вместо неё send_realtime_input . | send_client_content поддерживается на протяжении всего диалога для отправки поэтапных обновлений контента и установления контекста. |
| Покрытие поворота | По умолчанию используется значение TURN_INCLUDES_AUDIO_ACTIVITY_AND_ALL_VIDEO . В ход модели включается обнаруженная аудиоактивность и все видеокадры. | По умолчанию используется значение TURN_INCLUDES_ONLY_ACTIVITY . Ход модели включает только обнаруженную активность. |
Пользовательский VAD ( activity_start / activity_end ) | Поддерживается . Отключите автоматическую отправку сообщений activityStart и activityEnd вручную для управления границами поворотов. | Поддерживается . Отключите автоматическую отправку сообщений activityStart и activityEnd вручную для управления границами поворотов. |
| Автоматическая настройка VAD | Поддерживается . Настройте такие параметры, как start_of_speech_sensitivity , end_of_speech_sensitivity , prefix_padding_ms и silence_duration_ms . | Поддерживается . Настройте такие параметры, как start_of_speech_sensitivity , end_of_speech_sensitivity , prefix_padding_ms и silence_duration_ms . |
Асинхронный вызов функции ( behavior: NON_BLOCKING ) | Не поддерживается . Вызов функций осуществляется только последовательно. Модель не начнет отвечать, пока вы не отправите инструменту ответ. | Поддерживается . Установите для объявления функции behavior NON_BLOCKING , чтобы модель могла продолжать взаимодействие во время выполнения функции. Управляйте обработкой ответов моделью с помощью параметра scheduling ( INTERRUPT , WHEN_IDLE или SILENT ). |
| Проактивное аудио | Не поддерживается | Поддерживается . При включении этой функции модель может заблаговременно принять решение не отвечать, если входной контент нерелевантен. Установите proactive_audio в true в конфигурации proactivity (требуется v1alpha ). |
| Эмоциональный диалог | Не поддерживается | Поддерживается . Модель адаптирует свой стиль ответа в соответствии с выражением лица и тоном входных данных. Установите enable_affective_dialog в true в конфигурации сессии (требуется v1alpha ). |
Для перехода с Gemini 2.5 Flash Live на Gemini 3.1 Flash Live см. руководство по миграции .
Установление связи
В следующем примере показано, как создать соединение с помощью ключа API:
Python
import asyncio
from google import genai
client = genai.Client()
model = "gemini-3.1-flash-live-preview"
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({});
const model = 'gemini-3.1-flash-live-preview';
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();
Способы взаимодействия
В следующих разделах приведены примеры и контекст для различных способов ввода и вывода данных, доступных в Live API.
Отправка аудио
Аудиоданные необходимо передавать в необработанном формате PCM (16-битный PCM-аудиофайл, 16 кГц, 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'
}
});
Аудиоформаты
Аудиоданные в Live API всегда представляют собой необработанный 16-битный PCM-файл в формате little-endian. Выходной аудиопоток всегда использует частоту дискретизации 24 кГц. Входной аудиопоток изначально имеет частоту 16 кГц, но Live API при необходимости выполнит передискретизацию, поэтому можно передавать любую частоту дискретизации. Чтобы передать частоту дискретизации входного аудио, установите MIME-тип каждого содержащего аудио Blob-объекта на значение, например, audio/pcm;rate=16000 .
Приём аудиосигнала
Аудиоответы модели поступают в виде блоков данных.
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)
}
}
}
Отправка текста
Текст можно отправлять с помощью send_realtime_input (Python) или sendRealtimeInput (JavaScript).
Python
await session.send_realtime_input(text="Hello, how are you?")
JavaScript
session.sendRealtimeInput({
text: 'Hello, how are you?'
});
Отправка видео
Видеокадры передаются в виде отдельных изображений (например, JPEG или PNG) с определенной частотой кадров (максимум 1 кадр в секунду).
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'
}
});
Постепенные обновления контента
Используйте поэтапные обновления для отправки текстового ввода, установления контекста сессии или восстановления контекста сессии. Для коротких контекстов вы можете отправлять пошаговые взаимодействия, представляющие точную последовательность событий:
Python
turns = [
{"role": "user", "parts": [{"text": "What is the capital of France?"}]},
{"role": "model", "parts": [{"text": "Paris"}]},
]
await session.send_client_content(turns=turns, turn_complete=False)
turns = [{"role": "user", "parts": [{"text": "What is the capital of Germany?"}]}]
await session.send_client_content(turns=turns, turn_complete=True)
JavaScript
let inputTurns = [
{ "role": "user", "parts": [{ "text": "What is the capital of France?" }] },
{ "role": "model", "parts": [{ "text": "Paris" }] },
]
session.sendClientContent({ turns: inputTurns, turnComplete: false })
inputTurns = [{ "role": "user", "parts": [{ "text": "What is the capital of Germany?" }] }]
session.sendClientContent({ turns: inputTurns, turnComplete: true })
Для более длительных контекстов рекомендуется предоставлять единое краткое сообщение, чтобы освободить контекстное окно для последующих взаимодействий. См. раздел «Возобновление сессии» для получения информации о другом способе загрузки контекста сессии.
Расшифровки аудиозаписей
Помимо ответа модели, вы также можете получать транскрипции как аудиовыхода, так и аудиовхода.
Для включения транскрипции аудиовыхода модели укажите output_audio_transcription в конфигурации настройки. Язык транскрипции определяется на основе ответа модели.
Python
import asyncio
from google import genai
from google.genai import types
client = genai.Client()
model = "gemini-3.1-flash-live-preview"
config = {
"response_modalities": ["AUDIO"],
"output_audio_transcription": {}
}
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
message = "Hello? Gemini are you there?"
await session.send_client_content(
turns={"role": "user", "parts": [{"text": message}]}, turn_complete=True
)
async for response in session.receive():
if response.server_content.model_turn:
print("Model turn:", response.server_content.model_turn)
if response.server_content.output_transcription:
print("Transcript:", response.server_content.output_transcription.text)
if __name__ == "__main__":
asyncio.run(main())
JavaScript
import { GoogleGenAI, Modality } from '@google/genai';
const ai = new GoogleGenAI({});
const model = 'gemini-3.1-flash-live-preview';
const config = {
responseModalities: [Modality.AUDIO],
outputAudioTranscription: {}
};
async function live() {
const responseQueue = [];
async function waitMessage() {
let done = false;
let message = undefined;
while (!done) {
message = responseQueue.shift();
if (message) {
done = true;
} else {
await new Promise((resolve) => setTimeout(resolve, 100));
}
}
return message;
}
async function handleTurn() {
const turns = [];
let done = false;
while (!done) {
const message = await waitMessage();
turns.push(message);
if (message.serverContent && message.serverContent.turnComplete) {
done = true;
}
}
return turns;
}
const session = await ai.live.connect({
model: model,
callbacks: {
onopen: function () {
console.debug('Opened');
},
onmessage: function (message) {
responseQueue.push(message);
},
onerror: function (e) {
console.debug('Error:', e.message);
},
onclose: function (e) {
console.debug('Close:', e.reason);
},
},
config: config,
});
const inputTurns = 'Hello how are you?';
session.sendClientContent({ turns: inputTurns });
const turns = await handleTurn();
for (const turn of turns) {
if (turn.serverContent && turn.serverContent.outputTranscription) {
console.debug('Received output transcription: %s\n', turn.serverContent.outputTranscription.text);
}
}
session.close();
}
async function main() {
await live().catch((e) => console.error('got error', e));
}
main();
Для включения транскрипции аудиовхода модели укажите параметр input_audio_transcription в конфигурации setup.
Python
import asyncio
from pathlib import Path
from google import genai
from google.genai import types
client = genai.Client()
model = "gemini-3.1-flash-live-preview"
config = {
"response_modalities": ["AUDIO"],
"input_audio_transcription": {},
}
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
audio_data = Path("16000.pcm").read_bytes()
await session.send_realtime_input(
audio=types.Blob(data=audio_data, mime_type='audio/pcm;rate=16000')
)
async for msg in session.receive():
if msg.server_content.input_transcription:
print('Transcript:', msg.server_content.input_transcription.text)
if __name__ == "__main__":
asyncio.run(main())
JavaScript
import { GoogleGenAI, Modality } from '@google/genai';
import * as fs from "node:fs";
import pkg from 'wavefile';
const { WaveFile } = pkg;
const ai = new GoogleGenAI({});
const model = 'gemini-3.1-flash-live-preview';
const config = {
responseModalities: [Modality.AUDIO],
inputAudioTranscription: {}
};
async function live() {
const responseQueue = [];
async function waitMessage() {
let done = false;
let message = undefined;
while (!done) {
message = responseQueue.shift();
if (message) {
done = true;
} else {
await new Promise((resolve) => setTimeout(resolve, 100));
}
}
return message;
}
async function handleTurn() {
const turns = [];
let done = false;
while (!done) {
const message = await waitMessage();
turns.push(message);
if (message.serverContent && message.serverContent.turnComplete) {
done = true;
}
}
return turns;
}
const session = await ai.live.connect({
model: model,
callbacks: {
onopen: function () {
console.debug('Opened');
},
onmessage: function (message) {
responseQueue.push(message);
},
onerror: function (e) {
console.debug('Error:', e.message);
},
onclose: function (e) {
console.debug('Close:', e.reason);
},
},
config: config,
});
// Send Audio Chunk
const fileBuffer = fs.readFileSync("16000.wav");
// Ensure audio conforms to API requirements (16-bit PCM, 16kHz, mono)
const wav = new WaveFile();
wav.fromBuffer(fileBuffer);
wav.toSampleRate(16000);
wav.toBitDepth("16");
const base64Audio = wav.toBase64();
// If already in correct format, you can use this:
// const fileBuffer = fs.readFileSync("sample.pcm");
// const base64Audio = Buffer.from(fileBuffer).toString('base64');
session.sendRealtimeInput(
{
audio: {
data: base64Audio,
mimeType: "audio/pcm;rate=16000"
}
}
);
const turns = await handleTurn();
for (const turn of turns) {
if (turn.text) {
console.debug('Received text: %s\n', turn.text);
}
else if (turn.data) {
console.debug('Received inline data: %s\n', turn.data);
}
else if (turn.serverContent && turn.serverContent.inputTranscription) {
console.debug('Received input transcription: %s\n', turn.serverContent.inputTranscription.text);
}
}
session.close();
}
async function main() {
await live().catch((e) => console.error('got error', e));
}
main();
Изменить голос и язык
Встроенные модели вывода звука поддерживают любые голоса, доступные для наших моделей преобразования текста в речь (TTS) . Вы можете прослушать все голоса в AI Studio .
Чтобы указать голос, задайте имя голоса в объекте speechConfig в рамках конфигурации сессии:
Python
config = {
"response_modalities": ["AUDIO"],
"speech_config": {
"voice_config": {"prebuilt_voice_config": {"voice_name": "Kore"}}
},
}
JavaScript
const config = {
responseModalities: [Modality.AUDIO],
speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName: "Kore" } } }
};
API Live поддерживает несколько языков . Встроенные модели вывода звука автоматически выбирают соответствующий язык и не поддерживают явную настройку языкового кода.
Встроенные аудиовозможности
Наши новейшие модели оснащены встроенным аудиовыходом , обеспечивающим естественное, реалистичное звучание речи и улучшенную многоязычную производительность.
Мышление
В моделях Gemini 3.1 для управления глубиной мышления используется thinkingLevel , включающий такие значения, как minimal , low , medium и high . По умолчанию установлено minimal для оптимизации минимальной задержки. В моделях Gemini 2.5 вместо этого используется thinkingBudget для установки количества токенов мышления. Более подробную информацию об уровнях и бюджетах см. в разделе «Уровни и бюджеты мышления» .
Python
model = "gemini-3.1-flash-live-preview"
config = types.LiveConnectConfig(
response_modalities=["AUDIO"]
thinking_config=types.ThinkingConfig(
thinking_level="low",
)
)
async with client.aio.live.connect(model=model, config=config) as session:
# Send audio input and receive audio
JavaScript
const model = 'gemini-3.1-flash-live-preview';
const config = {
responseModalities: [Modality.AUDIO],
thinkingConfig: {
thinkingLevel: 'low',
},
};
async function main() {
const session = await ai.live.connect({
model: model,
config: config,
callbacks: ...,
});
// Send audio input and receive audio
session.close();
}
main();
Кроме того, вы можете включить отображение кратких обзоров мыслей, установив includeThoughts в true в вашем конфигурационном файле. Дополнительную информацию см. в разделе «Краткие обзоры мыслей» :
Python
model = "gemini-3.1-flash-live-preview"
config = types.LiveConnectConfig(
response_modalities=["AUDIO"]
thinking_config=types.ThinkingConfig(
thinking_level="low",
include_thoughts=True
)
)
JavaScript
const model = 'gemini-3.1-flash-live-preview';
const config = {
responseModalities: [Modality.AUDIO],
thinkingConfig: {
thinkingLevel: 'low',
includeThoughts: true,
},
};
Эмоциональный диалог
Эта функция позволяет Gemini адаптировать свой стиль отклика к входному сигналу, его выразительности и тембру.
Для использования диалогового окна с эффектом аффективности установите версию API на v1alpha и параметр enable_affective_dialog в true в сообщении настройки:
Python
client = genai.Client(http_options={"api_version": "v1alpha"})
config = types.LiveConnectConfig(
response_modalities=["AUDIO"],
enable_affective_dialog=True
)
JavaScript
const ai = new GoogleGenAI({ httpOptions: {"apiVersion": "v1alpha"} });
const config = {
responseModalities: [Modality.AUDIO],
enableAffectiveDialog: true
};
Проактивное аудио
При включении этой функции Gemini может заблаговременно принять решение не отвечать, если контент неактуален.
Для использования установите версию API на v1alpha , настройте поле proactivity в сообщении настройки и установите proactive_audio в true :
Python
client = genai.Client(http_options={"api_version": "v1alpha"})
config = types.LiveConnectConfig(
response_modalities=["AUDIO"],
proactivity={'proactive_audio': True}
)
JavaScript
const ai = new GoogleGenAI({ httpOptions: {"apiVersion": "v1alpha"} });
const config = {
responseModalities: [Modality.AUDIO],
proactivity: { proactiveAudio: true }
}
Обнаружение голосовой активности (VAD)
Функция распознавания голосовой активности (VAD) позволяет модели распознавать, когда человек говорит. Это крайне важно для создания естественных диалогов, поскольку позволяет пользователю прервать модель в любой момент.
Когда VAD обнаруживает прерывание, текущая генерация отменяется и отбрасывается. В истории сессии сохраняется только информация, уже отправленная клиенту. Затем сервер отправляет сообщение BidiGenerateContentServerContent , чтобы сообщить о прерывании.
Затем сервер Gemini отбрасывает все ожидающие вызовы функций и отправляет сообщение BidiGenerateContentServerContent с идентификаторами отмененных вызовов.
Python
async for response in session.receive():
if response.server_content.interrupted is True:
# The generation was interrupted
# If realtime playback is implemented in your application,
# you should stop playing audio and clear queued playback here.
JavaScript
const turns = await handleTurn();
for (const turn of turns) {
if (turn.serverContent && turn.serverContent.interrupted) {
// The generation was interrupted
// If realtime playback is implemented in your application,
// you should stop playing audio and clear queued playback here.
}
}
Автоматический ВАД
По умолчанию модель автоматически выполняет VAD для непрерывного потока аудиовхода. VAD можно настроить с помощью поля realtimeInputConfig.automaticActivityDetection в конфигурации настройки .
Если аудиопоток приостанавливается более чем на секунду (например, из-за того, что пользователь выключил микрофон), следует отправить событие audioStreamEnd для очистки кэша аудиоданных. Клиент может возобновить отправку аудиоданных в любое время.
Python
# example audio file to try:
# URL = "https://storage.googleapis.com/generativeai-downloads/data/hello_are_you_there.pcm"
# !wget -q $URL -O sample.pcm
import asyncio
from pathlib import Path
from google import genai
from google.genai import types
client = genai.Client()
model = "gemini-3.1-flash-live-preview"
config = {"response_modalities": ["AUDIO"]}
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
audio_bytes = Path("sample.pcm").read_bytes()
await session.send_realtime_input(
audio=types.Blob(data=audio_bytes, mime_type="audio/pcm;rate=16000")
)
# if stream gets paused, send:
# await session.send_realtime_input(audio_stream_end=True)
async for response in session.receive():
if response.text is not None:
print(response.text)
if __name__ == "__main__":
asyncio.run(main())
JavaScript
// example audio file to try:
// URL = "https://storage.googleapis.com/generativeai-downloads/data/hello_are_you_there.pcm"
// !wget -q $URL -O sample.pcm
import { GoogleGenAI, Modality } from '@google/genai';
import * as fs from "node:fs";
const ai = new GoogleGenAI({});
const model = 'gemini-3.1-flash-live-preview';
const config = { responseModalities: [Modality.AUDIO] };
async function live() {
const responseQueue = [];
async function waitMessage() {
let done = false;
let message = undefined;
while (!done) {
message = responseQueue.shift();
if (message) {
done = true;
} else {
await new Promise((resolve) => setTimeout(resolve, 100));
}
}
return message;
}
async function handleTurn() {
const turns = [];
let done = false;
while (!done) {
const message = await waitMessage();
turns.push(message);
if (message.serverContent && message.serverContent.turnComplete) {
done = true;
}
}
return turns;
}
const session = await ai.live.connect({
model: model,
callbacks: {
onopen: function () {
console.debug('Opened');
},
onmessage: function (message) {
responseQueue.push(message);
},
onerror: function (e) {
console.debug('Error:', e.message);
},
onclose: function (e) {
console.debug('Close:', e.reason);
},
},
config: config,
});
// Send Audio Chunk
const fileBuffer = fs.readFileSync("sample.pcm");
const base64Audio = Buffer.from(fileBuffer).toString('base64');
session.sendRealtimeInput(
{
audio: {
data: base64Audio,
mimeType: "audio/pcm;rate=16000"
}
}
);
// if stream gets paused, send:
// session.sendRealtimeInput({ audioStreamEnd: true })
const turns = await handleTurn();
for (const turn of turns) {
if (turn.text) {
console.debug('Received text: %s\n', turn.text);
}
else if (turn.data) {
console.debug('Received inline data: %s\n', turn.data);
}
}
session.close();
}
async function main() {
await live().catch((e) => console.error('got error', e));
}
main();
При использовании send_realtime_input API будет автоматически реагировать на аудиосигнал на основе VAD. В то время как send_client_content добавляет сообщения в контекст модели по порядку, send_realtime_input оптимизирован для быстрой реакции за счет детерминированного порядка.
Автоматическая настройка VAD
Для более полного контроля над работой VAD можно настроить следующие параметры. Дополнительную информацию см. в справочнике API .
Python
from google.genai import types
config = {
"response_modalities": ["AUDIO"],
"realtime_input_config": {
"automatic_activity_detection": {
"disabled": False, # default
"start_of_speech_sensitivity": types.StartSensitivity.START_SENSITIVITY_LOW,
"end_of_speech_sensitivity": types.EndSensitivity.END_SENSITIVITY_LOW,
"prefix_padding_ms": 20,
"silence_duration_ms": 100,
}
}
}
JavaScript
import { GoogleGenAI, Modality, StartSensitivity, EndSensitivity } from '@google/genai';
const config = {
responseModalities: [Modality.AUDIO],
realtimeInputConfig: {
automaticActivityDetection: {
disabled: false, // default
startOfSpeechSensitivity: StartSensitivity.START_SENSITIVITY_LOW,
endOfSpeechSensitivity: EndSensitivity.END_SENSITIVITY_LOW,
prefixPaddingMs: 20,
silenceDurationMs: 100,
}
}
};
Отключить автоматическое управление ВАД
В качестве альтернативы, автоматическое обнаружение активности пользователя можно отключить, установив параметр realtimeInputConfig.automaticActivityDetection.disabled в true в сообщении setup. В этой конфигурации клиент отвечает за обнаружение речи пользователя и отправку сообщений activityStart и activityEnd в соответствующие моменты времени. Сообщение audioStreamEnd в этой конфигурации не отправляется. Вместо этого любое прерывание потока отмечается сообщением activityEnd .
Python
config = {
"response_modalities": ["AUDIO"],
"realtime_input_config": {"automatic_activity_detection": {"disabled": True}},
}
async with client.aio.live.connect(model=model, config=config) as session:
# ...
await session.send_realtime_input(activity_start=types.ActivityStart())
await session.send_realtime_input(
audio=types.Blob(data=audio_bytes, mime_type="audio/pcm;rate=16000")
)
await session.send_realtime_input(activity_end=types.ActivityEnd())
# ...
JavaScript
const config = {
responseModalities: [Modality.AUDIO],
realtimeInputConfig: {
automaticActivityDetection: {
disabled: true,
}
}
};
session.sendRealtimeInput({ activityStart: {} })
session.sendRealtimeInput(
{
audio: {
data: base64Audio,
mimeType: "audio/pcm;rate=16000"
}
}
);
session.sendRealtimeInput({ activityEnd: {} })
Количество токенов
Общее количество потреблённых токенов можно найти в поле usageMetadata в ответном сообщении сервера.
Python
async for message in session.receive():
# The server will periodically send messages that include UsageMetadata.
if message.usage_metadata:
usage = message.usage_metadata
print(
f"Used {usage.total_token_count} tokens in total. Response token breakdown:"
)
for detail in usage.response_tokens_details:
match detail:
case types.ModalityTokenCount(modality=modality, token_count=count):
print(f"{modality}: {count}")
JavaScript
const turns = await handleTurn();
for (const turn of turns) {
if (turn.usageMetadata) {
console.debug('Used %s tokens in total. Response token breakdown:\n', turn.usageMetadata.totalTokenCount);
for (const detail of turn.usageMetadata.responseTokensDetails) {
console.debug('%s\n', detail);
}
}
}
Разрешение СМИ
Разрешение входного медиафайла можно указать, задав поле mediaResolution в конфигурации сессии:
Python
from google.genai import types
config = {
"response_modalities": ["AUDIO"],
"media_resolution": types.MediaResolution.MEDIA_RESOLUTION_LOW,
}
JavaScript
import { GoogleGenAI, Modality, MediaResolution } from '@google/genai';
const config = {
responseModalities: [Modality.AUDIO],
mediaResolution: MediaResolution.MEDIA_RESOLUTION_LOW,
};
Ограничения
При планировании проекта учитывайте следующие ограничения Live API.
Способы реагирования
Встроенные аудиомодели поддерживают только режим аудиоответа. Если вам нужен ответ модели в текстовом формате, используйте функцию транскрипции выходного аудиофайла .
Аутентификация клиента
API Live по умолчанию обеспечивает только аутентификацию между серверами. Если вы используете подход «клиент-сервер» в своем приложении Live API, вам необходимо использовать временные токены для снижения рисков безопасности.
Продолжительность сессии
Продолжительность аудиосессий ограничена 15 минутами, а аудио- и видеосессий — 2 минутами. Однако вы можете настроить различные методы управления сессиями для неограниченного увеличения их продолжительности.
Контекстное окно
В рамках сессии контекстное окно ограничено следующим значением:
- 128 тыс. токенов для моделей нативного аудиовыхода
- 32 тыс. токенов для других моделей Live API
Поддерживаемые языки
API Live поддерживает следующие 97 языков.
| Язык | Код BCP-47 | Язык | Код BCP-47 |
|---|---|---|---|
| африкаанс | af | латышский | lv |
| Акан | ak | литовский | lt |
| албанский | sq | македонский | mk |
| амхарский | am | малайский | ms |
| арабский | ar | Малаялам | ml |
| армянский | hy | мальтийский | mt |
| ассамский | as | маори | mi |
| азербайджанский | az | маратхи | mr |
| Баскский | eu | монгольский | mn |
| белорусский | be | непальский | ne |
| бенгальский | bn | норвежский | no |
| боснийский | bs | Одиа | or |
| болгарский | bg | Оромо | om |
| бирманский | my | пушту | ps |
| каталанский | ca | персидский | fa |
| Себуано | ceb | польский | pl |
| китайский | zh | португальский | pt |
| хорватский | hr | Пенджаби | pa |
| чешский | cs | кечуа | qu |
| датский | da | румынский | ro |
| Голландский | nl | романшский | rm |
| Английский | en | Русский | ru |
| эстонский | et | сербский | sr |
| Фарерский | fo | Синдхи | sd |
| филиппинский | fil | сингальский | si |
| финский | fi | словацкий | sk |
| Французский | fr | словенский | sl |
| галисийский | gl | сомалийский | so |
| грузинский | ka | Южный Сото | st |
| немецкий | de | испанский | es |
| греческий | el | суахили | sw |
| гуджарати | gu | шведский | sv |
| Хауса | ha | Таджик | tg |
| иврит | iw | тамильский | ta |
| хинди | hi | телугу | te |
| венгерский | hu | Тайский | th |
| исландский | is | Тсвана | tn |
| индонезийский | id | турецкий | tr |
| Ирландский | ga | туркменский | tk |
| итальянский | it | украинский | uk |
| японский | ja | урду | ur |
| Каннада | kn | узбекский | uz |
| казахский | kk | вьетнамский | vi |
| кхмерский | km | валлийский | cy |
| Киньяруанда | rw | Западно-фризский | fy |
| корейский | ko | Вольф | wo |
| курдский | ku | Йоруба | yo |
| кыргызы | ky | зулу | zu |
| Лао | lo |
Что дальше?
- Ознакомьтесь с руководствами по использованию инструментов и управлению сессиями, чтобы получить важную информацию об эффективном использовании Live API.
- Попробуйте использовать API в режиме реального времени в Google AI Studio .
- Для получения дополнительной информации о моделях Live API см. раздел Gemini 2.5 Flash Native Audio на странице «Модели».
- Больше примеров можно найти в руководствах Live API , Live API Tools и скрипте Live API Get Started .