Доступность моделей генеративного ИИ часто меняется: появляются новые, более совершенные модели, а старые, менее эффективные, отключаются.
Если вы получаете доступ к моделям генеративного ИИ напрямую из мобильного или веб-приложения с помощью 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 и нажмите Добавить пакет.
В навигаторе проектов выберите свое приложение, а затем нажмите Targets (Цели) и снова выберите приложение.
На вкладке Общие прокрутите страницу до раздела Фреймворки, библиотеки и встроенный контент.
Нажмите + и выберите FirebaseRemoteConfig, а затем нажмите Добавить.
Добавьте в код импорт
FirebaseRemoteConfig:import FirebaseRemoteConfigВ соответствующем классе приложения инициализируйте Firebase и добавьте Remote Config в основную логику приложения.
Здесь вы добавите Remote Config и Remote Config прослушиватель в реальном времени в качестве импортируемых объектов, чтобы приложение могло получать новые значения в реальном времени, и зададите минимальный интервал получения:
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.0.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.0.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 для Firebase AI Logic SDK инициализируйте 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).