Gemini 預設會產生非結構化文字,但部分應用程式需要結構化文字。針對這些用途,您可以限制 Gemini 以 JSON 回應,這是一種適合自動處理的結構化資料格式。您也可以限制模型,讓模型以列舉中指定的其中一個選項回應。
以下列舉幾個可能需要模型輸出結構化內容的用途:
- 從報紙文章中擷取公司資訊,建立公司資料庫。
- 從履歷中提取標準化資訊。
- 從食譜中擷取食材,並顯示每項食材的雜貨網站連結。
您可以在提示中要求 Gemini 產生 JSON 格式的輸出內容,但請注意,模型不保證會產生 JSON,而且只會產生 JSON。如要獲得更確定的回應,您可以在 responseSchema
欄位中傳遞特定 JSON 結構定義,讓 Gemini 一律以預期的結構回應。
本指南說明如何透過所選 SDK 使用 generateContent
方法,或直接使用 REST API 產生 JSON。範例顯示僅文字輸入內容,但 Gemini 也能針對包含圖片、影片和音訊的多模態要求產生 JSON 回應。
事前準備:設定專案和 API 金鑰
在呼叫 Gemini API 之前,您必須設定專案並設定 API 金鑰。
產生 JSON
當模型設為輸出 JSON 時,它會以 JSON 格式回應任何提示。
您可以提供結構定義來控制 JSON 回應的結構。您可以透過兩種方式向模型提供結構定義:
- 以提示中的文字形式顯示
- 透過模型設定提供的結構化結構定義
這兩種方法適用於 Gemini 1.5 Flash 和 Gemini 1.5 Pro。
在提示中以文字形式提供結構定義
以下範例會提示模型以特定 JSON 格式傳回餅乾食譜。
由於模型會從提示中的文字取得格式規格,您可以靈活呈現規格。任何適合用於呈現 JSON 結構定義的合理格式都適用。
// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({
model: "gemini-1.5-flash",
});
const prompt = `List a few popular cookie recipes using this JSON schema:
Recipe = {'recipeName': string}
Return: Array<Recipe>`;
const result = await model.generateContent(prompt);
console.log(result.response.text());
輸出內容可能如下所示:
[{"recipeName": "Chocolate Chip Cookies"}, {"recipeName": "Oatmeal Raisin Cookies"}, {"recipeName": "Snickerdoodles"}, {"recipeName": "Sugar Cookies"}, {"recipeName": "Peanut Butter Cookies"}]
透過模型設定提供結構定義
以下範例會執行下列操作:
- 以實例化方式建立透過結構定義設定的模型,以便以 JSON 回應。
- 提示模型傳回餅乾食譜。
// Make sure to include these imports:
// import { GoogleGenerativeAI, SchemaType } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const schema = {
description: "List of recipes",
type: SchemaType.ARRAY,
items: {
type: SchemaType.OBJECT,
properties: {
recipeName: {
type: SchemaType.STRING,
description: "Name of the recipe",
nullable: false,
},
},
required: ["recipeName"],
},
};
const model = genAI.getGenerativeModel({
model: "gemini-1.5-pro",
generationConfig: {
responseMimeType: "application/json",
responseSchema: schema,
},
});
const result = await model.generateContent(
"List a few popular cookie recipes.",
);
console.log(result.response.text());
輸出內容可能如下所示:
[{"recipeName": "Chocolate Chip Cookies"}, {"recipeName": "Oatmeal Raisin Cookies"}, {"recipeName": "Snickerdoodles"}, {"recipeName": "Sugar Cookies"}, {"recipeName": "Peanut Butter Cookies"}]