Gemini API を使用して構造化された出力(JSON など)を生成する


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

モデルから生成される出力が常に特定のスキーマに従うようにするには、レスポンス スキーマを定義します。これは、モデル レスポンスのブループリントのように機能します。これにより、後処理を少なくして、モデルの出力から直接データを抽出できます。

次に例を示します。

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

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

このガイドでは、generateContent の呼び出しで responseSchema を指定して JSON 出力を生成する方法について説明します。テキストのみの入力に重点を置いていますが、Gemini は、画像、動画、音声を入力として含むマルチモーダル リクエストに対して構造化されたレスポンスを生成することもできます。

このページの下部には、列挙型の値を出力として生成する方法などのその他の例があります。構造化出力を生成する方法の他の例については、Google Cloud ドキュメントのスキーマとモデル レスポンスの例のリストをご覧ください。

始める前に

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

  1. 新規または既存の Firebase プロジェクトを設定します。Blaze 料金プランの使用や、必要な API の有効化も行えます。

  2. アプリを Firebase に接続します。アプリの登録や Firebase 構成のアプリへの追加などを行います。

  3. SDK を追加し、アプリで Vertex AI サービスと生成モデルを初期化します。

アプリを Firebase に接続し、SDK を追加して、Vertex AI サービスと生成モデルを初期化したら、Gemini API を呼び出す準備が整います。

ステップ 1: レスポンス スキーマを定義する

レスポンス スキーマを定義して、モデルの出力の構造、フィールド名、各フィールドの想定されるデータ型を指定します。

モデルがレスポンスを生成するときに、プロンプトのフィールド名とコンテキストが使用されます。意図を明確にするために、必要に応じて、明確な構造、明確なフィールド名、さらには説明を使用することをおすすめします。

レスポンス スキーマに関する考慮事項

レスポンス スキーマを作成する際は、次の点に注意してください。

  • レスポンス スキーマのサイズは、入力トークンの上限にカウントされます。

  • レスポンス スキーマ機能は、次のレスポンス MIME タイプをサポートしています。

    • application/json: レスポンス スキーマで定義されている JSON を出力します(構造化出力要件に役立ちます)。

    • text/x.enum: レスポンス スキーマで定義されている列挙型の値を出力します(分類タスクに役立ちます)。

  • レスポンス スキーマ機能は、次のスキーマ フィールドをサポートしています。

    enum
    items
    maxItems
    nullable
    properties
    required

    サポートされていないフィールドを使用しても、モデルはリクエストを処理できますが、そのフィールドは無視されます。上記のリストは、OpenAPI 3.0 スキーマ オブジェクトのサブセットであることに注意してください(Vertex AI スキーマ リファレンスをご覧ください)。

  • Vertex AI in Firebase SDK のデフォルトでは、optionalProperties 配列で省略可能と指定していない限り、すべてのフィールドは必須と見なされます。これらのオプション フィールドでは、モデルでフィールドに値を入力することも、フィールドをスキップすることもできます。

    これは Vertex AI Gemini API のデフォルトの動作とは逆です。

ステップ 2: レスポンス スキーマを含むプロンプトを送信して JSON を生成する

次の例は、構造化 JSON 出力を生成する方法を示しています。

構造化出力を生成するには、モデルの初期化時に、適切な responseMimeType(この例では application/json)と、モデルで使用する responseSchema を指定する必要があります。

responseSchema の使用は、Gemini 1.5 Pro と Gemini 1.5 Flash でサポートされています。

ユースケースとアプリに適した Gemini モデルと、必要に応じてロケーションを選択する方法を学習します。

その他の例

構造化出力の使用方法と生成方法に関するその他の例については、Google Cloud ドキュメントのスキーマとモデル レスポンスの例のリストをご覧ください。

列挙値を出力として生成する

次の例は、分類タスクにレスポンス スキーマを使用する方法を示しています。モデルは、説明に基づいて映画のジャンルを特定するように求められます。出力は、指定されたレスポンス スキーマで定義された値のリストからモデルが選択する 1 つの書式なしテキストの列挙値です。

この構造化分類タスクを実行するには、モデルの初期化時に、適切な responseMimeType(この例では text/x.enum)と、モデルで使用する responseSchema を指定する必要があります。

ユースケースとアプリに適した Gemini モデルと、必要に応じてロケーションを選択する方法を学びます。

コンテンツの生成を制御するその他のオプション

  • プロンプト設計の詳細を確認して、モデルにニーズ固有の出力を生成できるようにしてください。
  • モデル パラメータを構成して、モデルがレスポンスを生成する方法を制御します。これらのパラメータには、最大出力トークン、temperature、topK、topP などがあります。
  • 安全性設定を使用して、ヘイトスピーチや性的描写が露骨なコンテンツなど、有害と見なされる回答を受け取る可能性を調整します。
  • システム指示を設定して、モデルの動作を制御します。この機能は、エンドユーザーからのその後の指示にモデルを公開する前に追加する「前文」のようなものです。


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