Actualiza de forma dinámica tu app de Firebase AI Logic con Firebase Remote Config

Cuando llamas a Gemini API desde tu app con un SDK de Firebase AI Logic, tu solicitud contiene una serie de parámetros que controlan las respuestas de la IA generativa. Por lo general, incluyen el nombre del modelo, la configuración de generación de modelos (tokens máximos, temperatura, etc.), la configuración de seguridad, las instrucciones del sistema y los datos de instrucciones.

En la mayoría de los casos, querrás cambiarlos según sea necesario o a pedido para una serie de situaciones:

  • Actualiza tu modelo de IA generativa sin lanzar una app nueva. Puedes actualizar a versiones de modelos más recientes y estables antes de que las versiones anteriores se retiren, cambiar a modelos de menor costo o mayor rendimiento según las necesidades y los atributos de tus usuarios, o implementar de forma condicional los modelos más recientes y mejores en segmentos de usuarios específicos (como verificadores beta).
  • Establece la ubicación desde la que accedes al modelo para que esté más cerca de tus usuarios.
  • Realiza pruebas A/B de diferentes instrucciones y mensajes del sistema y, luego, implementa de forma gradual los valores del experimento ganador para tus usuarios.
  • Usa marcas de función para ocultar o exponer rápidamente las funciones potenciadas por IA generativa en tu app.

Firebase Remote Config hace todo esto y mucho más, lo que te permite actualizar los valores de los parámetros según sea necesario y de forma condicional para instancias de apps que coincidan con las características que estableciste en Firebase console, sin lanzar una versión nueva de la app.

En esta guía de solución, se proporcionan casos de uso recomendados específicos y se describe cómo agregar Remote Config a tu app de IA generativa.

Ir a la implementación de código

¿Por qué usar Firebase Remote Config con tu app?

Firebase Remote Config te permite ajustar de forma dinámica el comportamiento de tu app sin necesidad de actualizarla. Esto es especialmente potente para las apps que usan IA generativa, en las que la iteración rápida y el ajuste fino son fundamentales.

Casos de uso esenciales para Remote Config con apps de IA generativa

Recomendamos usar Remote Config con Firebase AI Logic para los siguientes casos de uso esenciales:

  • Actualiza a la versión más reciente del modelo sin actualizar la app: Usa los parámetros de Remote Config para cambiar el nombre del modelo según sea necesario, de modo que puedas actualizar a la versión más reciente de tu modelo de Gemini preferido en cuanto esté disponible.

  • Actualiza las instrucciones del sistema y la configuración de seguridad sin actualizar la app: almacena las instrucciones del sistema y la configuración de seguridad dentro de los parámetros de Remote Config para asegurarte de poder cambiarlos a pedido si descubres problemas después de la implementación.

  • Reduce el riesgo y aplica la seguridad de la IA: Usa los lanzamientos de Remote Config para lanzar cambios de IA generativa de forma segura y gradual a tus usuarios de iOS y Android.

Casos de uso avanzados y recomendados para Remote Config con apps de IA generativa

Después de instrumentar tu app con Remote Config y Google Analytics, puedes explorar casos de uso avanzados:

  • Establece la ubicación según la ubicación del cliente: Usa condiciones de Remote Config para configurar la ubicación en la que accedes al modelo según la ubicación detectada del cliente.

  • Experimenta con diferentes modelos: Prueba y cambia rápidamente entre varios modelos de IA generativa, o incluso accede a diferentes modelos para diferentes segmentos de usuarios, para encontrar el que mejor se adapte a tu caso de uso específico.

  • Optimiza el rendimiento del modelo: Ajusta con precisión los parámetros del modelo, como el mensaje del sistema, la cantidad máxima de tokens de salida, la temperatura y otros parámetros de configuración.

  • Usa diferentes instrucciones del sistema, mensajes y configuraciones de modelos según los atributos del cliente: Cuando usas Remote Config con Google Analytics, puedes crear condiciones según los atributos del cliente o los públicos personalizados y configurar diferentes parámetros según estos atributos.

    Por ejemplo, si usas IA generativa para proporcionar asistencia técnica en tu app, te recomendamos que configures instrucciones del sistema específicas para la plataforma de la app para garantizar que se proporcionen instrucciones precisas a los usuarios de Android, iOS y la plataforma web.

  • Personaliza las experiencias para cada usuario: Usa la personalización de Remote Config con tus apps y juegos para dispositivos móviles para determinar automáticamente la configuración óptima de IA generativa para cada usuario.

  • Controla los costos: Ajusta de forma remota a qué modelos de IA generativa se llama, con qué frecuencia se usan y configura de forma dinámica los valores máximos de tokens de salida según los públicos de usuarios para reducir los costos innecesarios.

  • Optimiza la experiencia y los resultados de la app: Usa A/B Testing con Remote Config en tus apps y juegos para dispositivos móviles para probar los cambios en los parámetros de IA generativa en diferentes segmentos de usuarios y ver cómo afectan a las métricas clave, como la retención y los ingresos.

