Как динамически обновлять приложение Firebase AI Logic с помощью Firebase Remote Config

При вызове Gemini API из приложения с помощью Firebase AI Logic SDK запрос содержит ряд параметров, которые управляют ответами генеративного искусственного интеллекта. Обычно это название модели, конфигурация генерации (например, максимальное количество выходных токенов), настройки безопасности, системные инструкции и данные запроса.

В большинстве случаев вы будете менять их по запросу или по мере необходимости в ряде сценариев:

  • Обновляйте модель генеративного ИИ без выпуска новой версии приложения. Вы можете перейти на более новую стабильную версию модели до того, как предыдущие версии будут отключены, выбрать более дешевую или производительную модель в зависимости от потребностей и характеристик пользователей или развернуть новейшие и лучшие модели для определенных сегментов пользователей (например, тестировщиков бета-версии).
  • Укажите местоположение, из которого вы получаете доступ к модели, чтобы оно было ближе к вашим пользователям.
  • Проведите A/B-тестирование разных системных инструкций и запросов, а затем постепенно внедрите наиболее эффективные варианты.
  • Используйте флаги функций, чтобы быстро показывать или скрывать функции на основе генеративного ИИ в приложении.

Firebase Remote Config позволяет делать все это и даже больше. Вы можете изменять значения параметров по мере необходимости и условно для экземпляров приложений, которые соответствуют заданным вами в консоли Firebase характеристикам, не выпуская новую версию приложения.

В этом руководстве по решению приводятся рекомендуемые варианты использования и описывается, как добавить Remote Config в приложение с генеративным ИИ.

Перейти к реализации с помощью кода

Зачем использовать Firebase Remote Config в приложении?

Firebase Remote Config позволяет динамически менять поведение приложения без выпуска обновлений. Это особенно важно для приложений, использующих генеративный искусственный интеллект, где критически важны быстрая итерация и точная настройка.

Основные варианты использования Remote Config с приложениями на основе генеративного ИИ

Мы рекомендуем использовать Remote Config с Firebase AI Logic в следующих случаях:

  • Переход на последнюю версию модели без обновления приложения. Используйте параметры Remote Config, чтобы при необходимости изменить название модели. Это позволит вам перейти на последнюю версию предпочитаемой модели Gemini, как только она станет доступна.

  • Обновляйте системные инструкции и настройки безопасности без обновления приложения. Храните системные инструкции и настройки безопасности в параметрах Remote Config, чтобы вы могли менять их по запросу, если обнаружите проблемы после развертывания.

  • Снижайте риски и обеспечивайте безопасность генеративного искусственного интеллекта. Используйте поэтапное внедрение Remote Config, чтобы безопасно и постепенно выпускать изменения генеративного искусственного интеллекта для пользователей iOS и Android.

Рекомендуемые и расширенные варианты использования Remote Config с приложениями на основе генеративного ИИ

После добавления в приложение Remote Config и Google Analytics вы можете изучить расширенные варианты использования:

  • Задать местоположение на основе местоположения клиента. Используйте условия Remote Config, чтобы задать местоположение, в котором вы получаете доступ к модели, на основе обнаруженного местоположения клиента.

  • Экспериментируйте с разными моделями. Быстро тестируйте и переключайтесь между разными моделями генеративного ИИ или даже используйте разные модели для разных сегментов пользователей, чтобы найти оптимальный вариант для вашего случая.

  • Оптимизировать эффективность модели. Настройте параметры модели, например системный запрос, максимальное количество токенов на выходе, температуру и другие настройки.

  • Используйте разные системные инструкции, запросы и конфигурации моделей на основе атрибутов клиента. При использовании Remote Config с Google Analytics можно создавать условия на основе атрибутов клиента или специальных аудиторий и задавать разные параметры на основе этих атрибутов.

    Например, если вы используете генеративный искусственный интеллект для технической поддержки в приложении, вы можете задать системные инструкции, относящиеся к платформе приложения, чтобы пользователи Android, iOS и веб-платформы получали точные инструкции.

  • Персонализируйте контент для каждого пользователя. Используйте Remote Config персонализацию в мобильных приложениях и играх, чтобы автоматически определять оптимальные настройки генеративного искусственного интеллекта для каждого пользователя.

  • Контролировать расходы. Удаленно настраивайте, какие модели генеративного ИИ используются, как часто они применяются и динамически задавайте максимальные значения токенов на основе аудитории пользователей, чтобы сократить ненужные расходы.

  • Оптимизируйте удобство использования приложения и результаты. Используйте A/B Testing с Remote Config в мобильных приложениях и играх, чтобы тестировать изменения параметров генеративного искусственного интеллекта в разных сегментах пользователей и оценивать их влияние на ключевые показатели, такие как удержание и доход.

