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

Cuando llamas a Gemini API desde tu app con un SDK de Vertex AI in Firebase, 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 den de baja, 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 con rapidez las funciones de 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 la consola de Firebase, 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 del 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 de Remote Config con apps de IA generativa

Recomendamos usar Remote Config con Vertex AI in Firebase 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 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 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 en los parámetros de Remote Config para asegurarte de que puedas 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 Remote Config para configurar la ubicación del 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 implementa diferentes modelos en diferentes segmentos de usuarios, para encontrar el que mejor se adapte a tu caso de uso específico.
  • Optimiza el rendimiento del modelo: Ajusta los parámetros del modelo, como la instrucción 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 configuración del modelo según los atributos del cliente: Cuando usas Remote Config con Google Analytics, puedes crear condiciones basadas en atributos del cliente o públicos personalizados y establecer parámetros diferentes en función de estos atributos.

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

  • Personaliza las experiencias para cada usuario: Usa la personalización de Remote Config 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 llaman y con qué frecuencia se usan, y configura de forma dinámica los valores máximos de tokens de salida en función del público de usuarios para reducir costos innecesarios.

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

Si 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 Vertex AI in Firebase. 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 Android Studio y que lo usas para desarrollar apps para plataformas de Android. Antes de comenzar, asegúrate de haber hecho lo siguiente:

  • Completa la guía de introducción del SDK de Vertex AI in Firebase. Asegúrate de haber hecho lo siguiente:

    1. Configura un proyecto de Firebase nuevo o existente, incluido el uso del plan de precios Blaze y la habilitación de las APIs requeridas.
    2. Conecta tu app a Firebase, lo que incluye registrarla y añadir la configuración de Firebase a la app.
    3. Agrega el SDK y, luego, inicializa el servicio de Vertex AI y el modelo generativo en tu app.
  • Habilita Google Analytics en tu proyecto y agrega su SDK a tu app (obligatorio para la segmentación condicional, como configurar la ubicación del servicio y del modelo según la ubicación del dispositivo cliente).

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

Crea una plantilla de cliente Remote Config y configura parámetros y valores para recuperar y usar en la app.

  1. Abre tu proyecto de Firebase en Firebase console y, en el menú de navegación, expande Ejecutar y selecciona Remote Config.
  2. Asegúrate de que Cliente esté seleccionado en el selector Cliente/Servidor que se encuentra en la parte superior de la página Remote Config.
    • Si es la primera vez que usas plantillas de cliente de Remote Config, haz clic en Crear configuración. Aparecerá el panel Crea tu primer parámetro.
    • Si no es la primera vez que usas plantillas de Remote Config, haz clic en Agregar parámetro.
  3. Define los siguientes parámetros de Remote Config:

    Nombre del parámetro Descripción Tipo Valor predeterminado
    model_name Nombre del modelo. Para obtener listas actualizadas de los nombres de modelos que puedes usar en tu código, consulta Nombres de modelos disponibles. String gemini-1.5-flash
    system_instructions Las instrucciones del sistema son como un “preámbulo” que agregas antes de que se exponga el modelo a cualquier otra instrucción del usuario final para influir en el comportamiento del modelo, según las necesidades y los casos de uso específicos. String You are a helpful assistant who knows everything there is to know about Firebase!
    prompt Mensaje predeterminado para usar con tu función de IA generativa. String I am a developer who wants to know more about Firebase!
    vertex_location De manera opcional, controla la ubicación para ejecutar el servicio Vertex AI y acceder a un modelo. Puedes establecer condiciones para configurar esta opción según la ubicación del cliente que detecte Google Analytics. String us-central1
  4. Cuando hayas terminado de agregar los parámetros, haz clic en Publicar cambios. Si esta no es una plantilla Remote Config nueva, revisa los cambios y vuelve a hacer clic en Publicar cambios.

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

Agrega dependencias Remote Config y configura Remote Config en tu app.

  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.6.0"))
        implementation("com.google.firebase:firebase-vertexai")
        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:

    Kotlin+KTX

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

    Java

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

En este ejemplo, el intervalo de recuperación predeterminado es de 3,600 segundos, pero recomendamos que establezcas un intervalo de recuperación mínimo relativamente bajo dentro de tu código durante el desarrollo.

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

Debes establecer los valores de 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 Remote Config.

  1. En Firebase console, abre Remote Config.
  2. En la p 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:

    Kotlin+KTX

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

    Java

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

Paso 4: Recupera y activa valores

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

Kotlin+KTX

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

Paso 5: Agrega un objeto de escucha 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 Remote Config cada vez que cambia el valor de un parámetro. De manera opcional, también puedes configurar una acción dentro de la activación de addOnCompleteListener:

Kotlin+KTX

      // 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

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

Paso 6: Asigna valores Remote Config a las variables Vertex AI

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

Reemplaza los valores codificados de la ubicación, el nombre del modelo, las instrucciones del sistema y la solicitud del usuario por los valores que provienen de Remote Config.

Kotlin+KTX

// Initialize FirebaseVertexAI instance
// Optionally specify a location in which to run the service and access the model
val vertexAI = Firebase.vertexAI(location = remoteConfig.getString("vertex_location"))

// Initialize the Vertex AI service and the generative model
// Specify a model that supports system instructions, like a Gemini 1.5 model
val generativeModel = Firebase.vertexAI.generativeModel(
  modelName = remoteConfig.getString("model_name"),
  systemInstruction = content { text(remoteConfig.getString("system_instructions")) }
)

// To generate text output, call generateContent with the text input
val response = generativeModel.generateContent(remoteConfig.getString("prompt"))
print(response.text)

Java

// Initialize FirebaseVertexAI instance
// Optionally specify a location in which to run the service and access the model
FirebaseVertexAI vertexAI = FirebaseVertexAI.getInstance(remoteConfig.getString("vertex_location"));

// Initialize the Vertex AI service and the generative model
// Specify a model that supports system instructions, like a Gemini 1.5 model
GenerativeModel gm = FirebaseVertexAI.getInstance().generativeModel(
  /* modelName */ remoteConfig.getString("model_name"),
  /* generationConfig (optional) */ null,
  /* safetySettings (optional) */ null,
  /* requestOptions (optional) */ new RequestOptions(),
  /* tools (optional) */ null,
  /* toolsConfig (optional) */ null,
  /* systemInstruction (optional) */ new Content.Builder().addText(remoteConfig.getString("system_instructions")).build()
);
GenerativeModelFutures model = GenerativeModelFutures.from(gm);

// Provide a prompt that contains text
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);

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