Cuando instrumentas tu app de IA generativa con Firebase Remote Config, puedes crear aplicaciones potenciadas por IA flexibles, seguras y rentables, a la vez que creas experiencias encantadoras para tus usuarios.

Agrega Firebase Remote Config a tu app

En esta guía de solución, usarás Firebase Remote Config para actualizar de forma dinámica los parámetros de tu app para Android que usan el SDK de Firebase AI Logic. Aprenderás a hacer lo siguiente:

  • Recupera y activa parámetros, como nombres de modelos e instrucciones del sistema, desde Firebase Remote Config.
  • Actualiza tus llamadas a Gemini API para usar los parámetros recuperados de forma dinámica, lo que te permite cambiar entre diferentes modelos o modificar las instrucciones del sistema sin actualizar la app.
  • Controla los parámetros de forma remota y ajusta el comportamiento y las capacidades del modelo según sea necesario.

Requisitos previos

En esta guía, se da por sentado que conoces el desarrollo de apps para tu plataforma.

Antes de comenzar, asegúrate de hacer lo siguiente:

  • Completa la guía de introducción de Firebase AI Logic, en la que se describe cómo configurar tu proyecto de Firebase, conectar tu app a Firebase, agregar el SDK, inicializar el servicio de backend para el proveedor de "Gemini API" que elijas y crear una instancia de modelo.

  • Habilita Google Analytics en tu proyecto de Firebase y agrega su SDK a tu app (obligatorio para la segmentación condicional, como configurar la ubicación a la que accedes al modelo según la ubicación del dispositivo cliente).

Paso 1: Configura los valores de los parámetros en Firebase console

Crea una plantilla de Remote Config del cliente y configura los parámetros y valores para recuperarlos y usarlos en la app.

  1. Abre tu proyecto de Firebase en la Firebase console. Luego, en el menú de navegación, expande Ejecutar y selecciona Remote Config.
  2. Asegúrate de que la opción Cliente esté seleccionada en el selector Cliente/Servidor que se encuentra en la parte superior de la página.
  3. Para iniciar una plantilla de cliente, haz clic en Crear configuración (o Agregar parámetro si ya usaste plantillas de cliente).
  4. Define los parámetros que deseas controlar con Remote Config. Por ejemplo:

    Nombre del parámetro Descripción Tipo Valor predeterminado
    model_name Nombre del modelo Consulta los nombres de modelos disponibles. String gemini-2.0-flash
    system_instructions Las instrucciones del sistema son como un "preámbulo" que agregas antes de que el modelo se exponga a otras instrucciones del usuario final para influir en su comportamiento. String You are a helpful assistant who knows everything there is to know about Firebase!
    prompt El mensaje predeterminado que se usará con tu función potenciada por IA generativa. String I am a developer who wants to know more about Firebase!
    vertex_location Solo se aplica si usas Vertex AI Gemini API.
    Controla la ubicación para acceder al modelo. Puedes establecer condiciones para configurar esta opción en función de la ubicación del cliente que detecta Google Analytics.
    String us-central1
  5. Cuando hayas terminado de agregar los parámetros, haz clic en Publicar cambios. Si esta no es una plantilla de Remote Config nueva, revisa los cambios y vuelve a hacer clic en Publicar cambios.

Paso 2: Agrega y, luego, inicializa Remote Config en tu app

Agrega la biblioteca Remote Config y configura Remote Config en tu app.

Swift

Como parte de la configuración de Firebase AI Logic, ya agregaste el SDK de Firebase a tu app, pero también deberás agregar Remote Config.

  1. En Xcode, con el proyecto abierto, navega a Archivo > Agregar dependencias de paquetes.

  2. Selecciona firebase-ios-sdk y, luego, haz clic en Agregar paquete.

  3. En el navegador de proyectos, selecciona tu app > Destinos > tu app.

  4. En la pestaña General, desplázate hasta Frameworks, bibliotecas y contenido incorporado.

  5. Haz clic en + y elige FirebaseRemoteConfig. Luego, haz clic en Agregar.

  6. Agrega la importación FirebaseRemoteConfig a tu código:

    import FirebaseRemoteConfig
    
  7. Dentro de la clase adecuada para tu app, inicializa Firebase y agrega Remote Config a la lógica principal de la aplicación.

    Aquí, incluirás Remote Config y el objeto de escucha en tiempo real de Remote Config como importaciones para que la app pueda recuperar valores nuevos en tiempo real y agregar un intervalo de recuperación mínimo:

    let remoteConfig = RemoteConfig.remoteConfig()
    let settings = RemoteConfigSettings()
    settings.minimumFetchInterval = 3600
    remoteConfig.configSettings = settings
    

    En la app de guía de inicio rápido, esto estaría dentro de VertexAISampleApp, dentro de la clase AppDelegate.