Интегрировав Firebase Remote Config в свое приложение на основе генеративного ИИ, вы сможете создавать гибкие, безопасные и экономичные приложения на основе ИИ, которые будут радовать ваших пользователей.

Добавьте Firebase Remote Config в свое приложение

В этом руководстве по решению проблем вы будете использовать Firebase Remote Config, чтобы динамически обновлять параметры в приложении, в котором используется Firebase AI Logic SDK. Вы научитесь:

  • Получите и активируйте параметры, такие как названия моделей и системные инструкции, из Firebase Remote Config.
  • Измените вызовы Gemini API, чтобы использовать параметры, полученные динамически. Это позволит вам переключаться между разными моделями или изменять инструкции системы без обновления приложения.
  • Удаленно управляйте параметрами, настраивая поведение и возможности модели по мере необходимости.

Требования

В этом руководстве предполагается, что вы уже разрабатывали приложения для своей платформы.

Прежде чем начать, убедитесь, что вы выполнили следующие действия:

  • Выполните инструкции из краткого руководства по началу работы с Firebase AI Logic. В нем описано, как настроить проект Firebase, подключить приложение к Firebase, добавить SDK, инициализировать бэкенд-службу для выбранного поставщика (Gemini API) и создать экземпляр модели.

  • Включите Google Analytics в проекте Firebase и добавьте SDK в приложение. Это необходимо для условного таргетинга, например для настройки местоположения, из которого вы получаете доступ к модели, на основе местоположения клиентского устройства.

Шаг 1. Задайте значения параметров в консоли Firebase.

Создайте шаблон клиента Remote Config и настройте параметры и значения, которые будут извлекаться и использоваться в приложении.

  1. В консоли Firebase выберите DevOps & Engagement (DevOps и вовлечение) > Remote Config (Удаленная конфигурация).

  2. В раскрывающемся списке Клиент/Сервер в верхней части страницы выберите Клиент.

  3. Нажмите Создать конфигурацию (или Добавить параметр, если вы уже использовали шаблоны клиентов).

  4. Определите параметры, которыми вы хотите управлять с помощью Remote Config. Пример:

    Название параметра Описание Тип Значение по умолчанию
    model_name Название модели. Ознакомьтесь со списком доступных моделей. Строка gemini-3.8-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!
    agent_platform_location Применимо, только если используется Agent Platform Gemini API (formerly Vertex AI).
    Управляйте местоположением, чтобы получить доступ к модели. Вы можете задать условия, чтобы настроить этот параметр на основе местоположения клиента, определенного Google Analytics.
    Строка global
  5. Добавив параметры, нажмите Опубликовать изменения. Если это не новый шаблон Remote Config, проверьте изменения и снова нажмите Опубликовать изменения.

Шаг 2. Добавьте и инициализируйте Remote Config в приложении

Добавьте библиотеку Remote Config и настройте Remote Config в приложении.

Swift

