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 呼び出しを更新して、アプリを更新しなくても、さまざまなモデルを切り替えたり、システム指示を変更したりできるようにします。
  • パラメータをリモートで制御し、必要に応じてモデルの動作と機能を調整します。

前提条件

このガイドは、JavaScript を使用したウェブアプリ開発に精通していることを前提としています。このガイドはフレームワークに依存していません。始める前に、以下が完了していることを確認してください。

  • 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 コンソールを開き、ナビゲーション メニューから [実行] を開いて、Remote Config を選択します。
  2. Remote Config ページの上部にある [クライアント/サーバー] セレクタで [クライアント] が選択されていることを確認します。
    • Remote Config クライアント テンプレートを初めて使用する場合は、[構成を作成] をクリックします。[最初のパラメータの作成] ペインが表示されます。
    • Remote Config テンプレートを使用するのが初めてでない場合は、[パラメータを追加] をクリックします。
  3. 次の Remote Config パラメータを定義します。

    パラメータ名 説明 デフォルト値
    model_name モデル名。コードで使用するモデル名の最新リストについては、使用可能なモデル名をご覧ください。 文字列 gemini-1.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 サービスを実行し、モデルにアクセスします。Google Analytics によって検出されたクライアントの位置情報に基づいて、このオプションを構成する条件を設定できます。 文字列 us-central1
  4. パラメータの追加が完了したら、[変更を公開] をクリックします。新しい Remote Config テンプレートでない場合は、変更内容を確認し、もう一度 [変更を公開] をクリックします。

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

Remote Config SDK を追加して初期化します。

  1. テキスト エディタでコードを開き、Remote Config をインポートします。

    import { getRemoteConfig } from 'firebase/remote-config';
    
  2. Firebase アプリが Vertex AI in Firebase SDK 用に初期化されたら、プライマリ関数内で Remote Config を初期化します。

      // Initialize Remote Config and get a reference to the service
      const remoteConfig = getRemoteConfig(app);
    
  3. 最小フェッチ間隔を設定します。この例では、デフォルトのフェッチ間隔は 3,600 秒ですが、開発中はコード内の最小フェッチ間隔を比較的短い値に設定することをおすすめします。

    remoteConfig.settings.minimumFetchIntervalMillis = 3600000;
    

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

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

この例では、モデル名、システム指示、ユーザー プロンプト、Vertex AI のロケーションのデフォルト値を手動で設定します。

// Set default Remote Config parameter values
remoteConfig.defaultConfig = {
  model_name: 'gemini-1.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: 'us-central1',
};

ステップ 4: 値をフェッチして有効にする

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

ステップ 5: Remote Config 値を使用するように Vertex AI 呼び出しを更新する

Remote Config が完全に構成されたので、コードを更新して、ハードコードされた値を Remote Config から取得した値に置き換えます。たとえば、Vertex AI in Firebase SDK で Gemini API を使ってみるで使用した例を使用している場合は、次のように更新します。

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Vertex AI service
// Optionally specify a location in which to run the service and access the model
const vertexAI = getVertexAI(firebaseApp, { location: vertexLocation });

// Initialize the generative model with a model that supports your use case
// Gemini 1.5 models are versatile and can be used with all API capabilities
const model = getGenerativeModel(vertexAI, {
  model: modelName,
  systemInstruction: systemInstruction
});

// Wrap in an async function so you can use await
async function run() {
  // Provide a prompt that contains text
  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);
}

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

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

次のステップ