Kotlin

  1. Agrega la dependencia de Remote Config al archivo Gradle del módulo (nivel de app) (generalmente app/build.gradle.kts o app/build.gradle):

    dependencies {
        implementation(platform("com.google.firebase:firebase-bom:33.13.0"))
        implementation("com.google.firebase:firebase-ai")
        implementation("com.google.firebase:firebase-config")
        // ... other dependencies
    }
    
  2. Agrega Remote Config a la lógica principal de la aplicación. Aquí, inicializarás Remote Config y agregarás un intervalo de recuperación mínimo:

    val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig
    val configSettings = remoteConfigSettings {
    minimumFetchIntervalInSeconds = 3600
    }
    remoteConfig.setConfigSettingsAsync(configSettings)
    

Java

  1. Agrega la dependencia de Remote Config al archivo Gradle del módulo (nivel de app) (generalmente app/build.gradle.kts o app/build.gradle):

    dependencies {
        implementation(platform("com.google.firebase:firebase-bom:33.13.0"))
        implementation("com.google.firebase:firebase-ai")
        implementation("com.google.firebase:firebase-config")
        // ... other dependencies
    }
    
  2. Agrega Remote Config a la lógica principal de la aplicación. Aquí, inicializarás Remote Config y agregarás un intervalo de recuperación mínimo:

    FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
    mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
    

Web

  1. Abre tu código en un editor de texto y, luego, importa Remote Config:

    import { getRemoteConfig } from 'firebase/remote-config';
    
  2. Dentro de tu función principal y después de que se inicialice la app de Firebase para el SDK de Firebase AI Logic, inicializa Remote Config:

      // Initialize Remote Config and get a reference to the service
      const remoteConfig = getRemoteConfig(app);
    
  3. Establece un intervalo de recuperación mínimo:

    remoteConfig.settings.minimumFetchIntervalMillis = 3600000;
    

Dart

  1. Desde el directorio de tu proyecto de Flutter, instala y agrega Remote Config con el siguiente comando:

    flutter pub add firebase_remote_config
    
  2. Abre ./lib/main.dart y agrega la importación después de las otras importaciones que agregaste para admitir 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';
    
  3. Agrega las variables _modelName, _systemInstructions y _prompt a tu app para que podamos usarlas más adelante:

    late final String _modelName;
    late final String _systemInstructions;
    late final String _prompt;
    
  4. Obtén una instancia de objeto de Remote Config y establece el intervalo de recuperación mínimo para permitir actualizaciones frecuentes: Asegúrate de agregar esto después de que se inicialice Firebase.

      final remoteConfig = FirebaseRemoteConfig.instance;
      await remoteConfig.setConfigSettings(RemoteConfigSettings(
        fetchTimeout: const Duration(seconds: 3600),
        minimumFetchInterval: const Duration(seconds: 3600),
      ));
    

Unity

  1. Agrega Remote Config a tu proyecto de Unity siguiendo estas instrucciones.

  2. Obtén una instancia de objeto de Remote Config y establece el intervalo de recuperación mínimo para permitir actualizaciones frecuentes: Asegúrate de agregar esto después de que se inicialice Firebase.

    var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
    const int MillisecondsPerSecond = 1000;
    await remoteConfig.SetConfigSettingsAsync(new ConfigSettings() {
      FetchTimeoutInMilliseconds = 3600 * MillisecondsPerSecond,
      MinimumFetchIntervalInMilliseconds = 3600 * MillisecondsPerSecond
    });
    

Paso 3: Configura los valores de los parámetros en la app

Debes establecer los valores de los parámetros predeterminados en la app en el objeto Remote Config. Esto garantiza que tu app se comporte como se espera, incluso si no puede recuperar valores del servicio de Remote Config.

