Доступность моделей генеративного ИИ постоянно меняется: выпускаются новые, более эффективные модели, а старые, менее мощные, отключаются.
Если вы получаете доступ к моделям генеративного ИИ напрямую из мобильного или веб-приложения с помощью Firebase AI Logic, важно настроить приложение так, чтобы оно учитывало эти частые изменения моделей. Не все пользователи обновят приложение до последней версии, чтобы начать использовать нужную вам модель.
Firebase Remote Config позволяет динамически и удаленно обновлять значения параметров в приложении (например, название модели) из консоли Firebase, не выпуская новую версию приложения.
Обратите внимание, что изменение названия модели – это критически важный сценарий использования Remote Config с Firebase AI Logic, но вы также можете использовать Remote Config для динамического и даже условного управления параметрами в приложении, например конфигурацией генерации модели (например, максимальным количеством выходных токенов), настройками безопасности, системными инструкциями и данными запросов.
В этом руководстве рассказывается, как реализовать Remote Config в приложении, в частности как управлять названием модели, используемой в приложении.
Шаг 1. Задайте значение параметра в консоли Firebase.
Создайте шаблон клиента Remote Config и настройте параметр model_name и его значение, чтобы получать и использовать их в приложении.
В консоли Firebase выберите DevOps & Engagement (DevOps и вовлечение) > Remote Config (Удаленная конфигурация).
В селекторе Клиент/сервер в верхней части страницы выберите Клиент.
Чтобы начать работу с шаблоном клиента, нажмите Создать конфигурацию (или Добавить параметр, если вы уже использовали шаблоны клиента).
Определите параметр
model_name:Название параметра Описание Тип Значение по умолчанию model_nameНазвание модели. Ознакомьтесь со списком доступных моделей. Строка gemini-3.8-flashДобавив этот параметр, нажмите Опубликовать изменения. Если это не новый шаблон Remote Config, проверьте изменения и снова нажмите Опубликовать изменения.
Шаг 2. Добавьте и инициализируйте Remote Config в приложении
Добавьте библиотеку Remote Config и настройте Remote Config в приложении.
Swift
При настройке Firebase AI Logic вы уже добавили Firebase SDK в приложение, но вам также нужно добавить Remote Config.
Откройте проект в Xcode и перейдите в меню File (Файл) > Add Package Dependencies (Добавить зависимости пакетов).
Выберите firebase-ios-sdk и нажмите Add package (Добавить пакет).
В навигаторе проектов выберите свое приложение > Targets (Цели) > свое приложение.
На вкладке General (Общие) прокрутите страницу до раздела Frameworks, Libraries, and Embedded Content (Фреймворки, библиотеки и встроенный контент).
Нажмите +, выберите FirebaseRemoteConfig и нажмите Add (Добавить).
Добавьте в код импорт
FirebaseRemoteConfig:import FirebaseRemoteConfigВнутри подходящего класса для вашего приложения инициализируйте Firebase и добавьте Remote Config в основную логику приложения.
Здесь вы добавите Remote Config и Remote Config real-time listener в качестве импортируемых объектов, чтобы приложение могло получать новые значения в реальном времени, и добавите минимальный интервал получения:
let remoteConfig = RemoteConfig.remoteConfig() let settings = RemoteConfigSettings() settings.minimumFetchInterval = 3600 remoteConfig.configSettings = settings
Kotlin
Добавьте зависимость Remote Config в файл Gradle на уровне модуля (приложения). Обычно это
app/build.gradle.ktsилиapp/build.gradle.dependencies { implementation(platform("com.google.firebase:firebase-bom:35.1.0")) implementation("com.google.firebase:firebase-ai") implementation("com.google.firebase:firebase-config") // ... other dependencies }Добавьте Remote Config в основную логику приложения. Здесь вы инициализируете Remote Config и добавите минимальный интервал получения:
val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig val configSettings = remoteConfigSettings { minimumFetchIntervalInSeconds = 3600 } remoteConfig.setConfigSettingsAsync(configSettings)
Java
Добавьте зависимость Remote Config в файл Gradle на уровне модуля (приложения). Обычно это
app/build.gradle.ktsилиapp/build.gradle.dependencies { implementation(platform("com.google.firebase:firebase-bom:35.1.0")) implementation("com.google.firebase:firebase-ai") implementation("com.google.firebase:firebase-config") // ... other dependencies }Добавьте Remote Config в основную логику приложения. Здесь вы инициализируете Remote Config и добавите минимальный интервал получения:
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance(); FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder() .setMinimumFetchIntervalInSeconds(3600) .build(); mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
Web
Откройте код в текстовом редакторе и импортируйте Remote Config:
import { getRemoteConfig } from 'firebase/remote-config';Внутри основной функции и после инициализации приложения Firebase для SDK Firebase AI Logic инициализируйте Remote Config:
// Initialize Remote Config and get a reference to the service const remoteConfig = getRemoteConfig(app);Установите минимальный интервал получения:
remoteConfig.settings.minimumFetchIntervalMillis = 3600000;
Dart
В каталоге проекта Flutter установите и добавьте Remote Config с помощью следующей команды:
flutter pub add firebase_remote_configОткройте файл
./lib/main.dartи добавьте импорт после других импортов, которые вы добавили для поддержки Firebase AI Logic:import 'package:firebase_ai/firebase_ai.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_remote_config/firebase_remote_config.dart';Добавьте в приложение переменную
_modelName, чтобы использовать ее в дальнейшем.late final String _modelName; late final String _systemInstructions; late final String _prompt;Получите экземпляр объекта Remote Config и задайте минимальный интервал получения, чтобы обеспечить возможность частых обновлений. Добавьте его после инициализации Firebase.
final remoteConfig = FirebaseRemoteConfig.instance; await remoteConfig.setConfigSettings(RemoteConfigSettings( fetchTimeout: const Duration(seconds: 3600), minimumFetchInterval: const Duration(seconds: 3600), ));
Unity
Добавьте Remote Config в проект Unity, следуя этим инструкциям.
Получите экземпляр объекта Remote Config и задайте минимальный интервал получения, чтобы обеспечить возможность частых обновлений. Добавьте его после инициализации Firebase.
var remoteConfig = FirebaseRemoteConfig.DefaultInstance; const int MillisecondsPerSecond = 1000; await remoteConfig.SetConfigSettingsAsync(new ConfigSettings() { FetchTimeoutInMilliseconds = 3600 * MillisecondsPerSecond, MinimumFetchIntervalInMilliseconds = 3600 * MillisecondsPerSecond });
Шаг 3. Задайте значение параметра в приложении
Значения параметров по умолчанию в приложении следует задавать в объекте Remote Config. Это гарантирует, что приложение будет работать правильно, даже если оно не сможет получить значения из сервиса Remote Config.
Swift
В консоли Firebase перейдите на страницу DevOps & Engagement (DevOps и взаимодействие) > Remote Config (Удаленная конфигурация) > Parameters (Параметры).
Откройте
меню и выберите Скачать значения по умолчанию.В появившемся окне включите параметр .plist для iOS и нажмите Скачать файл.
Сохраните файл в каталоге приложения.
В Xcode нажмите правой кнопкой мыши на приложение и выберите Add Files (Добавить файлы).
Выберите remote_config_defaults.plist и нажмите Add (Добавить).
Обновите код приложения, чтобы он ссылался на файл со значениями по умолчанию:
// Set default values for Remote Config parameters. remoteConfig.setDefaults(fromPlist: "remote_config_defaults")
Kotlin
В консоли Firebase перейдите на страницу DevOps & Engagement (DevOps и взаимодействие) > Remote Config (Удаленная конфигурация) > Parameters (Параметры).
Откройте
меню и выберите Скачать значения по умолчанию.В появившемся окне выберите .xml для Android и нажмите Скачать файл.
Сохраните файл в каталоге XML-ресурсов приложения.
Обновите основной файл activity, добавив значения по умолчанию после строки
configSettings, которую вы добавили ранее:// Set default values for Remote Config parameters. remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
Java
В консоли Firebase перейдите на страницу DevOps & Engagement (DevOps и взаимодействие) > Remote Config (Удаленная конфигурация) > Parameters (Параметры).
Откройте
меню и выберите Скачать значения по умолчанию.В появившемся окне выберите .xml для Android и нажмите Скачать файл.
Сохраните файл в каталоге XML-ресурсов приложения.
Обновите основной файл activity, добавив значения по умолчанию после строки
configSettings, которую вы добавили ранее:// Set default values for Remote Config parameters. mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
Web
Вы можете задать значение по умолчанию для названия модели прямо в коде:
// Set default values for Remote Config parameters.
remoteConfig.defaultConfig = {
model_name: 'gemini-3.8-flash',
};
Dart
Вы можете задать значение по умолчанию для названия модели прямо в коде:
// Set default values for Remote Config parameters.
remoteConfig.setDefaults(const {
"model_name": "gemini-3.8-flash"
});
Unity
Вы можете задать значение по умолчанию для названия модели прямо в коде:
// Set default values for Remote Config parameters.
await remoteConfig.SetDefaultsAsync(
new System.Collections.Generic.Dictionary<string, object>() {
{ "model_name", "gemini-3.8-flash" }
}
);
Шаг 4. Получите и активируйте значение
Задав значение по умолчанию для названия модели, добавьте следующий код, чтобы получить и активировать значения.
Swift
// Fetch and activate Remote Config values
remoteConfig.fetchAndActivate { status, error in
if let error = error {
print("Error fetching Remote Config: \(error.localizedDescription)")
}
}
Это позволит обновлять объект Remote Config при каждой публикации нового шаблона Remote Config.
Kotlin
// Fetch and activate Remote Config values
remoteConfig.fetchAndActivate()
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
val updated = task.result
Log.d(TAG, "Remote Config values fetched and activated: $updated")
} else {
Log.e(TAG, "Error fetching Remote Config", task.exception)
}
}
Java
// Fetch and activate Remote Config values
mFirebaseRemoteConfig.fetchAndActivate()
.addOnCompleteListener(this, new OnCompleteListener<Boolean>() {
@Override
public void onComplete(@NonNull Task<Boolean> task) {
if (task.isSuccessful()) {
boolean updated = task.getResult();
Log.d(TAG, "Config params updated: " + updated);
} else {
Log.e(TAG, "Error fetching Remote Config", task.exception)
}
}
});
Web
Добавьте
getValueиfetchAndActivateв импортируемые файлы:import { getValue, fetchAndActivate } from 'firebase/remote-config';Найдите код, в котором вы указываете значение по умолчанию для названия модели. Сразу после этого блока кода добавьте следующий код, чтобы получить и активировать конфигурацию и назначить полученное значение константе
modelName.// Fetch and activate Remote Config. try { await fetchAndActivate(remoteConfig); } catch(err) { console.error('Remote Config fetch failed', err); } console.log('Remote Config fetched.'); // Assign Remote Config values. const modelName = getValue(remoteConfig, 'model_name').asString();
Dart
// Fetch and activate Remote Config.
remoteConfig.fetchAndActivate();
// Assign Remote Config values.
String? _modelName = remoteConfig.getString("model_name");
Unity
// Fetch and activate Remote Config values.
await remoteConfig.FetchAndActivateAsync();
Шаг 5. Добавьте прослушиватель Remote Config в реальном времени
Добавьте в приложение прослушиватель Remote Config в реальном времени, чтобы изменения, которые вы вносите в шаблон Remote Config, сразу же передавались клиенту.
Следующий код обновляет объект Remote Config при каждом изменении значения параметра.
Swift
// Add real-time Remote Config
remoteConfig.addOnConfigUpdateListener { configUpdate, error in
guard let configUpdate = configUpdate, error == nil else {
print("Error listening for config updates: \(error?.localizedDescription ?? "No error available")")
return
}
print("Updated keys: \(configUpdate.updatedKeys)")
remoteConfig.activate { changed, error in
guard error == nil else {
print("Error activating config: \(error?.localizedDescription ?? "No error available")")
return
}
print("Activated config successfully")
}
}
Kotlin
При необходимости вы также можете настроить действие в активации addOnCompleteListener:
// Add a real-time Remote Config listener
remoteConfig.addOnConfigUpdateListener(object : ConfigUpdateListener {
override fun onUpdate(configUpdate : ConfigUpdate) {
Log.d(ContentValues.TAG, "Updated keys: " + configUpdate.updatedKeys);
remoteConfig.activate().addOnCompleteListener {
// Optionally, add an action to perform on update here.
}
}
override fun onError(error : FirebaseRemoteConfigException) {
Log.w(ContentValues.TAG, "Config update error with code: " + error.code, error)
}
}
Java
При необходимости вы также можете настроить действие в активации addOnCompleteListener:
// Add a real-time Remote Config listener
remoteConfig.addOnConfigUpdateListener(new ConfigUpdateListener() {
@Override
public void onUpdate(ConfigUpdate configUpdate) {
Log.d(ContentValues.TAG, "Updated keys: " + configUpdate.getUpdatedKeys());
remoteConfig.activate().addOnCompleteListener(new OnCompleteListener<Boolean>() {
@Override
public void onComplete(@NonNull Task<Boolean> task) {
// Optionally, add an action to perform on update here.
}
});
}
@Override
public void onError(FirebaseRemoteConfigException error) {
Log.w(ContentValues.TAG, "Config update error with code: " + error.getCode(), error);
}
});
Web
// Add a real-time Remote Config listener
onConfigUpdate(remoteConfig, {
next: (configUpdate) => {
console.log("Updated keys:", configUpdate.getUpdatedKeys());
if (configUpdate.getUpdatedKeys().has("welcome_message")) {
activate(remoteConfig).then(() => {
showWelcomeMessage();
});
}
},
error: (error) => {
console.log("Config update error:", error);
},
complete: () => {
console.log("Listening stopped.");
}
});
Dart
// Add a real-time Remote Config listener
remoteConfig.onConfigUpdated.listen((event) async {
await remoteConfig.activate();
});
Unity
// Add a real-time Remote Config listener to automatically update whenever
// a new template is published.
// Note: the parameters can be anonymous as they are unused.
remoteConfig.OnConfigUpdateListener += (_, _) => {
remoteConfig.ActivateAsync();
};
Шаг 6. Обновите запросы Gemini API, чтобы использовать значение Remote Config
|
Нажмите на название своего поставщика Gemini API, чтобы посмотреть контент и код, относящиеся к нему. |
Теперь, когда Remote Config полностью настроен, обновите код, чтобы заменить заданные в коде значения значениями из Remote Config.
Swift
import FirebaseAILogic
// When creating a `GenerativeModel` instance, source the model name value from Remote Config
let modelName = remoteConfig.configValue(forKey: "model_name").stringValue
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
modelName: modelName
)
// ...
Kotlin
// When creating a `GenerativeModel` instance, source the model name value from Remote Config
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
modelName = remoteConfig.getString("model_name")
)
// ...
Java
// When creating a `GenerativeModel` instance, source the model name value from Remote Config
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel(
/* modelName */ remoteConfig.getString("model_name"),
/* generationConfig (optional) */ null,
/* safetySettings (optional) */ null,
/* requestOptions (optional) */ new RequestOptions(),
/* tools (optional) */ null,
/* toolsConfig (optional) */ null,
/* systemInstruction (optional) */ null,
);
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
// ...
Web
// ...
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// When creating a `GenerativeModel` instance, source the model name value from Remote Config
const model = getGenerativeModel(ai, {
model: modelName
});
// ...
Dart
// ...
// When creating a `GenerativeModel` instance, source the model name value from Remote Config
final model = FirebaseAI.googleAI().generativeModel(
model: _modelName,
);
// ...
Unity
// ...
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// When creating a `GenerativeModel` instance, source the model name value from Remote Config
var modelName = remoteConfig.GetValue("model_name").StringValue;
var model = ai.GetGenerativeModel(
modelName: modelName
);
// ...
Шаг 7. Запустите приложение
Соберите и запустите приложение, чтобы убедиться, что оно работает. Измените конфигурацию на странице Remote Config в консоли Firebase, опубликуйте изменения и проверьте результат.
Дальнейшие действия
Подробнее о том, как использовать Remote Config и Firebase AI Logic в других случаях…
Для мобильных приложений и игр:
Протестируйте разные настройки модели с помощью Remote Config и A/B Testing.
Постепенно внедряйте изменения параметров модели с помощью поэтапного внедрения Remote Config (только для iOS+ и Android).
Используйте персонализацию Remote Config, чтобы с помощью машинного обучения определять оптимальные настройки для отдельных пользователей (только для iOS+, Android и Unity).