Gemini 模型預設會以非結構化文字的形式傳回回覆。 不過,部分用途需要結構化文字,例如 JSON。舉例來說,您可能會將回覆用於其他需要建立資料結構定義的下游工作。
為確保模型生成的輸出內容一律符合特定結構定義,您可以定義結構定義,做為模型回覆的藍圖。然後直接從模型輸出內容擷取資料,減少後續處理作業。
例如:
確保模型回覆會產生有效的 JSON,並符合您提供的結構定義。
舉例來說,模型可以為食譜生成結構化項目,其中一律包含食譜名稱、食材清單和步驟。這樣一來,您就能更輕鬆地在應用程式的 UI 中剖析及顯示這項資訊。限制模型在分類工作中的回應方式。
舉例來說,您可以讓模型使用一組特定標籤 (例如一組特定列舉,如positive和negative) 註解文字,而不是模型產生的標籤 (這類標籤可能具有某種程度的變異性,例如good、positive、negative或bad)。
本頁說明如何在網頁應用程式的混合式體驗中,產生結構化輸出內容 (例如 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
}
}
});
// ...