オンデバイス モデルとクラウド ホストモデルを使用してハイブリッド エクスペリエンスを構築する


Firebase AI Logic を使用してハイブリッド推論で AI を活用したアプリや機能を構築します。ハイブリッド推論では、利用可能な場合はオンデバイス モデルを使用して推論を実行し、利用できない場合はクラウド ホスト型モデルにシームレスにフォールバックできます。

このリリースでは、Firebase AI Logic クライアント SDK for Web を使用してハイブリッド推論を利用できます。デスクトップ版 Chrome ではオンデバイス推論がサポートされています。

コードサンプルに移動

推奨されるユースケースとサポートされている機能

推奨されるユースケース:

  • デバイス上のモデルを推論に使用すると、次のようなメリットがあります。

    • プライバシーの強化
    • ローカル コンテキスト
    • 推論は無料
    • オフライン機能
  • ハイブリッド機能を使用すると、次のメリットがあります。

    • デバイスモデルの提供状況に関係なく、オーディエンスの 100% にリーチ

オンデバイス推論でサポートされている機能:

  • 1 ターンのコンテンツ生成(ストリーミングと非ストリーミング)
  • テキストのみの入力からテキストを生成する
  • テキストと画像の入力からテキストを生成する(特に、JPEG と PNG の入力画像タイプ)
  • JSON や列挙型などの構造化出力の生成

始める

このガイドでは、Firebase AI Logic SDK for Web を使用してハイブリッド推論を実行する方法について説明します。

オンデバイス モデルを使用した推論では Chrome の Prompt API が使用されますが、クラウド ホスト型モデルを使用した推論では、選択した Gemini API プロバイダ(Gemini Developer API または Vertex AI Gemini API)が使用されます。

ステップ 1: オンデバイス推論用に Chrome と Prompt API を設定する

  1. 最新の Chrome Dev ビルドをダウンロードします。

    オンデバイス推論は、Chrome v138 以降で利用できます。

  2. 次のフラグを設定して、Chrome インスタンスの Prompt API を有効にします。

    • chrome://flags/#optimization-guide-on-device-model: [有効] に設定します。
    • chrome://flags/#prompt-api-for-gemini-nano: [有効] に設定します。

    詳しくは、Chrome のドキュメントで localhost で API を使用するをご覧ください。必要に応じて、Chrome の早期プレビュー プログラム(EPP)に参加してフィードバックを提供してください。

  3. 次のフラグを設定して、オンデバイスのマルチモーダル モデルを有効にします。

    • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input: [有効] に設定します。
  4. API をローカルで確認する:

    1. Chrome を再起動します。

    2. [デベロッパー ツール] > [コンソール] を開きます。

    3. 以下のコマンドを実行します。

      await LanguageModel.availability();
      
    4. 出力が availabledownloadingdownloadable であることを確認します。.

    5. 出力が downloadable の場合、await LanguageModel.create(); を実行してモデルのダウンロードを開始できます。そうでない場合、オンデバイス推論の最初のリクエストでバックグラウンドでモデルのダウンロードが開始されます。これには数分かかることがあります。

ステップ 2: Firebase プロジェクトを設定してアプリを Firebase に接続する

  1. Firebase コンソールにログインし、Firebase プロジェクトを選択します。

  2. Firebase コンソールで、[Firebase AI Logic] ページに移動します。

  3. [使ってみる] をクリックして、プロジェクトに必要な API とリソースを設定するガイド付きワークフローを開始します。

  4. Firebase AI Logic SDK で使用する「Gemini API」プロバイダを選択します。必要に応じて、後で他の API プロバイダを設定して使用できます。

    • Gemini Developer API - 課金は任意(無料の Spark 料金プランで利用可能)
      コンソールでは、必要な API が有効になり、プロジェクトに Gemini API キーが作成されます。
      この Gemini API キーをアプリのコードベースに追加しないでください詳細

      料金プランをアップグレードする場合は、後で請求を設定できます。

    • Vertex AI Gemini API - 課金システムが必要(従量課金制の Blaze 料金プランが必要)
      コンソールを使用すると、課金システムを設定したり、プロジェクトで必要な API を有効にしたりできます。

  5. コンソールのワークフローでプロンプトが表示されたら、画面上の指示に沿ってアプリを登録し、Firebase に接続します。

  6. このガイドの次のステップに進んで、SDK をアプリに追加します。

ステップ 3: SDK を追加する

Firebase ライブラリには、生成モデルを操作するための API へのアクセスが用意されています。このライブラリは、Firebase JavaScript SDK for Web の一部として含まれています。

  1. npm を使用して Firebase JS SDK for Web をインストールします。

    ハイブリッド機能は別の npm タグでリリースされているため、インストール コマンドに含めてください。

    npm install firebase@eap-ai-hybridinference
    
  2. アプリで Firebase を初期化します。

    import { initializeApp } from "firebase/app";
    
    // TODO(developer) Replace the following with your app's Firebase configuration
    // See: https://firebase.google.com/docs/web/learn-more#config-object
    const firebaseConfig = {
      // ...
    };
    
    // Initialize FirebaseApp
    const firebaseApp = initializeApp(firebaseConfig);
    

