Gemini モデルは、デフォルトでレスポンスを構造化されていないテキストとして返します。 ただし、ユースケースによっては、JSON などの構造化テキストが必要になることがあります。たとえば、確立されたデータ スキーマを必要とする他のダウンストリーム タスクにレスポンスを使用する場合があります。
モデルの生成済み出力が常に特定のスキーマに準拠するようにするには、モデルのレスポンスのブループリントのように機能するスキーマを定義します。 これにより、後処理を減らしてモデルの出力からデータを直接抽出できます。
次に例を示します。
モデルのレスポンスが有効な JSON を生成し、指定した スキーマに準拠していることを確認します。
たとえば、モデルは、レシピ名、材料のリスト、手順を常に含むレシピの構造化エントリを生成できます。これにより、アプリの UI でこの情報を簡単に解析して表示できます。分類タスク中にモデルが応答する方法を制限します。
たとえば、モデルが生成するラベル(good、positive、negative、badなど、ばらつきがある可能性がある)ではなく、特定のラベルセット(positiveやnegativeなどの特定の列挙型セットなど)でテキストにアノテーションを付けることができます。
このページでは、ウェブアプリのハイブリッド エクスペリエンスで構造化出力(JSON や列挙型など)を生成する方法について説明します。
始める前に
ハイブリッド エクスペリエンスの構築の スタートガイドを完了していることを確認してください。
構造化出力の構成を設定する
構造化出力(JSON や列挙型など)の生成は、クラウドホスト型モデルとオンデバイス モデルの両方を使用した推論でサポートされています。
ハイブリッド推論では、
inCloudParams
と
onDeviceParams
の両方を使用して、構造化出力で応答するようにモデルを構成します。他のモードでは、該当する構成のみを使用します。
inCloudParamsの場合: 適切なresponseMimeType(application/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
}
}
});
// ...