Для приложений, которым требуется поддержка голосового ввода и вывода в реальном времени с низкой задержкой, например чат-ботов или агентских взаимодействий, Gemini Live API предоставляет оптимизированный способ потоковой передачи входных и выходных данных для модели Gemini. Используя Firebase AI Logic, вы можете вызывать Gemini Live API непосредственно из приложения Android без необходимости интеграции с серверной частью. В этом руководстве рассказывается, как использовать Gemini Live API в приложении для Android с помощью Firebase AI Logic.
Начать
Прежде чем начать, убедитесь, что целевой уровень API вашего приложения – 23 или выше.
Если вы ещё этого не сделали, настройте проект Firebase и подключите к нему приложение. Подробную информацию можно найти в документации по Firebase AI Logic.
Как настроить проект для Android
Добавьте библиотеку Firebase AI Logic и зависимости App Check в файл build.gradle.kts или build.gradle на уровне приложения. Используйте Firebase Android BoM для управления версиями библиотек.
dependencies {
// Import the Firebase BoM
implementation(platform("com.google.firebase:firebase-bom:34.19.0"))
// Add the dependencies for the Firebase AI Logic and App Check libraries
// When using the BoM, you don't specify versions in Firebase library dependencies
implementation("com.google.firebase:firebase-ai")
implementation("com.google.firebase:firebase-appcheck-debug")
}
После добавления зависимостей синхронизируйте проект для Android с Gradle.
Как настроить поставщика данных для отладки App Check при локальной разработке
С начала июля 2026 года в рамках пошаговой настройки логики ИИ в консоли Firebase будет автоматически включаться Проверка приложений Firebase для защиты Gemini API. Для локальной разработки вам нужно настроить поставщика данных для отладки App Check, чтобы пропускать подтверждение, но при этом сохранять принудительное применение App Check.
В отладочной сборке настройте App Check на использование фабрики поставщика отладки:
Kotlin
Firebase.initialize(context = this) Firebase.appCheck.installAppCheckProviderFactory( DebugAppCheckProviderFactory.getInstance(), )Java
FirebaseApp.initializeApp(/*context=*/ this); FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance(); firebaseAppCheck.installAppCheckProviderFactory( DebugAppCheckProviderFactory.getInstance());Получите токен отладки:
Запустите приложение в эмуляторе или на тестовом устройстве.
Найдите в журналах токен отладки App Check. Пример:
D DebugAppCheckProvider: Enter this debug secret into the allow list in the Firebase Console for your project: 123a4567-b89c-12d3-e456-789012345678Скопируйте токен (например,
123a4567-b89c-12d3-e456-789012345678).
Зарегистрируйте токен отладки в App Check:
В консоли Firebase выберите Безопасность > Проверка приложений > вкладка Приложения.
Найдите приложение, нажмите на дополнительное меню () и выберите Управление токенами отладки.
Следуйте инструкциям на экране, чтобы зарегистрировать токен отладки.
Подробную информацию о поставщике отладки (в том числе о том, как получить новый токен отладки) можно найти в официальной документации по App Check.
Как интегрировать Firebase AI Logic и инициализировать генеративную модель
Добавьте разрешение RECORD_AUDIO в файл AndroidManifest.xml приложения:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
Инициализируйте бэкенд-службу Gemini Developer API и получите доступ к LiveModel.
Используйте модель, которая поддерживает Live API, например gemini-2.5-flash-native-audio-preview-12-2025.
Ознакомьтесь с документацией Firebase о доступных моделях Live API.
Чтобы указать голос, задайте название голоса в объекте speechConfig как часть конфигурации модели. Если вы не укажете голос, по умолчанию будет использоваться Puck.
Kotlin
// Initialize the `LiveModel` val model = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel( modelName = "gemini-2.5-flash-native-audio-preview-12-2025", generationConfig = liveGenerationConfig { responseModality = ResponseModality.AUDIO speechConfig = SpeechConfig(voice = Voice("FENRIR")) } )
Java
// Initialize the `LiveModel`
LiveGenerativeModel model = FirebaseAI
.getInstance(GenerativeBackend.googleAI())
.liveModel(
"gemini-2.5-flash-native-audio-preview-12-2025",
new LiveGenerationConfig.Builder()
.setResponseModality(ResponseModality.AUDIO)
.setSpeechConfig(new SpeechConfig(new Voice("FENRIR"))
).build(),
null,
null
);
Вы можете задать роль модели, указав системную инструкцию:
Kotlin
val systemInstruction = content { text("You are a helpful assistant, you main role is [...]") } val model = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel( modelName = "gemini-2.5-flash-native-audio-preview-12-2025", generationConfig = liveGenerationConfig { responseModality = ResponseModality.AUDIO speechConfig = SpeechConfig(voice = Voice("FENRIR")) }, systemInstruction = systemInstruction, )
Java
Content systemInstruction = new Content.Builder()
.addText("You are a helpful assistant, you main role is [...]")
.build();
LiveGenerativeModel model = FirebaseAI
.getInstance(GenerativeBackend.googleAI())
.liveModel(
"gemini-2.5-flash-native-audio-preview-12-2025",
new LiveGenerationConfig.Builder()
.setResponseModality(ResponseModality.AUDIO)
.setSpeechConfig(new SpeechConfig(new Voice("FENRIR"))
).build(),
tools, // null if you don't want to use function calling
systemInstruction
);
Вы можете задать контекст для модели, используя системные инструкции, например историю действий пользователя в приложении.
Как инициализировать сеанс Live API
После создания экземпляра LiveModel вызовите model.connect(), чтобы создать объект LiveSession и установить постоянное подключение к модели с потоковой передачей с низкой задержкой. LiveSession позволяет взаимодействовать с моделью, начиная и останавливая голосовой сеанс, а также отправляя и получая текст.
Затем вы можете позвонить startAudioConversation(), чтобы начать разговор с моделью:
Kotlin
val session = model.connect() session.startAudioConversation()
Java
LiveModelFutures model = LiveModelFutures.from(liveModel);
ListenableFuture<LiveSession> sessionFuture = model.connect();
Futures.addCallback(sessionFuture, new FutureCallback<LiveSession>() {
@Override
public void onSuccess(LiveSession ses) {
LiveSessionFutures session = LiveSessionFutures.from(ses);
session.startAudioConversation();
}
@Override
public void onFailure(Throwable t) {
// Handle exceptions
}
}, executor);
Во время разговора с моделью не перебивайте ее. Кроме того, действующий API двунаправленный, поэтому вы можете использовать одно и то же подключение для отправки и получения контента.
Вы также можете использовать Gemini Live API для создания аудио на основе разных типов входных данных:
- Отправлять текстовые и аудиозапросы.
- Отправлять видеовходные данные (см. приложение Firebase для быстрого запуска).
Вызов функций: подключите Gemini Live API к своему приложению
Вы также можете разрешить модели взаимодействовать непосредственно с логикой вашего приложения, используя вызов функций.
Вызов функций (или инструментов) – это функция реализации генеративного искусственного интеллекта, которая позволяет модели самостоятельно вызывать функции для выполнения действий. Если у функции есть выходные данные, модель добавляет их в контекст и использует для дальнейшей генерации.
Чтобы реализовать вызов функций в приложении, начните с создания объекта FunctionDeclaration для каждой функции, которую вы хотите предоставить модели.
Например, чтобы сделать доступной для Gemini функцию addList, которая добавляет строку в список строк, сначала создайте переменную FunctionDeclaration с названием и кратким описанием функции и ее параметра на английском языке:
Kotlin
val itemList = mutableListOf<String>() fun addList(item: String) { itemList.add(item) } val addListFunctionDeclaration = FunctionDeclaration( name = "addList", description = "Function adding an item the list", parameters = mapOf( "item" to Schema.string("A short string describing the item to add to the list") ) )
Java
HashMap<String, Schema> addListParams = new HashMap<String, Schema>(1);
addListParams.put("item", Schema.str("A short string describing the item to add to the list"));
FunctionDeclaration addListFunctionDeclaration = new FunctionDeclaration(
"addList",
"Function adding an item the list",
addListParams,
Collections.emptyList()
);
Затем передайте этот объект FunctionDeclaration в качестве объекта Tool модели при ее создании:
Kotlin
val addListTool = Tool.functionDeclarations(listOf(addListFunctionDeclaration)) val model = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel( modelName = "gemini-2.5-flash-native-audio-preview-12-2025", generationConfig = liveGenerationConfig { responseModality = ResponseModality.AUDIO speechConfig = SpeechConfig(voice = Voice("FENRIR")) }, systemInstruction = systemInstruction, tools = listOf(addListTool) )
Java
LiveGenerativeModel model = FirebaseAI.getInstance(
GenerativeBackend.googleAI()).liveModel(
"gemini-2.5-flash-native-audio-preview-12-2025",
new LiveGenerationConfig.Builder()
.setResponseModality(ResponseModality.AUDIO)
.setSpeechConfig(new SpeechConfig(new Voice("FENRIR")))
.build(),
List.of(Tool.functionDeclarations(List.of(addListFunctionDeclaration))),
null,
systemInstruction
);
Наконец, реализуйте функцию обработчика, чтобы обрабатывать вызов инструмента, сделанный моделью, и передавать ей ответ. Эта функция обработчика, предоставленная объекту LiveSession при вызове startAudioConversation, принимает параметр FunctionCallPart и возвращает FunctionResponsePart:
Kotlin
session.startAudioConversation(::functionCallHandler) // ... fun functionCallHandler(functionCall: FunctionCallPart): FunctionResponsePart { return when (functionCall.name) { "addList" -> { // Extract function parameter from functionCallPart val itemName = functionCall.args["item"]!!.jsonPrimitive.content // Call function with parameter addList(itemName) // Confirm the function call to the model val response = JsonObject( mapOf( "success" to JsonPrimitive(true), "message" to JsonPrimitive("Item $itemName added to the todo list") ) ) FunctionResponsePart(functionCall.name, response) } else -> { val response = JsonObject( mapOf( "error" to JsonPrimitive("Unknown function: ${functionCall.name}") ) ) FunctionResponsePart(functionCall.name, response) } } }
Java
Futures.addCallback(sessionFuture, new FutureCallback<LiveSessionFutures>() {
@RequiresPermission(Manifest.permission.RECORD_AUDIO)
@Override
@OptIn(markerClass = PublicPreviewAPI.class)
public void onSuccess(LiveSessionFutures ses) {
ses.startAudioConversation(::handleFunctionCallFuture);
}
@Override
public void onFailure(Throwable t) {
// Handle exceptions
}
}, executor);
// ...
ListenableFuture<JsonObject> handleFunctionCallFuture = Futures.transform(response, result -> {
for (FunctionCallPart functionCall : result.getFunctionCalls()) {
if (functionCall.getName().equals("addList")) {
Map<String, JsonElement> args = functionCall.getArgs();
String item =
JsonElementKt.getContentOrNull(
JsonElementKt.getJsonPrimitive(
locationJsonObject.get("item")));
return addList(item);
}
}
return null;
}, Executors.newSingleThreadExecutor());
Дальнейшие действия
- Попробуйте Gemini Live API в приложении-образце из каталога ИИ для Android.
- Подробнее о Gemini Live API можно узнать в документации по Firebase AI Logic.
- Подробнее о моделях Gemini…
- Подробнее о вызове функций…
- Изучите стратегии создания запросов.