Lorsque vous utilisez des modèles de prompts côté serveur, vous pouvez mettre à jour les valeurs dans un modèle donné sans publier de nouvelle version de votre application. Toutefois, comme toute modification apportée au modèle sera utilisée presque immédiatement par les requêtes de votre application, vous devez faire attention à ne pas apporter de modifications susceptibles de casser votre application ou d'entraîner des changements de comportement inattendus.
Par conséquent, si vous souhaitez apporter des modifications plus importantes ou les déployer progressivement, vous ne devez pas modifier le modèle utilisé dans le code de production.
Nous vous recommandons plutôt d'utiliser Firebase Remote Config pour contrôler la valeur de l'ID de modèle utilisé dans la requête adressée au modèle.
Firebase Remote Config vous permet de mettre à jour les valeurs des paramètres de votre application (comme l'ID de modèle) de manière dynamique et à distance depuis la console Firebase, sans avoir à publier une nouvelle version de votre application. Il dispose également de fonctionnalités et d'intégrations simplifiées pour déployer les modifications et effectuer des tests A/B.
Ce guide explique comment implémenter Remote Config dans votre application, en particulier pour contrôler l'ID de modèle utilisé dans votre application.
Étape 1 : Définissez la valeur du paramètre dans la console Firebase
Créez un modèle de client Remote Config et configurez un paramètre template_id
et sa valeur à extraire et à utiliser dans l'application.
Ouvrez votre projet Firebase dans la Firebase console. Ensuite, dans le menu de navigation, développez Exécuter et sélectionnez Remote Config.
Assurez-vous que Client est sélectionné dans le sélecteur Client/Serveur en haut de la page.
Démarrez un modèle de client en cliquant sur Créer une configuration (ou sur Ajouter un paramètre si vous avez déjà utilisé des modèles de client).
Définissez le paramètre
template_id:Nom du paramètre Description Type Valeur par défaut template_idID du modèle. Chaîne my-first-template-v1-0-0Après avoir ajouté ce paramètre, cliquez sur Publier les modifications. S'il ne s'agit pas d'un nouveau modèle Remote Config, examinez les modifications, puis cliquez à nouveau sur Publier les modifications.
Étape 2 : Ajoutez et initialisez Remote Config dans votre application
Ajoutez la bibliothèque Remote Config et configurez Remote Config dans votre application.
Swift
Dans le cadre de Firebase AI Logic configuration, vous avez déjà ajouté le SDK Firebase à votre application, mais vous devez également ajouter Remote Config.
Dans Xcode, une fois le projet ouvert, accédez à File > Add Package Dependencies (Fichier > Ajouter des dépendances de package).
Sélectionnez firebase-ios-sdk , puis cliquez sur Add package (Ajouter un package).
Dans le navigateur de projet, sélectionnez votre application > Targets (Cibles) > votre application.
Dans l'onglet General (Général), faites défiler la page jusqu'à Frameworks, Libraries, and Embedded Content (Frameworks, bibliothèques et contenu intégré).
Cliquez sur + , sélectionnez FirebaseRemoteConfig , puis cliquez sur Add (Ajouter).
Ajoutez l'importation
FirebaseRemoteConfigà votre code :import FirebaseRemoteConfigDans la classe appropriée pour votre application, initialisez Firebase et ajoutez Remote Config à la logique principale de votre application.
Ici, vous inclurez Remote Config et l' Remote Config écouteur en temps réel en tant qu'importations afin que l'application puisse extraire de nouvelles valeurs en temps réel, et vous ajouterez un intervalle minimal d'extraction :
let remoteConfig = RemoteConfig.remoteConfig() let settings = RemoteConfigSettings() settings.minimumFetchInterval = 3600 remoteConfig.configSettings = settings
Kotlin
Ajoutez la dépendance Remote Config au fichier Gradle (généralement
app/build.gradle.ktsouapp/build.gradle) de votre module (au niveau de l'application) :dependencies { implementation(platform("com.google.firebase:firebase-bom:34.13.0")) implementation("com.google.firebase:firebase-ai") implementation("com.google.firebase:firebase-config") // ... other dependencies }Ajoutez Remote Config à la logique principale de votre application. Ici, vous initialiserez Remote Config et ajouterez un intervalle minimal d'extraction :
val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig val configSettings = remoteConfigSettings { minimumFetchIntervalInSeconds = 3600 } remoteConfig.setConfigSettingsAsync(configSettings)
Java
Ajoutez la dépendance Remote Config au fichier Gradle (généralement
app/build.gradle.ktsouapp/build.gradle) de votre module (au niveau de l'application) :dependencies { implementation(platform("com.google.firebase:firebase-bom:34.13.0")) implementation("com.google.firebase:firebase-ai") implementation("com.google.firebase:firebase-config") // ... other dependencies }Ajoutez Remote Config à la logique principale de votre application. Ici, vous initialiserez Remote Config et ajouterez un intervalle minimal d'extraction :
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance(); FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder() .setMinimumFetchIntervalInSeconds(3600) .build(); mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
Web
Ouvrez votre code dans un éditeur de texte et importez Remote Config :
import { getRemoteConfig } from 'firebase/remote-config';Dans votre fonction principale et une fois l'application Firebase initialisée pour Firebase AI Logic SDK, initialisez Remote Config :
// Initialize Remote Config and get a reference to the service const remoteConfig = getRemoteConfig(app);Définissez un intervalle minimal d'extraction :
remoteConfig.settings.minimumFetchIntervalMillis = 3600000;
Dart
Dans le répertoire de votre projet Flutter, installez et ajoutez Remote Config à l'aide de la commande suivante :
flutter pub add firebase_remote_configOuvrez
./lib/main.dartet ajoutez l'importation après les autres importations que vous avez ajoutées pour prendre en charge Firebase AI Logic :import 'package:firebase_vertexai/firebase_ai.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_remote_config/firebase_remote_config.dart';Ajoutez la variable
_modelNameà votre application afin de pouvoir l'utiliser ultérieurement :late final String _modelName; late final String _systemInstructions; late final String _prompt;Extrayez l'instance d'objet Remote Config et définissez l'intervalle minimal d'extraction pour effectuer régulièrement des actualisations. Veillez à ajouter cette opération après l'initialisation de Firebase.
final remoteConfig = FirebaseRemoteConfig.instance; await remoteConfig.setConfigSettings(RemoteConfigSettings( fetchTimeout: const Duration(seconds: 3600), minimumFetchInterval: const Duration(seconds: 3600), ));
Unity
Ajoutez Remote Config à votre projet Unity en suivant ces instructions.
Extrayez l'instance d'objet Remote Config et définissez l'intervalle minimal d'extraction pour effectuer régulièrement des actualisations. Veillez à ajouter cette opération après l'initialisation de Firebase.
var remoteConfig = FirebaseRemoteConfig.DefaultInstance; const int MillisecondsPerSecond = 1000; await remoteConfig.SetConfigSettingsAsync(new ConfigSettings() { FetchTimeoutInMilliseconds = 3600 * MillisecondsPerSecond, MinimumFetchIntervalInMilliseconds = 3600 * MillisecondsPerSecond });
Étape 3 : Définissez la valeur du paramètre dans l'application
Vous devez définir des valeurs de paramètre par défaut dans l'application dans l'objet Remote Config. Cela permet de s'assurer que votre application se comporte comme prévu, même si elle ne peut pas extraire de valeurs du service Remote Config.
Swift
Dans la console Firebase, ouvrez Remote Config.
Dans l'onglet Parameters (Paramètres), ouvrez le Menu, puis sélectionnez Download default values (Télécharger les valeurs par défaut).
Lorsque vous y êtes invité, activez .plist for iOS (.plist pour iOS), puis cliquez sur Download file (Télécharger le fichier).
Enregistrez le fichier dans le répertoire de votre application.
Dans Xcode, effectuez un clic droit sur votre application, puis sélectionnez Add Files (Ajouter des fichiers).
Sélectionnez remote_config_defaults.plist, puis cliquez sur Add (Ajouter).
Mettez à jour le code de votre application pour faire référence au fichier par défaut :
// Set default values for Remote Config parameters. remoteConfig.setDefaults(fromPlist: "remote_config_defaults")
Kotlin
Dans la Firebase console, ouvrez Remote Config.
Dans l'onglet Parameters (Paramètres), ouvrez le Menu, puis sélectionnez Download default values(Télécharger les valeurs par défaut).
Lorsque vous y êtes invité, activez .xml for Android (.xml pour Android), puis cliquez sur Download file (Télécharger le fichier).
Enregistrez le fichier dans le répertoire des ressources XML de votre application.
Mettez à jour votre fichier d'activité principal pour ajouter les valeurs par défaut après le
configSettingsque vous avez ajouté précédemment :// Set default values for Remote Config parameters. remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
Java
Dans la console Firebase, ouvrez Remote Config.
Dans l'onglet Parameters (Paramètres), ouvrez le Menu, puis sélectionnez Download default values(Télécharger les valeurs par défaut).
Lorsque vous y êtes invité, activez .xml for Android (.xml pour Android), puis cliquez sur Download file (Télécharger le fichier).
Enregistrez le fichier dans le répertoire des ressources XML de votre application.
Mettez à jour votre fichier d'activité principal pour ajouter les valeurs par défaut après le
configSettingsque vous avez ajouté précédemment :// Set default values for Remote Config parameters. mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
Web
Vous pouvez définir la valeur par défaut du nom du modèle directement dans votre code :
// Set default values for Remote Config parameters.
remoteConfig.defaultConfig = {
template_id: 'my-first-template-v1-0-0',
};
Dart
Vous pouvez définir la valeur par défaut du nom du modèle directement dans votre code :
// Set default values for Remote Config parameters.
remoteConfig.setDefaults(const {
"template_id": "my-first-template-v1-0-0"
});
Unity
Vous pouvez définir la valeur par défaut du nom du modèle directement dans votre code :
// Set default values for Remote Config parameters.
await remoteConfig.SetDefaultsAsync(
new System.Collections.Generic.Dictionary<string, object>() {
{ "template_id", "my-first-template-v1-0-0" }
}
);
Étape 4 : Extrayez et activez la valeur
Après avoir défini la valeur par défaut du nom du modèle, ajoutez les éléments suivants pour extraire et activer les valeurs.
Swift
// Fetch and activate Remote Config values
remoteConfig.fetchAndActivate { status, error in
if let error = error {
print("Error fetching Remote Config: \(error.localizedDescription)")
}
}
Cela devrait mettre à jour l'objet Remote Config chaque fois qu'un nouveau Remote Config modèle est publié.
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
Ajoutez
getValueetfetchAndActivateà vos importations :import { getValue, fetchAndActivate } from 'firebase/remote-config';Recherchez le code dans lequel vous spécifiez la valeur par défaut du nom du modèle. Juste après ce bloc de code, ajoutez le code suivant pour extraire et activer la configuration, et attribuer la valeur extraite à la constante
templateID.// 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 templateID = getValue(remoteConfig, 'template_id').asString();
Dart
// Fetch and activate Remote Config.
remoteConfig.fetchAndActivate();
// Assign Remote Config values.
String? _templateID = remoteConfig.getString("template_id");
Unity
// Fetch and activate Remote Config values.
await remoteConfig.FetchAndActivateAsync();
Étape 5 : Ajoutez un écouteur Remote Config en temps réel
Ajoutez un écouteur Remote Configen temps réel à votre application pour vous assurer que les modifications que vous apportez au Remote Config modèle sont propagées au client dès qu'elles sont mises à jour.
Le code suivant met à jour l'objet Remote Config chaque fois qu'une valeur de paramètre change.
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
Vous pouvez également configurer une action dans l'activation 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
Vous pouvez également configurer une action dans l'activation 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();
};
Étape 6 : Mettez à jour les requêtes Gemini API pour utiliser la valeur Remote Config
|
Cliquez sur votre fournisseur Gemini API pour afficher le contenu spécifique au fournisseur et le code sur cette page. |
Maintenant que Remote Config est entièrement configuré, mettez à jour votre code pour remplacer les valeurs codées en dur par des valeurs provenant de Remote Config.
Swift
import FirebaseAI
let templateID = remoteConfig.configValue(forKey: "template_id").stringValue
let model = FirebaseAI.firebaseAI(backend: .googleAI()).templateGenerativeModel()
let customerName = "Jane"
// When making the `generateContent` call, source the template ID value from Remote Config
let response = try await model.generateContent(
templateID: templateID,
// Provide the values for any input variables required by your template.
inputs: [
"customerName": customerName
]
)
// ...
Kotlin
// ...
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).templateGenerativeModel()
val customerName = "Jane"
// When making the `generateContent` call, source the template ID value from Remote Config
val response = model.generateContent(
remoteConfig.getString("template_id"),
// Provide the values for any input variables required by your template.
mapOf(
"customerName" to customerName
)
)
val text = response.text
println(text)
Java
// ...
TemplateGenerativeModel ai = FirebaseAI.getInstance()
.templateGenerativeModel(null /* Request Options */);
TemplateGenerativeModelFutures model = TemplateGenerativeModelFutures.from(ai);
String customerName = "Jane";
// When making the `generateContent` call, source the template ID value from Remote Config
Future<GenerateContentResponse> response = model.generateContent(
remoteConfig.getString("template_id"),
// Provide the values for any input variables required by your template.
mapOf("customerName", customerName)
);
addCallback(response,
new FutureCallback<GenerateContentResponse>() {
public void onSuccess(GenerateContentResponse result) {
System.out.println(result.getText());
}
public void onFailure(Throwable t) {
reportError(t);
}
}
executor);
// ...
Web
// ...
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
const model = getTemplateGenerativeModel(ai);
const templateID = getValue(remoteConfig, 'template_id').asString();
const customerName = 'Jane';
// When making the `generateContent` call, source the template ID value from Remote Config
const result = await model.generateContent(
templateID,
// Provide the values for any input variables required by your template
{
customerName: customerName,
}
);
// ...
Dart
// ...
final model = FirebaseAI.googleAI().templateGenerativeModel();
final templateID = remoteConfig.getString("template_id");
final customerName = 'Jane';
// When making the `generateContent` call, source the template ID value from Remote Config
var response = await model.generateContent(
templateID,
// Provide the values for any input variables required by your template
inputs: {
'customerName': customerName,
},
);
// ...
Unity
// ...
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
var templateID = remoteConfig.GetValue("template_id").StringValue;
var model = ai.GetTemplateGenerativeModel();
var customerName = "Jane";
try
{
// When making the `generateContent` call, source the template ID value from Remote Config
var response = await model.GenerateContentAsync(
templateID,
// Provide the values for any input variables required by your template
new Dictionary<string, object>
{
{ "customerName", customerName },
}
);
Debug.Log($"Response Text: {response.Text}");
}
catch (Exception e)
{
Debug.LogError($"An error occurred: {e.Message}");
}
// ...
Étape 7 : Exécutez l'application
Créez et exécutez l'application, puis vérifiez qu'elle fonctionne. Apportez des modifications à votre configuration depuis la Remote Config page de la Firebase console, publiez les modifications et vérifiez le résultat.
Étapes suivantes
Découvrez comment implémenter d'autres cas d'utilisation pour Remote Config et Firebase AI Logic.
Pour les applications et les jeux mobiles :
Testez les modifications de votre modèle avec Remote Config et A/B Testing.
Déployez progressivement les modifications à l'aide des Remote Config déploiements (iOS+ et Android uniquement).
Utilisez la personnalisation Remote Config pour utiliser le machine learning afin de déterminer les meilleurs paramètres pour chaque utilisateur (iOS+, Android et Unity uniquement).