При настройке Firebase AI Logic вы уже добавили Firebase SDK в приложение, но вам также нужно добавить Remote Config.

  1. Откройте проект в Xcode и перейдите в меню File (Файл) > Add Package Dependencies (Добавить зависимости пакетов).

  2. Выберите firebase-ios-sdk и нажмите Add package (Добавить пакет).

  3. В навигаторе проектов выберите приложение > Targets (Цели) > приложение.

  4. На вкладке General (Общие) прокрутите страницу до раздела Frameworks, Libraries, and Embedded Content (Фреймворки, библиотеки и встроенный контент).

  5. Нажмите +, выберите FirebaseRemoteConfig и нажмите Add (Добавить).

  6. Добавьте в код импорт FirebaseRemoteConfig:

    import FirebaseRemoteConfig
    
  7. В соответствующем классе приложения инициализируйте Firebase и добавьте Remote Config в основную логику приложения.

    Здесь вы добавите Remote Config и Remote Config real-time listener в качестве импортируемых элементов, чтобы приложение могло получать новые значения в реальном времени, и добавите минимальный интервал получения:

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

Kotlin

  1. Добавьте зависимость 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
    }
    
  2. Добавьте Remote Config в основную логику приложения. Здесь вы инициализируете Remote Config и добавите минимальный интервал получения:

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

Java

  1. Добавьте зависимость 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
    }
    
  2. Добавьте Remote Config в основную логику приложения. Здесь вы инициализируете Remote Config и добавите минимальный интервал получения:

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

Web

  1. Откройте код в текстовом редакторе и импортируйте Remote Config:

    import { getRemoteConfig } from 'firebase/remote-config';
    
  2. Внутри основной функции и после инициализации приложения Firebase для SDK Firebase AI Logic инициализируйте Remote Config:

      // Initialize Remote Config and get a reference to the service
      const remoteConfig = getRemoteConfig(app);
    
  3. Установите минимальный интервал получения данных:

    remoteConfig.settings.minimumFetchIntervalMillis = 3600000;
    

Dart

  1. В каталоге проекта Flutter установите и добавьте Remote Config с помощью следующей команды:

    flutter pub add firebase_remote_config
    
  2. Откройте ./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';
    
  3. Добавьте в приложение переменные _modelName, _systemInstructions и _prompt, чтобы использовать их в дальнейшем:

    late final String _modelName;
    late final String _systemInstructions;
    late final String _prompt;
    
  4. Получите экземпляр объекта Remote Config и задайте минимальный интервал получения, чтобы обеспечить возможность частых обновлений. Добавьте его после инициализации Firebase.

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

Unity

  1. Добавьте Remote Config в проект Unity, следуя этим инструкциям.

  2. Получите экземпляр объекта 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

  1. В консоли Firebase перейдите на страницу DevOps & Engagement (DevOps и вовлечение) > Remote Config (Удаленная конфигурация) > Parameters (Параметры).

  2. Откройте Меню и выберите Скачать значения по умолчанию.

  3. В появившемся окне включите параметр .plist для iOS и нажмите Скачать файл.

  4. Сохраните файл в каталоге приложения.

  5. В Xcode нажмите правой кнопкой мыши на приложение и выберите Add Files (Добавить файлы).

  6. Выберите remote_config_defaults.plist и нажмите Add (Добавить).

  7. Обновите код приложения, чтобы он ссылался на файл настроек по умолчанию:

    // Set default values for Remote Config parameters.
    remoteConfig.setDefaults(fromPlist: "remote_config_defaults")
    

Kotlin

  1. В консоли Firebase выберите DevOps & Engagement (DevOps и взаимодействие) > Remote Config (Удаленная настройка) > Parameters (Параметры).

  2. Откройте меню и выберите Скачать значения по умолчанию.

  3. В появившемся окне выберите .xml для Android и нажмите Скачать файл.

  4. Сохраните файл в каталоге XML-ресурсов приложения.

  5. Обновите основной файл activity, добавив значения по умолчанию после строки configSettings, которую вы добавили ранее:

    // Set default values for Remote Config parameters.
    remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
    

