使用 Gemini API 生成结构化输出


Gemini 默认会生成非结构化文本,但某些应用需要结构化文本。对于这些用例,您可以限制 Gemini 以 JSON 格式(一种适合自动处理的结构化数据格式)进行响应。您还可以限制模型使用枚举中指定的选项之一进行回答。

以下是可能需要模型提供结构化输出的几种用例:

  • 从报纸文章中提取公司信息,构建公司数据库。
  • 从简历中提取标准化信息。
  • 从食谱中提取食材,并为每种食材显示指向杂货网站的链接。

在问题中,您可以要求 Gemini 生成 JSON 格式的输出,但请注意,模型无法保证只会生成 JSON 格式的输出。如需获得更确定性的响应,您可以在 responseSchema 字段中传递特定的 JSON 架构,以便 Gemini 始终以预期结构响应。

本指南介绍了如何通过您选择的 SDK 使用 generateContent 方法生成 JSON,或直接使用 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"}]

通过模型配置提供架构

以下示例会执行以下操作:

  1. 通过架构实例化配置的模型,以 JSON 格式进行响应。
  2. 提示模型返回饼干食谱。
// 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"}]