ウェブアプリのハイブリッド エクスペリエンスの構造化出力を生成する


Gemini モデルは、デフォルトでレスポンスを非構造化テキストとして返します。ただし、一部のユースケースでは、JSON などの構造化テキストが必要です。たとえば、確立されたデータ スキーマを必要とする他のダウンストリーム タスクでレスポンスを使用している場合があります。

モデルの生成済み出力が常に特定のスキーマに準拠するようにするには、モデルのレスポンスのブループリントのように機能するスキーマを定義します。これにより、後処理をあまり行わずにモデルの出力からデータを直接抽出できます。

次に例を示します。

  • モデルのレスポンスが有効な JSON を生成し、指定されたスキーマに準拠していることを確認します。
    たとえば、モデルは、レシピ名、材料リスト、手順を常に含むレシピの構造化されたエントリを生成できます。これにより、アプリの UI でこの情報をより簡単に解析して表示できます。

  • 分類タスク中にモデルが応答する方法を制限します。
    たとえば、モデルが生成するラベル(goodpositivenegativebad など、ある程度のばらつきがある可能性がある)ではなく、特定のラベルセット(positivenegative などの特定の列挙型セットなど)でテキストにアノテーションを付けるようにモデルを設定できます。

このページでは、ウェブアプリのハイブリッド エクスペリエンスで構造化された出力(JSON や列挙型など)を生成する方法について説明します。

始める前に

ハイブリッド エクスペリエンスの構築に関するスタートガイドを完了していることを確認します。

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

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

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

  • inCloudParams の場合: 適切な responseMimeTypeapplication/json など)と、モデルで使用する responseSchema を指定します。

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

JSON 出力

次の例では、一般的な JSON 出力の例を、ハイブリッド推論(この例では PREFER_ON_DEVICE)に対応するように変更しています。

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: InferenceMode.PREFER_ON_DEVICE,
  inCloudParams: {
    generationConfig: {
      responseMimeType: "application/json",
      responseSchema: jsonSchema
    },
  }
  onDeviceParams: {
    promptOptions: {
      responseConstraint: jsonSchema
    }
  }
});

// ...

列挙型の出力

次の例では、一般的な列挙型出力の例をハイブリッド推論(この例では PREFER_ON_DEVICE)に対応するように変更しています。

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

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

const model = getGenerativeModel(ai, {
  mode: InferenceMode.PREFER_ON_DEVICE,
  inCloudParams: {
    generationConfig: {
      responseMimeType: "text/x.enum",
      responseSchema: enumSchema
    },
  }
  onDeviceParams: {
    promptOptions: {
      responseConstraint: enumSchema
    }
  }
});

// ...