Genera resultados estructurados con la API de Gemini


Gemini genera texto no estructurado de forma predeterminada, pero algunas aplicaciones requieren texto estructurado. Para estos casos de uso, puedes restringir Gemini para que responda con JSON, un formato de datos estructurados adecuado para el procesamiento automatizado. También puedes restringir el modelo para que responda con una de las opciones especificadas en una enumeración.

Estos son algunos casos de uso que podrían requerir un resultado estructurado del modelo:

  • Crea una base de datos de empresas extrayendo información de los artículos de los periódicos.
  • Extraer información estandarizada de los currículums
  • Extraer ingredientes de las recetas y mostrar un vínculo a un sitio web de comestibles para cada ingrediente

En tu instrucción, puedes pedirle a Gemini que genere un resultado en formato JSON, pero ten en cuenta que no se garantiza que el modelo genere JSON y nada más. Para obtener una respuesta más determinista, puedes pasar un esquema JSON específico en un campo responseSchema para que Gemini siempre responda con una estructura esperada.

En esta guía, se muestra cómo generar JSON con el método generateContent a través del SDK que elijas o directamente con la API de REST. En los ejemplos, se muestra una entrada de solo texto, aunque Gemini también puede producir respuestas JSON a solicitudes multimodales que incluyen imágenes, videos y audio.

Antes de comenzar: Configura tu proyecto y clave de API

Antes de llamar a la API de Gemini, debes configurar tu proyecto y tu clave de API.

Generar JSON

Cuando el modelo está configurado para generar JSON, responde a cualquier instrucción con una salida en formato JSON.

Para controlar la estructura de la respuesta JSON, proporciona un esquema. Existen dos maneras de proporcionar un esquema al modelo:

  • Como texto en la instrucción
  • Como un esquema estructurado que se proporciona a través de la configuración del modelo

Ambos enfoques funcionan en Gemini 1.5 Flash y Gemini 1.5 Pro.

Proporciona un esquema como texto en la instrucción

En el siguiente ejemplo, se le solicita al modelo que devuelva recetas de galletas en un formato JSON específico.

Dado que el modelo obtiene la especificación de formato del texto de la instrucción, es posible que tengas cierta flexibilidad en la forma en que representas la especificación. Puede funcionar cualquier formato razonable para representar un esquema 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());

El resultado podría verse de la siguiente manera:

[{"recipeName": "Chocolate Chip Cookies"}, {"recipeName": "Oatmeal Raisin Cookies"}, {"recipeName": "Snickerdoodles"}, {"recipeName": "Sugar Cookies"}, {"recipeName": "Peanut Butter Cookies"}]

Proporciona un esquema a través de la configuración del modelo

En el siguiente ejemplo, se realiza lo siguiente:

  1. Crea una instancia de un modelo configurado a través de un esquema para responder con JSON.
  2. Le pide al modelo que devuelva recetas de galletas.
// 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());

El resultado podría verse de la siguiente manera:

[{"recipeName": "Chocolate Chip Cookies"}, {"recipeName": "Oatmeal Raisin Cookies"}, {"recipeName": "Snickerdoodles"}, {"recipeName": "Sugar Cookies"}, {"recipeName": "Peanut Butter Cookies"}]