Genera output strutturato per esperienze ibride nelle app web


Per impostazione predefinita, i modelli Gemini restituiscono le risposte come testo non strutturato. Tuttavia, alcuni casi d'uso richiedono testo strutturato, come JSON. Ad esempio, potresti utilizzare la risposta per altre attività downstream che richiedono uno schema di dati stabilito.

Per assicurarti che l'output generato dal modello rispetti sempre uno schema specifico, puoi definire uno schema, che funziona come un progetto per le risposte del modello. Potrai quindi estrarre direttamente i dati dall'output del modello con una post-elaborazione ridotta.

Ecco alcuni esempi:

  • Assicurati che la risposta di un modello produca JSON valido e sia conforme allo schema fornito.
    Ad esempio, il modello può generare voci strutturate per le ricette che includono sempre il nome della ricetta, l'elenco degli ingredienti e i passaggi. Potrai quindi analizzare e visualizzare più facilmente queste informazioni nell'interfaccia utente della tua app.

  • Limita il modo in cui un modello può rispondere durante le attività di classificazione.
    Ad esempio, puoi fare in modo che il modello annoti il testo con un insieme specifico di etichette (ad esempio, un insieme specifico di enum come positive e negative), anziché con le etichette prodotte dal modello (che potrebbero avere un certo grado di variabilità come good, positive, negative o bad).

Questa pagina descrive come generare output strutturato (come JSON ed enum) nelle esperienze ibride per le app web.

Prima di iniziare

Assicurati di aver completato la guida introduttiva alla creazione di esperienze ibride.

Imposta la configurazione per l'output strutturato

La generazione di output strutturato (come JSON ed enum) è supportata per l'inferenza che utilizza sia modelli ospitati nel cloud sia modelli on-device.

Per l'inferenza ibrida, utilizza sia inCloudParams sia onDeviceParams per configurare il modello in modo che risponda con output strutturato. Per le altre modalità, utilizza solo la configurazione applicabile.

  • Per inCloudParams: specifica il responseMimeType appropriato (ad esempio, application/json) e il responseSchema che vuoi che il modello utilizzi.

  • Per onDeviceParams: specifica il responseConstraint che vuoi che il modello utilizzi.

Output JSON

L'esempio seguente adatta l' esempio di output JSON generale per adattarsi all'inferenza ibrida (in questo esempio, PREFER_ON_DEVICE):

import {
  getAI,
  getGenerativeModel,
  Schema
} from "firebase/ai";

const jsonSchema = Schema.object({
 properties: {
    characters: Schema.array({
      items: Schema.object({
        properties: {
          name: Schema.string(),
          accessory: Schema.string(),
          age: Schema.number(),
          species: Schema.string(),
        },
        optionalProperties: ["accessory"],
      }),
    }),
  }
});

const model = getGenerativeModel(ai, {
  mode: InferenceMode.PREFER_ON_DEVICE,
  inCloudParams: {
    generationConfig: {
      responseMimeType: "application/json",
      responseSchema: jsonSchema
    },
  }
  onDeviceParams: {
    promptOptions: {
      responseConstraint: jsonSchema
    }
  }
});

// ...

Output enum

L'esempio seguente adatta l'esempio di output enum generale per adattarsi all'inferenza ibrida (in questo esempio, PREFER_ON_DEVICE):

import {
  getAI,
  getGenerativeModel,
  Schema
} from "firebase/ai";

const enumSchema = Schema.enumString({
  enum: ["drama", "comedy", "documentary"],
});

const model = getGenerativeModel(ai, {
  mode: InferenceMode.PREFER_ON_DEVICE,
  inCloudParams: {
    generationConfig: {
      responseMimeType: "text/x.enum",
      responseSchema: enumSchema
    },
  }
  onDeviceParams: {
    promptOptions: {
      responseConstraint: enumSchema
    }
  }
});

// ...