ステップ 4: サービスを初期化してモデル インスタンスを作成する

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

Gemini モデルにプロンプトを送信する前に、選択した API プロバイダのサービスを選択し、GenerativeModel インスタンスを作成します。

mode を次のいずれかに設定します。

  • prefer_on_device: オンデバイス モデルが使用可能な場合はオンデバイス モデルを使用するように、使用できない場合はクラウド ホスト型モデルにフォールバックするように SDK を構成します。

  • only_on_device: オンデバイス モデルを使用するか、例外をスローするように SDK を構成します。

  • only_in_cloud: オンデバイス モデルを絶対に使用しないように SDK を構成します。

prefer_on_device または only_in_cloud を使用する場合、デフォルトではクラウド ホスト型モデルは gemini-2.0-flash-lite ですが、デフォルトをオーバーライドできます。

import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

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

// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` instance
// Set the mode, for example to use on-device model when possible
const model = getGenerativeModel(ai, { mode: "prefer_on_device" });

モデルにプロンプト リクエストを送信する

このセクションでは、次のようなさまざまなタイプの入力を送信して、さまざまなタイプの出力を生成する方法の例を示します。

構造化出力(JSON や列挙型など)を生成する場合は、次の「テキストを生成する」サンプルのいずれかを使用し、さらに指定されたスキーマに従って応答するようにモデルを構成します。

テキストのみの入力からテキストを生成する

このサンプルを試す前に、このガイドのスタートガイドセクションを完了していることを確認してください。

generateContent() を使用すると、テキストを含むプロンプトからテキストを生成できます。

// Imports + initialization of FirebaseApp and backend service + creation of model instance

// Wrap in an async function so you can use await
async function run() {
  // Provide a prompt that contains text
  const prompt = "Write a story about a magic backpack."

  // To generate text output, call `generateContent` with the text input
  const result = await model.generateContent(prompt);

  const response = result.response;
  const text = response.text();
  console.log(text);
}

run();

テキストと画像(マルチモーダル)の入力からテキストを生成する

このサンプルを試す前に、このガイドのスタートガイドセクションを完了していることを確認してください。

generateContent() を使用すると、テキスト ファイルと画像ファイルを含むプロンプトからテキストを生成できます。各入力ファイルの mimeType とファイル自体を指定します。

オンデバイス推論でサポートされている入力画像の種類は、PNG と JPEG です。

// Imports + initialization of FirebaseApp and backend service + creation of model instance

// Converts a File object to a Part object.
async function fileToGenerativePart(file) {
  const base64EncodedDataPromise = new Promise((resolve) => {
    const reader = new FileReader();
    reader.onloadend = () => resolve(reader.result.split(',')[1]);
    reader.readAsDataURL(file);
  });
  return {
    inlineData: { data: await base64EncodedDataPromise, mimeType: file.type },
  };
}

async function run() {
  // Provide a text prompt to include with the image
  const prompt = "Write a poem about this picture:";

  const fileInputEl = document.querySelector("input[type=file]");
  const imagePart = await fileToGenerativePart(fileInputEl.files[0]);

  // To generate text output, call `generateContent` with the text and image
  const result = await model.generateContent([prompt, imagePart]);

  const response = result.response;
  const text = response.text();
  console.log(text);
}

run();

Google アシスタントの機能

上記の例に加えて、代替推論モードを使用するデフォルトのフォールバック モデルをオーバーライドするモデル構成を使用してレスポンスを制御することもできます。

代替の推論モードを使用する

上記の例では、prefer_on_device モードを使用して、オンデバイス モデルが使用可能な場合はオンデバイス モデルを使用するように、またはクラウド ホスト型モデルにフォールバックするように SDK を構成しました。SDK には、only_on_deviceonly_in_cloud の 2 つの推論モードが用意されています。

  • SDK がオンデバイス モデルのみを使用できるように、only_on_device モードを使用します。この構成では、オンデバイス モデルが使用できない場合、API はエラーをスローします。

    const model = getGenerativeModel(ai, { mode: "only_on_device" });
    
  • SDK がクラウド ホスト型モデルのみを使用できるように、only_in_cloud モードを使用します。

    const model = getGenerativeModel(ai, { mode: "only_in_cloud" });
    

デフォルトのフォールバック モデルをオーバーライドする

prefer_on_device モードを使用する場合、オンデバイス モデルを使用できない場合は、SDK はクラウド ホスト型モデルを使用するようにフォールバックします。デフォルトのフォールバック クラウド ホスト型モデルは gemini-2.0-flash-lite です。このクラウドでホストされるモデルは、only_in_cloud モードを使用する場合のデフォルトにもなります。

inCloudParams 構成オプションを使用して、別のデフォルトのクラウド ホスト型モデルを指定できます。

const model = getGenerativeModel(ai, {
  mode: 'prefer_on_device',
  inCloudParams: {
    model: "gemini-2.0-flash"
  }
});