Java

  1. В консоли Firebase перейдите на страницу DevOps & Engagement (DevOps и вовлечение) > Remote Config (Удаленная конфигурация) > Parameters (Параметры).

  2. Откройте меню и выберите Скачать значения по умолчанию.

  3. В появившемся окне выберите .xml для Android и нажмите Скачать файл.

  4. Сохраните файл в каталоге XML-ресурсов приложения.

  5. Обновите основной файл 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',
  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!',
  agent_platform_location: 'global',
};

Dart

Вы можете задать значения по умолчанию непосредственно в коде:

// Set default values for Remote Config parameters.
remoteConfig.setDefaults(const {
  "model_name": "gemini-3.8-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!",
  "agent_platform_location": "global"
});

Unity

Вы можете задать значения по умолчанию непосредственно в коде:

// Set default values for Remote Config parameters.
await remoteConfig.SetDefaultsAsync(
  new System.Collections.Generic.Dictionary<string, object>() {
    { "model_name", "gemini-3.8-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!" },
    { "agent_platform_location", "global" }
  }
);

Шаг 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

  1. Добавьте getValue и fetchAndActivate в импорт:

    import { getValue, fetchAndActivate } from 'firebase/remote-config';
    
  2. Найдите код, в котором заданы значения по умолчанию для Remote Config. Сразу после этого блока кода добавьте следующий код, чтобы получить и активировать конфигурацию и присвоить значения константам modelName, systemInstructions, prompt и agentPlatformLocation.

    // 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 agentPlatformLocation = getValue(remoteConfig, 'agent_platform_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? _agentPlatformLocation = remoteConfig.getString("agent_platform_location");

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

// Initialize the Agent Platform Gemini API backend service (formerly Vertex AI).
// The location for where to access the model will be sourced from Remote Config
let agentPlatformLocation = remoteConfig.configValue(forKey: "agent_platform_location").stringValue
let ai = FirebaseAI.firebaseAI(backend: .agentPlatform(location: agentPlatformLocation))

// 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 Agent Platform Gemini API backend service (formerly Vertex AI).
// The location for where to access the model will be sourced from Remote Config
val ai = Firebase.ai(backend = GenerativeBackend.agentPlatform(location = remoteConfig.getString("agent_platform_location")))

// 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 Agent Platform Gemini API backend service (formerly Vertex AI).
// The location for where to access the model will be sourced from Remote Config
FirebaseAI ai = FirebaseAI.getInstance(
        GenerativeBackend.agentPlatform(remoteConfig.getString("agent_platform_location")));

// 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 Agent Platform Gemini API backend service (formerly Vertex AI).
// The location for where to access the model will be sourced from Remote Config
const ai = getAI(firebaseApp, { backend: new AgentPlatformBackend(agentPlatformLocation) });

// 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 Agent Platform Gemini API backend service (formerly Vertex AI).
// The location for where to access the model will be sourced from Remote Config
final ai = await FirebaseAI.agentPlatform(location: _agentPlatformLocation);

// 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 Agent Platform Gemini API backend service (formerly Vertex AI).
// The location for where to access the model will be sourced from Remote Config
var agentPlatformLocation = remoteConfig.GetValue("agent_platform_location").StringValue;
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.AgentPlatform(agentPlatformLocation));

// 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.");

Шаг 7. Запустите приложение

Соберите и запустите приложение, чтобы проверить, работает ли оно. Внесите изменения в конфигурацию на странице Remote Config в консоли Firebase, опубликуйте их и проверьте результат.

Дальнейшие действия

  • Подробнее о Remote Config…

  • Добавьте в код клиента Google Analytics, чтобы включить таргетинг.

  • Для мобильных приложений и игр:

    • Протестируйте разные настройки модели с помощью Remote Config и A/B Testing.

    • Постепенно выпускайте изменения параметров модели с помощью Remote Config развертываний (только для iOS+ и Android).

    • Используйте Remote Config персонализацию, чтобы с помощью машинного обучения определять оптимальные настройки для каждого пользователя (только для iOS+, Android и Unity).