Gemini API はデフォルトで非構造化テキストとしてレスポンスを返します。ただし、JSON などの構造化テキストが必要なユースケースもあります。たとえば、確立されたデータ スキーマを必要とする他のダウンストリーム タスクでレスポンスを使用している場合があります。
モデルの生成済み出力が常に特定のスキーマに準拠するようにするには、レスポンス スキーマを定義します。これは、モデルのレスポンスのブループリントのように機能します。その後、後処理を減らしてモデルの出力からデータを直接抽出できます。
次に例を示します。
モデルのレスポンスが有効な JSON を生成し、指定されたスキーマに準拠していることを確認します。
たとえば、このモデルは、レシピ名、材料のリスト、手順が常に含まれるレシピの構造化エントリを生成できます。これにより、この情報をより簡単に解析してアプリの UI に表示できます。分類タスク中にモデルが応答できる方法を制限する。
たとえば、モデルが生成したラベル(good
、positive
、negative
、bad
など、ある程度のばらつきがある可能性がある)ではなく、特定のラベルセット(positive
やnegative
などの特定の列挙型セットなど)でテキストにアノテーションを付けるようにモデルに指示できます。
このガイドでは、generateContent
の呼び出しで responseSchema
を指定して JSON 出力を生成する方法について説明します。テキストのみの入力に重点を置いていますが、Gemini は、画像、動画、音声を入力として含むマルチモーダル リクエストに対して構造化されたレスポンスを生成することもできます。
このページの下部には、列挙型の値を出力として生成する方法などのその他の例があります。構造化出力を生成する方法の追加例については、Google Cloud ドキュメントのスキーマとモデル レスポンスの例のリストをご覧ください。
始める前に
まだ行っていない場合は、Vertex AI in Firebase SDK のスタートガイドを完了してください。以下の手順をすべて完了していることを確認します。
Blaze お支払いプランの使用や必要な API の有効化など、新規または既存の Firebase プロジェクトを設定します。
アプリを Firebase に接続します。アプリの登録や Firebase 構成のアプリへの追加などを行います。
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 ドキュメントのスキーマとモデル レスポンスの例のリストをご覧ください。
列挙型の値を出力として生成する
次の例は、分類タスクにレスポンス スキーマを使用する方法を示しています。モデルは、説明に基づいて映画のジャンルを特定するように求められます。出力は、指定されたレスポンス スキーマで定義されている値のリストからモデルが選択したプレーンテキストの列挙型値です。
この構造化分類タスクを実行するには、モデルの初期化時に適切な responseMimeType
(この例では text/x.enum
)と、モデルで使用する responseSchema
を指定する必要があります。
ユースケースとアプリに適した Gemini モデルと、必要に応じてロケーションを選択する方法を学びます。
コンテンツ生成を制御するためのその他のオプション
- プロンプトの設計について学び、ニーズに固有の出力を生成するようにモデルに影響を与えましょう。
- モデル パラメータを構成して、モデルがレスポンスを生成する方法を制御します。これらのパラメータには、最大出力トークン、温度、topK、topP などがあります。
- 安全性設定を使用して、ヘイトスピーチや性的描写が露骨なコンテンツなど、有害と見なされる回答を受け取る可能性を調整します。
- システム指示を設定して、モデルの動作を制御します。この機能は、エンドユーザーからの詳細な手順を示すためにモデルに追加する「前文」のようなものです。
Vertex AI in Firebase の使用感に関するフィードバックを送信する