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

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 ユーザーに安全かつ段階的にリリースします。

生成 AI アプリでの Remote Config の高度なユースケースと推奨されるユースケース

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 から取得した値に置き換えます。たとえば、Firebase SDK で Vertex AI を使用して 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 ページで構成を変更し、変更を公開して結果を確認します。

次のステップ