Firebase Remote Config を使用して Firebase AI Logic アプリを動的に更新する

Firebase AI Logic SDK を使用してアプリから Gemini API を呼び出すと、生成 AI のレスポンスを制御するパラメータの数がリクエストに含まれます。通常、これらにはモデル名、モデル生成の構成(最大トークン数、温度など)、安全性設定、システム指示、プロンプト データが含まれます。

ほとんどの場合、これらは、さまざまなシナリオで、オンデマンドで、または必要に応じて変更する必要があります。

  • 新しいアプリをリリースせずに生成 AI モデルを更新します。以前のバージョンが廃止される前に、新しい安定したモデル バージョンにアップグレードできます。また、ユーザーのニーズと属性に基づいて、低コストまたは高パフォーマンスのモデルに切り替えたり、最新かつ最高のモデルを特定のユーザー セグメント(ベータ版テスターなど)に条件付きでデプロイしたりすることもできます。
  • モデルにアクセスするロケーションがユーザーに近い場所になるように設定します。
  • さまざまなシステム指示とプロンプトに A/B テストを実行し、優れたテスト値をユーザーに段階的に展開します。
  • フィーチャー トグルを使用して、アプリで生成 AI 機能をすばやく公開するか、非表示にします。

Firebase Remote Config は、このすべての機能を実行します。これにより、新しいバージョンのアプリをリリースしなくても、Firebase コンソールで設定した特性に一致するアプリ インスタンスに対して、必要に応じてパラメータ値の条件付き更新を実行できます。

このソリューション ガイドでは、推奨される具体的なユースケースと、生成 AI アプリに Remote Config を追加する方法について説明します。

コードの実装に移動

アプリで Firebase Remote Config を使用する理由

Firebase Remote Config を使用すると、アプリをアップデートしなくても、アプリの動作を動的に調整できます。この方法は、迅速な反復処理と微調整が重要になる、生成 AI を使用するアプリで特に便利です。

生成 AI アプリに不可欠な Remote Config のユースケース

次の不可欠なユースケースでは、Remote ConfigFirebase AI Logic を使用することをおすすめします。

  • アプリを更新せずに最新のモデル バージョンにアップグレードする: Remote Config パラメータを使用して必要に応じてモデル名を変更し、優先する Gemini モデルの最新バージョンが利用可能になり次第、アップグレードできるようにします。

  • アプリのアップデートなしでシステム指示と安全性の設定を更新する: システム指示と安全性の設定を Remote Config パラメータ内に保存し、デプロイ後に問題が見つかった場合にオンデマンドで変更できるようにします。

  • リスクを軽減し、AI の安全性を強化する: Remote Config のロールアウトを使用して、生成 AI の変更を iOS ユーザーと Android ユーザーに安全かつ段階的にリリースします。

Remote Config と生成 AI アプリを使用する場合におすすめの高度なユースケース

Remote ConfigGoogle Analytics でアプリを計測したら、高度なユースケースを確認してください。

  • クライアントの位置情報に基づいてロケーションを設定する: Remote Config の条件を使用して、クライアントで検出された位置情報に基づいてモデルにアクセスするロケーションを設定します。

  • さまざまなモデルを試す: さまざまな生成 AI モデルをすばやくテストして切り替えたり、さまざまなモデルをさまざまなユーザー セグメントにアクセスしたりして、特定のユースケースに最適なモデルを見つけることができます。

  • モデルのパフォーマンスを最適化する: システム プロンプト、最大出力トークン、温度などのモデル パラメータを微調整します。

  • クライアント属性に基づいてさまざまなシステム指示、プロンプト、モデル構成を使用する: Remote ConfigGoogle Analytics を使用すると、クライアント属性またはカスタム オーディエンスに基づいて条件を作成し、これらの属性に基づいてさまざまなパラメータを設定できます。

    たとえば、生成 AI を使用してアプリでテクニカル サポートを行っている場合は、アプリ プラットフォームに固有のシステム指示を設定して、Android、iOS、ウェブ プラットフォームのユーザーに正確な指示を提供できます。

  • ユーザーごとにエクスペリエンスをパーソナライズする: モバイルアプリやゲームで Remote Config パーソナライズを使用して、各ユーザーに最適な生成 AI 設定を自動的に決定します。

  • 費用を管理する: 呼び出される生成 AI モデルとその使用頻度をリモートで調整し、ユーザー オーディエンスに基づいて出力トークンの最大値を動的に構成して、不要な費用を削減します。

  • アプリ エクスペリエンスと結果を最適化する: モバイルアプリやゲームで A/B TestingRemote Config を使用して、さまざまなユーザー セグメントで生成 AI パラメータの変更をテストし、維持率や収益などの主要な指標に与える影響を確認します。

Firebase Remote Config で生成 AI アプリを計測することで、ユーザーに優れたエクスペリエンスを提供しながら、柔軟で安全、かつ費用対効果の高い AI 搭載アプリケーションを構築できます。

Firebase Remote Config をアプリに追加します。

このソリューション ガイドでは、Firebase Remote Config を使用して、Firebase AI Logic SDK を使用する Android アプリのパラメータを動的に更新します。ここでは以下について学びます。

  • モデル名やシステム指示などのパラメータを Firebase Remote Config からフェッチして、有効にします。
  • 動的に取得されたパラメータを使用するように Gemini API 呼び出しを更新して、アプリを更新しなくても、さまざまなモデルを切り替えたり、システム指示を変更したりできるようにします。
  • パラメータをリモートで制御し、必要に応じてモデルの動作と機能を調整します。