サポートされている Gemini モデルのモデル名を確認する。

モデル構成を使用してレスポンスを制御する

モデルへの各リクエストで、モデル構成を送信して、モデルがレスポンスを生成する方法を制御できます。クラウド ホスト型モデルとオンデバイス モデルには、異なる構成オプションがあります。

この構成は、インスタンスの存続期間中維持されます。別の構成を使用する場合は、その構成を使用して新しい GenerativeModel インスタンスを作成します。

クラウドでホストされるモデルの構成を設定する

クラウド ホスト型 Gemini モデルを構成するには、inCloudParams オプションを使用します。使用可能なパラメータについて学習する。

const model = getGenerativeModel(ai, {
  mode: 'prefer_on_device',
  inCloudParams: {
    model: "gemini-2.0-flash"
    temperature: 0.8,
    topK: 10
  }
});

オンデバイス モデルの構成を設定する

オンデバイス モデルを使用した推論では、Chrome の Prompt API が使用されます。

オンデバイス モデルを構成するには、onDeviceParams オプションを使用します。使用可能なパラメータについて学習する。

const model = getGenerativeModel(ai, {
  mode: 'prefer_on_device',
  onDeviceParams: {
    createOptions: {
      temperature: 0.8,
      topK: 8
    }
  }
});

構造化出力の構成を設定する

クラウド ホスト型モデルとオンデバイス モデルの両方を使用して推論を行う場合、構造化出力(JSON や列挙型など)の生成がサポートされています。

ハイブリッド推論の場合は、inCloudParamsonDeviceParams の両方を使用して、構造化出力で応答するようにモデルを構成します。他のモードでは、該当する構成のみを使用します。

  • inCloudParams の場合: 適切な responseMimeType(この例では application/json)と、モデルで使用する responseSchema を指定します。

  • onDeviceParams の場合: モデルで使用する responseConstraint を指定します。

JSON 出力

次の例では、ハイブリッド推論用に一般的な JSON 出力例を変更しています。

import {
  getAI,
  getGenerativeModel,
  Schema
} from "firebase/ai";

const jsonSchema = Schema.object({
 properties: {
    characters: Schema.array({
      items: Schema.object({
        properties: {
          name: Schema.string(),
          accessory: Schema.string(),
          age: Schema.number(),
          species: Schema.string(),
        },
        optionalProperties: ["accessory"],
      }),
    }),
  }
});

const model = getGenerativeModel(ai, {
  mode: 'prefer_on_device',
  inCloudParams: {
    model: "gemini-2.0-flash"
    generationConfig: {
      responseMimeType: "application/json",
      responseSchema: jsonSchema
    },
  }
  onDeviceParams: {
    promptOptions: {
      responseConstraint: jsonSchema
    }
  }
});
列挙型の出力

上記と同じですが、ハイブリッド推論用に列挙型出力に関するドキュメントを適応させます。

// ...

const enumSchema = Schema.enumString({
  enum: ["drama", "comedy", "documentary"],
});

const model = getGenerativeModel(ai, {

// ...

    generationConfig: {
      responseMimeType: "text/x.enum",
      responseSchema: enumSchema
    },

// ...

デバイス上の推論でまだ利用できない機能

試験運用版のリリースであるため、Web SDK のすべての機能がデバイス上推論で使用できるわけではありません。次の機能はオンデバイス推論ではまだサポートされていません(ただし、通常はクラウドベースの推論で使用できます)。

  • JPEG や PNG 以外の画像ファイル入力形式からテキストを生成する

    • クラウド ホスト型モデルにフォールバックできますが、only_on_device モードではエラーがスローされます。
  • 音声、動画、ドキュメント(PDF など)の入力からテキストを生成する

    • クラウド ホスト型モデルにフォールバックできますが、only_on_device モードではエラーがスローされます。
  • Gemini モデルまたは Imagen モデルを使用して画像を生成する

    • クラウド ホスト型モデルにフォールバックできますが、only_on_device モードではエラーがスローされます。
  • マルチモーダル リクエストで URL を使用してファイルを提供する。ファイルは、オンデバイス モデルにインライン データとして提供する必要があります。

  • マルチターン チャット

    • クラウド ホスト型モデルにフォールバックできますが、only_on_device モードではエラーがスローされます。
  • Gemini Live API を使用した双方向ストリーミング

    • これは、クラウド ホスト型モデルの場合でもFirebase AI Logic クライアント SDK for Web ではサポートされていません。
  • 関数呼び出し

    • 近日提供予定
  • トークンのカウント

    • 常にエラーをスローします。カウントはクラウド ホスト型モデルとオンデバイス モデルで異なるため、直感的なフォールバックはありません。
  • オンデバイス推論用の Firebase コンソールの AI モニタリング。

    • クラウド ホスト型モデルを使用した推論は、Firebase AI Logic クライアント SDK for Web を使用した他の推論と同様にモニタリングできます。


Firebase AI Logic の使用感に関するフィードバックを送信する