Gemini 默认会生成非结构化文本,但某些应用需要结构化文本。对于这些用例,您可以限制 Gemini 以 JSON 格式(一种适合自动处理的结构化数据格式)进行响应。您还可以限制模型使用枚举中指定的选项之一进行响应。
以下是可能需要模型提供结构化输出的几种用例:
- 从报纸文章中提取公司信息,构建公司数据库。
- 从简历中提取标准化信息。
- 从食谱中提取食材,并为每种食材显示指向杂货网站的链接。
在问题中,您可以要求 Gemini 生成 JSON 格式的输出,但请注意,模型无法保证只会生成 JSON 格式的输出。如需获得更确定性的响应,您可以在 responseSchema
字段中传递特定的 JSON 架构,以便 Gemini 始终以预期的结构响应。
本指南介绍了如何通过所选 SDK 或直接使用 REST API 使用 generateContent
方法生成 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"}]