Swift

  1. En Firebase console, abre Remote Config.

  2. En la pestaña Parameters, abre el menú y selecciona Download default values.

  3. Cuando se solicite, habilita .plist para iOS y, luego, haz clic en Descargar archivo.

  4. Guarda el archivo en el directorio de tu aplicación.

    Si usas la app de ejemplo, guárdala en FirebaseVertexAI/Sample/VertexAISample.

  5. En Xcode, haz clic con el botón derecho en tu app y selecciona Agregar archivos.

    Si usas la muestra, haz clic con el botón derecho en VertexAISample y selecciona Agregar archivos a "VertexAISample".

  6. Selecciona remote_config_defaults.plist y, luego, haz clic en Agregar.

  7. Actualiza el código de tu app para hacer referencia al archivo de valores predeterminados:

    // Set default values
    remoteConfig.setDefaults(fromPlist: "remote_config_defaults")
    

Kotlin

  1. En Firebase console, abre Remote Config.

  2. En la pestaña Parameters, abre el menú y selecciona Download default values.

  3. Cuando se solicite, habilita .xml para Android y haz clic en Descargar archivo.

  4. Guarda el archivo en el directorio de recursos XML de tu app.

  5. Actualiza tu archivo de actividad principal para agregar los valores predeterminados después del configSettings que agregaste anteriormente:

    // Set default values.
    remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
    

Java

  1. En Firebase console, abre Remote Config.

  2. En la pestaña Parameters, abre el menú y selecciona Download default values.

  3. Cuando se solicite, habilita .xml para Android y haz clic en Descargar archivo.

  4. Guarda el archivo en el directorio de recursos XML de tu app.

  5. Actualiza tu archivo de actividad principal para agregar los valores predeterminados después del configSettings que agregaste anteriormente:

    // Set default values.
    mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
    

Web

Puedes establecer los valores predeterminados directamente en tu código:

// Set default Remote Config parameter values
remoteConfig.defaultConfig = {
  model_name: 'gemini-2.0-flash',
  system_instructions:
    'You are a helpful assistant who knows everything there is to know about Firebase!',
  prompt: 'I am a developer who wants to know more about Firebase!',
  vertex_location: 'us-central1',
};

Dart

Puedes establecer los valores predeterminados directamente en tu código:

remoteConfig.setDefaults(const {
  "model_name": "gemini-2.0-flash",
  "system_instructions": "You are a helpful assistant who knows everything there is to know about Firebase!",
  "prompt": "I am a developer who wants to know more about Firebase!",
  "vertex_location": "us-central1"
});

Unity

Puedes establecer los valores predeterminados directamente en tu código:

await remoteConfig.SetDefaultsAsync(
  new System.Collections.Generic.Dictionary<string, object>() {
    { "model_name", "gemini-2.0-flash" },
    { "system_instructions", "You are a helpful assistant who knows everything there is to know about Firebase!" },
    { "prompt", "I am a developer who wants to know more about Firebase!" },
    { "vertex_location", "us-central1" }
  }
);

Paso 4: Recupera y activa valores

Después de establecer los valores predeterminados, agrega lo siguiente para recuperar y activar valores.

Swift

// Fetch and activate Remote Config values
remoteConfig.fetchAndActivate { status, error in
  if let error = error {
    print("Error fetching Remote Config: \(error.localizedDescription)")
  }
}

Esto debería actualizar el objeto de Remote Config cada vez que se publique una nueva plantilla 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

  1. Agrega getValue y fetchAndActivate a tus importaciones:

    import { getValue, fetchAndActivate } from 'firebase/remote-config';
    
  2. Después del código que agregaste para configurar los valores predeterminados de Remote Config, recupera y activa la configuración, y, luego, asigna valores a las constantes modelName, systemInstructions, prompt y vertexLocation.

    // 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();
    const systemInstructions = getValue(remoteConfig, 'system_instructions').asString();
    const prompt = getValue(remoteConfig, 'prompt').asString();
    const vertexLocation = getValue(remoteConfig, 'vertex_location').asString();
    

Dart

// Fetch and activate Remote Config.
remoteConfig.fetchAndActivate();

// Assign Remote Config values.
String? _modelName = remoteConfig.getString("model_name");
String? _systemInstructions = remoteConfig.getString("system_instructions");
String? _prompt = remoteConfig.getString("prompt");
String? _vertexLocation = remoteConfig.getString("vertex_location");

Unity

// Fetch and activate Remote Config values.
await remoteConfig.FetchAndActivateAsync();

Paso 5: Agrega un objeto de escucha de Remote Config en tiempo real

Agrega un objeto de escucha de Remote Config en tiempo real a tu app para garantizar que los cambios que realices en la plantilla de Remote Config se propaguen al cliente en cuanto se actualicen.

El siguiente código actualiza el objeto de Remote Config cada vez que cambia el valor de un parámetro.

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

