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

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

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

  • Обновите свою генеративную модель ИИ без выпуска нового приложения. Вы можете обновиться до более новых, стабильных версий модели до того, как более ранние версии будут выведены из эксплуатации, перейти на более дешевые или высокопроизводительные модели в зависимости от потребностей и характеристик ваших пользователей или условно развернуть новейшие и лучшие модели для определенных сегментов пользователей (например, бета-тестеров).
  • Укажите место доступа к модели, чтобы оно было ближе к вашим пользователям.
  • Проведите 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 для динамического обновления параметров в вашем приложении Android, которое использует Firebase AI Logic SDK. Вы узнаете, как:

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

Предпосылки

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

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

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

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

Шаг 1 : Установите значения параметров в консоли Firebase

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

  1. Откройте проект Firebase в консоли Firebase . Затем в меню навигации разверните Run и выберите Remote Config .
  2. Убедитесь, что в селекторе Клиент/Сервер в верхней части страницы выбрано значение Клиент .
  3. Запустите клиентский шаблон, нажав «Создать конфигурацию» (или «Добавить параметр», если вы ранее использовали клиентские шаблоны).
  4. Определите параметры, которыми вы хотите управлять с помощью Remote Config . Например:

    Имя параметра Описание Тип Значение по умолчанию
    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 Применимо только при использовании API Vertex AI Gemini .
    Управляйте местоположением для доступа к модели. Вы можете задать условия для настройки этой опции на основе местоположения клиента, обнаруженного Google Analytics .
    Нить us-central1
  5. Когда вы закончите добавлять параметры, нажмите Опубликовать изменения . Если это не новый шаблон Remote Config , просмотрите изменения и нажмите Опубликовать изменения еще раз.

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

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

Быстрый

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

  1. В Xcode, открыв проект, перейдите в Файл > Добавить зависимости пакета .

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

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

  4. На вкладке Общие прокрутите до раздела Фреймворки, Библиотеки и Встроенное содержимое .

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

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

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

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

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

    В приложении быстрого запуска это будет внутри VertexAISampleApp , в классе AppDelegate .

Kotlin

  1. Добавьте зависимость Remote Config в файл Gradle вашего модуля (уровня приложения) (обычно app/build.gradle.kts или 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. Добавьте 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:33.13.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 для Firebase AI Logic SDK инициализируйте 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_vertexai/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),
      ));
    

Единство

  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 .

Быстрый

  1. В консоли Firebase откройте Remote Config .

  2. На вкладке «Параметры» откройте меню и выберите «Загрузить значения по умолчанию» .

  3. При появлении запроса включите .plist для iOS , затем нажмите Загрузить файл .

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

    Если вы используете пример приложения, сохраните его в FirebaseVertexAI/Sample/VertexAISample .

  5. В Xcode щелкните правой кнопкой мыши по приложению и выберите «Добавить файлы».

    Если вы используете образец, щелкните правой кнопкой мыши VertexAISample и выберите Добавить файлы в «VertexAISample» .

  6. Выберите remote_config_defaults.plist , затем нажмите Добавить .

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

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

Kotlin

  1. В консоли Firebase откройте Remote Config .

  2. На вкладке «Параметры» откройте меню и выберите «Загрузить значения по умолчанию» .

  3. При появлении запроса включите .xml для Android , затем нажмите Загрузить файл .

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

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

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

Java

  1. В консоли Firebase откройте Remote Config .

  2. На вкладке «Параметры» откройте меню и выберите «Загрузить значения по умолчанию» .

  3. При появлении запроса включите .xml для Android , затем нажмите Загрузить файл .

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

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

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

Web

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

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

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

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

Единство

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

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

Шаг 4 : Извлечение и активация значений

После установки значений по умолчанию добавьте следующее для извлечения и активации значений.

Быстрый

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

Единство

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

Шаг 5 : Добавьте прослушиватель Remote Config в реальном времени

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

Следующий код обновляет объект Remote Config всякий раз, когда изменяется значение параметра.

Быстрый

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

Прослушиватели Remote Config в реальном времени не поддерживаются для веб-приложений.

Dart

// Add a real-time Remote Config listener
remoteConfig.onConfigUpdated.listen((event) async {
  await remoteConfig.activate();
});

Единство

// 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 : Обновите запросы API Gemini для использования значений Remote Config

Щелкните своего поставщика API Gemini , чтобы просмотреть специфичный для этого поставщика контент и код на этой странице.

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

Быстрый

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

Единство

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

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

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

Следующие шаги

  • Узнайте больше о Remote Config .

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

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

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

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

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