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. Puoi quindi estrarre direttamente i dati dall'output del modello con una post-elaborazione minore.

Ecco alcuni esempi:

  • Assicurati che la risposta di un modello produca un JSON valido e sia conforme allo schema che hai 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. In questo modo, potrai 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 chiedere al modello di annotare il testo con un insieme specifico di etichette (ad esempio, un insieme specifico di enumerazioni come positive e negative), anziché con etichette prodotte dal modello (che potrebbero avere un certo grado di variabilità come good, positive, negative o bad).

Questa pagina descrive come generare output strutturati (come JSON ed enumerazioni) nelle tue 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 enumerazioni) è supportata per l'inferenza utilizzando modelli ospitati sul cloud e sul dispositivo.

Per l'inferenza ibrida, utilizza sia inCloudParams sia onDeviceParams per configurare il modello in modo che risponda con un 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 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 di enumerazione 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
    }
  }
});

// ...