Genera output strutturato con l'API Gemini


Per impostazione predefinita, Gemini genera testo non strutturato, ma alcune applicazioni richiedono testo strutturato. Per questi casi d'uso, puoi limitare Gemini a rispondere con JSON, un formato di dati strutturati adatto all'elaborazione automatica. Puoi anche limitare il modello a rispondere con una delle opzioni specificate in un enum.

Ecco alcuni casi d'uso che potrebbero richiedere un'uscita strutturata dal modello:

  • Crea un database di aziende estrapolando le informazioni dalle notizie dei giornali.
  • Estrai informazioni standardizzate dai curriculum.
  • Estrarre gli ingredienti dalle ricette e mostrare un link a un sito web di spesa per ciascun ingrediente.

Nel prompt, puoi chiedere a Gemini di produrre output in formato JSON, ma tieni presente che non è garantito che il modello produca solo JSON. Per una risposta più deterministica, puoi passare uno schema JSON specifico in un campo responseSchema in modo che Gemini risponda sempre con una struttura prevista.

Questa guida illustra come generare JSON utilizzando il metodo generateContent tramite l'SDK scelto o direttamente tramite l'API REST. Gli esempi mostrano input solo di testo, anche se Gemini può anche produrre risposte JSON a richieste multimodali che includono immagini, video e audio.

Prima di iniziare: configura il progetto e la chiave API

Prima di chiamare l'API Gemini, devi configurare il progetto e la chiave API.

Genera JSON

Quando il modello è configurato per generare output JSON, risponde a qualsiasi prompt con un output in formato JSON.

Puoi controllare la struttura della risposta JSON fornendo uno schema. Esistono due modi per fornire uno schema al modello:

  • Come testo nel prompt
  • Come schema strutturato fornito tramite la configurazione del modello

Entrambi gli approcci funzionano sia in Gemini 1.5 Flash che in Gemini 1.5 Pro.

Fornisci uno schema come testo nel prompt

Nel seguente esempio, il modello viene invitato a restituire le ricette dei biscotti in un formato JSON specifico.

Poiché il modello ottiene la specifica del formato dal testo nel prompt, potresti avere una certa flessibilità nella rappresentazione della specifica. Può essere utilizzato qualsiasi formato ragionevole per rappresentare uno schema 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());

L'output potrebbe avere il seguente aspetto:

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

Fornire uno schema tramite la configurazione del modello

L'esempio seguente esegue le seguenti operazioni:

  1. Consente di creare un'istanza di un modello configurato tramite uno schema per rispondere con JSON.
  2. Chiede al modello di restituire ricette per biscotti.
// 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());

L'output potrebbe avere il seguente aspetto:

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