Доступность моделей генеративного ИИ часто меняется: появляются новые, более совершенные модели, а старые, менее эффективные, отключаются.
Если вы обращаетесь к генеративным моделям ИИ напрямую из мобильного или веб-приложения с помощью 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 и нажмите Добавить.
Обновите код приложения, чтобы он ссылался на файл настроек по умолчанию:
// 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).