De manera opcional, también puedes configurar una acción dentro de la activación de 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

De manera opcional, también puedes configurar una acción dentro de la activación de 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

Los objetos de escucha Remote Config en tiempo real no son compatibles con las apps web.

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();
};

Paso 6: Actualiza las solicitudes de Gemini API para usar valores de Remote Config

Haz clic en tu proveedor de Gemini API para ver el contenido y el código específicos del proveedor en esta página.

Ahora que Remote Config está completamente configurado, actualiza tu código para reemplazar los valores hard-coded por valores provenientes de Remote Config.

Swift

// Initialize the Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
let ai = FirebaseAI.firebaseAI(backend: .googleAI())

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
let modelName = remoteConfig.configValue(forKey: "model_name").stringValue
let systemInstructions = remoteConfig.configValue(forKey: "system_instructions").stringValue

let model = ai.generativeModel(
  modelName: modelName,
  systemInstruction: ModelContent(role: "system", parts: systemInstructions)
)

// Provide a prompt that contains text
// The text in the prompt will be sourced from Remote Config
let userPrompt = remoteConfig.configValue(forKey: "prompt").stringValue

// To generate text output, call `generateContent` with the text input
let response = try await model.generateContent(userPrompt)
if let text = response.text {
  print(text)
}

Kotlin

// Initialize the Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
val ai = Firebase.ai(backend = GenerativeBackend.googleAI())

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
val model = ai.generativeModel(
  modelName = remoteConfig.getString("model_name"),
  systemInstruction = content { text(remoteConfig.getString("system_instructions")) }
)

// To generate text output, call `generateContent` with the text input
// The text in the prompt will be sourced from Remote Config
val response = model.generateContent(remoteConfig.getString("prompt"))
print(response.text)

Java

// Initialize the Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
FirebaseAI ai = FirebaseAI.getInstance(GenerativeBackend.googleAI());

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
GenerativeModel gm = ai.generativeModel(
        /* modelName */ remoteConfig.getString("model_name"),
        /* generationConfig (optional) */ null,
        /* safetySettings (optional) */ null,
        /* tools (optional) */ null,
        /* toolsConfig (optional) */ null,
        /* systemInstruction (optional) */ new Content.Builder().addText(
                remoteConfig.getString("system_instructions")).build(),
        /* requestOptions (optional) */ new RequestOptions()
);
GenerativeModelFutures model = GenerativeModelFutures.from(gm);

// Provide a prompt that contains text
// The text in the prompt will be sourced from Remote Config
Content userPrompt = new Content.Builder()
        .addText(remoteConfig.getString("prompt"))
        .build();

// To generate text output, call `generateContent` with the text input
ListenableFuture<GenerateContentResponse> response = model.generateContent(userPrompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
        System.out.println(resultText);
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

Web

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
const model = getGenerativeModel(ai, {
  model: modelName,
  systemInstruction: systemInstruction
});

// Wrap in an async function so you can use await
async function run() {
  // Provide a prompt that contains text
  // The text in the prompt will be sourced from Remote Config
  const userPrompt = prompt;

  // To generate text output, call `generateContent` with the text input
  const result = await model.generateContent(userPrompt);

  const response = result.response;
  const text = response.text();
  console.log(text);
}

Dart

// Initialize the Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
final ai = await FirebaseAI.googleAI();

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
final model =
      ai.generativeModel(
        model: _modelName,
        systemInstruction: Content.system(_systemInstructions),
      );

// Provide a prompt that contains text
// The text in the prompt will be sourced from Remote Config
final _userPrompt = [Content.text(_prompt)];

// To generate text output, call `generateContent` with the text input
final response = await model.generateContent(_userPrompt);
print(response.text);

Unity

// Initialize the Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
var modelName = remoteConfig.GetValue("model_name").StringValue;
var systemInstructions = remoteConfig.GetValue("system_instructions").StringValue;

var model = ai.GetGenerativeModel(
  modelName: modelName,
  systemInstruction: ModelContent.Text(systemInstructions)
);

// Provide a prompt that contains text
// The text in the prompt will be sourced from Remote Config
var userPrompt = remoteConfig.GetValue("prompt").StringValue;

// To generate text output, call `GenerateContentAsync` with the text input
var response = await model.GenerateContentAsync(userPrompt);
UnityEngine.Debug.Log(response.Text ?? "No text in response.");

Paso 7: Ejecuta la app

Compila y ejecuta la app, y verifica que funcione. Realiza cambios en la configuración desde la página Remote Config en Firebase console, publica los cambios y verifica el resultado.

Próximos pasos