前提条件

このガイドは、ご利用のプラットフォーム向けのアプリ開発に精通していることを前提としています。

始める前に、次の操作を行ってください。

  • Firebase AI Logic スタートガイドに沿って、Firebase プロジェクトの設定、アプリと Firebase の接続、SDK の追加、選択した「Gemini API」プロバイダのバックエンド サービスの初期化、モデル インスタンスの作成を行います。

  • Firebase プロジェクトで Google Analytics を有効にして、その SDK をアプリに追加します(クライアント デバイスの位置情報に基づいてモデルにアクセスするロケーションを設定するなど、条件付きターゲティングに必要です)。

ステップ 1: Firebase コンソールでパラメータ値を設定する

クライアント Remote Config テンプレートを作成し、アプリでフェッチして使用するパラメータと値を構成します。

  1. Firebase コンソールで Firebase プロジェクトを開き、ナビゲーション メニューから [実行] を開いて、Remote Config を選択します。
  2. ページの上部にある [クライアント/サーバー] セレクタで [クライアント] が選択されていることを確認します。
  3. [構成を作成](または、以前にクライアント テンプレートを使用したことがある場合は [パラメータを追加])をクリックして、クライアント テンプレートを開始します。
  4. Remote Config で制御するパラメータを定義します。次に例を示します。

    パラメータ名 説明 タイプ デフォルト値
    model_name モデル名。使用可能なモデル名をご確認ください。 文字列 gemini-2.5-flash
    system_instructions システム指示は、エンドユーザーからの詳細な指示がモデルに伝達される前に追加する「前文」のようなもので、モデルの動作に影響を与えます。 文字列 You are a helpful assistant who knows everything there is to know about Firebase!
    prompt 生成 AI 機能で使用するデフォルトのプロンプト。 文字列 I am a developer who wants to know more about Firebase!
    vertex_location Vertex AI Gemini API を使用している場合にのみ適用されます。
    ロケーションを制御して、モデルにアクセスします。Google Analytics によって検出されたクライアントの位置情報に基づいて、このオプションを構成する条件を設定できます。
    文字列 global
  5. パラメータの追加が完了したら、[変更を公開] をクリックします。新しい Remote Config テンプレートでない場合は、変更内容を確認し、もう一度 [変更を公開] をクリックします。

ステップ 2: アプリに Remote Config を追加して初期化する

Remote Config ライブラリを追加し、アプリ内で Remote Config を設定します。

Swift

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 ConfigRemote Config リアルタイム リスナーをインポートとして追加することで、アプリが新しい値をリアルタイムでフェッチし、フェッチの最小間隔を追加できるようにします。

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

    クイックスタート アプリでは、これは、AppDelegate クラスの VertexAISampleApp 内にあります。

Kotlin

  1. モジュール(アプリレベル)の Gradle ファイル(通常は app/build.gradle.kts または app/build.gradle)に Remote Config 依存関係を追加します。

    dependencies {     implementation(platform("com.google.firebase:firebase-bom:34.1.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. モジュール(アプリレベル)の Gradle ファイル(通常は app/build.gradle.kts または app/build.gradle)に Remote Config 依存関係を追加します。

    dependencies {     implementation(platform("com.google.firebase:firebase-bom:34.1.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),   )); 

Unity

  1. 手順に沿って、Unity プロジェクトに Remote Config を追加します。

  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 コンソールで Remote Config を開きます。

  2. [Parameters] タブでメニューを開き、[デフォルト値をダウンロード] を選択します。

  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. [Parameters] タブでメニューを開き、[デフォルト値をダウンロード] を選択します。

  3. プロンプトが表示されたら、[.xml(Android 用)] を有効にして、[ファイルをダウンロード] をクリックします。

  4. ファイルをアプリの XML リソース ディレクトリに保存します。

  5. メイン アクティビティ ファイルを更新して、前に追加した configSettings の後にデフォルトを追加します。

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

Java

  1. Firebase コンソールで Remote Config を開きます。

  2. [Parameters] タブでメニューを開き、[デフォルト値をダウンロード] を選択します。

  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.5-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: 'global', }; 

Dart

デフォルト値はコード内で直接設定できます。

remoteConfig.setDefaults(const {   "model_name": "gemini-2.5-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": "global" }); 

Unity

デフォルト値はコード内で直接設定できます。

await remoteConfig.SetDefaultsAsync(   new System.Collections.Generic.Dictionary<string, object>() {     { "model_name", "gemini-2.5-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", "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. インポートに getValuefetchAndActivate を追加します。

    import { getValue, fetchAndActivate } from 'firebase/remote-config'; 
  2. デフォルトの Remote Config 値を構成するために追加したコードの後で、構成をフェッチして有効にし、modelNamesystemInstructionspromptvertexLocation の各定数に値を割り当てます。

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

ステップ 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

ウェブアプリでは、リアルタイム Remote Config リスナーはサポートされていません。

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: Remote Config 値を使用するように Gemini API リクエストを更新する

Gemini API プロバイダをクリックして、このページでプロバイダ固有のコンテンツとコードを表示します。

Remote Config が完全に構成されたので、コードを更新して、ハードコードされた値を 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."); 

ステップ 7: アプリを実行する

アプリをビルドして実行し、動作することを確認します。Firebase コンソールの Remote Config ページで構成を変更し、変更をパブリッシュして結果を確認します。

次のステップ