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

Vertex AI in Firebase 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 ConfigVertex AI in Firebase を使用することをおすすめします。

  • アプリを更新せずに最新のモデル バージョンにアップグレードする: 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 モデルとその使用頻度をリモートで調整し、ユーザー オーディエンスに基づいて出力トークンの最大値を動的に構成して、不要な費用を削減します。

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

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

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

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

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

前提条件

このガイドは、Xcode を使用して Apple プラットフォーム(iOS など)向けのアプリを開発することに精通していることを前提としています。始める前に、以下が完了していることを確認してください。

  • Vertex AI in Firebase SDK のスタートガイドの手順を完了してください。以下の手順をすべて完了していることを確認します。

    1. Blaze お支払いプランの使用や必要な API の有効化など、新規または既存の Firebase プロジェクトを設定します。
    2. アプリを Firebase に接続して、アプリの登録や Firebase 構成のアプリへの追加などを行います。
    3. SDK を追加し、アプリで Vertex AI サービスと生成モデルを初期化します。
  • プロジェクトで Google Analytics を有効にして、その SDK をアプリに追加します(クライアント デバイスの位置情報に基づいてサービスとモデルのロケーションを設定するなど、条件付きターゲティングに必要です)。

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

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

  1. Firebase コンソールで Firebase プロジェクトを開き、ナビゲーション メニューから [実行] を開いて、Remote Config を選択します。
  2. Remote Config ページの上部にある [クライアント/サーバー] セレクタで [クライアント] が選択されていることを確認します。
    • Remote Config クライアント テンプレートを初めて使用する場合は、[構成を作成] をクリックします。[最初のパラメータの作成] ペインが表示されます。
    • Remote Config テンプレートを使用するのが初めてでない場合は、[パラメータを追加] をクリックします。
  3. 次の 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 生成 AI 機能で使用するデフォルトのプロンプト。 文字列 I am a developer who wants to know more about Firebase!
    vertex_location 必要に応じてロケーションを制御して、Vertex AI サービスを実行し、モデルにアクセスします。Google Analytics によって検出されたクライアントの位置情報に基づいて、このオプションを構成する条件を設定できます。 文字列 us-central1
  4. パラメータの追加が完了したら、[変更を公開] をクリックします。新しい Remote Config テンプレートでない場合は、変更内容を確認し、もう一度 [変更を公開] をクリックします。

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

Remote Config の依存関係を追加し、アプリ内で Remote Config を設定します。Vertex AI in Firebase の設定の一環として、Firebase SDK はすでにアプリに追加されていますが、Remote Config も追加する必要があります。

  1. Xcode でプロジェクトを開き、[ファイル] > [パッケージの依存関係を追加] の順に移動します。
  2. [Firebase iOS SDK] を選択し、[パッケージを追加] をクリックします。
  3. プロジェクト ナビゲータで、ご使用のアプリ > [ターゲット] > ご使用のアプリを選択します。
  4. [全般] タブで、[フレームワーク、ライブラリ、埋め込みコンテンツ] までスクロールします。
  5. [+] をクリックして [FirebaseRemoteConfig] を選択し、[追加] をクリックします。
  6. コードに FirebaseRemoteConfig のインポートを追加します。

    import FirebaseRemoteConfig
    
  7. アプリの適切なクラス(サンプルアプリでは AppDelegate クラスの VertexAISampleApp 内にあります)で、Firebase を初期化し、メインのアプリケーション ロジックに Remote Config を追加します。

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

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

この例では、デフォルトのフェッチ間隔は 3,600 秒ですが、開発中はコード内の最小フェッチ間隔を比較的短い値に設定することをおすすめします。

ステップ 3: アプリ内のデフォルト パラメータ値を設定する

クライアント ネットワーク アクセスが中断された場合や、バックエンドに値が構成されていない場合でも、Remote Config バックエンドに接続する前にアプリが機能するように、Remote Config オブジェクトにアプリ内デフォルト パラメータ値を設定する必要があります。

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

ステップ 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 オブジェクトが更新されます。

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

これにより、新しい Remote Config テンプレートが公開されるたびに Remote Config オブジェクトが更新されます。

ステップ 6: Remote Config 値を Vertex AI 変数に割り当てる

Remote Config が完全に構成されたので、コードを更新して、ハードコードされた値を Remote Config から取得した値に置き換えます。

モデルとシステム プロンプトの値を保存する値を作成します。次のコードは、Remote Config から位置情報、モデル名、システム指示、ユーザー プロンプト、Vertex AI のロケーションを取得する方法を示しています。

// Initialize the Vertex AI service
// Optionally specify a location in which to run the service and access the model
let vertexLocation = remoteConfig.configValue(forKey: "vertex_location").stringValue
let vertex = VertexAI.vertexAI(location: vertexLocation)

// Initialize the generative model with a model that supports your use case
// Specify a model that supports system instructions, like a Gemini 1.5 model
let modelName = remoteConfig.configValue(forKey: "model_name").stringValue
let systemInstructions = remoteConfig.configValue(forKey: "system_instructions").stringValue

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

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

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

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

次のステップ