Genera resultados estructurados para experiencias híbridas en apps web


De forma predeterminada, los modelos de Gemini devuelven respuestas como texto no estructurado. Sin embargo, algunos casos de uso requieren texto estructurado, como JSON. Por ejemplo, es posible que uses la respuesta para otras tareas posteriores que requieran un esquema de datos establecido.

Para garantizar que el resultado generado por el modelo siempre cumpla con un esquema específico, puedes definir un esquema, que funciona como un modelo para las respuestas del modelo. Luego, puedes extraer datos directamente del resultado del modelo con menos procesamiento posterior.

Estos son algunos ejemplos:

  • Garantizar que la respuesta de un modelo genere un JSON válido y cumpla con el esquema que proporcionaste
    Por ejemplo, el modelo puede generar entradas estructuradas para recetas que siempre incluyen el nombre de la receta, la lista de ingredientes y los pasos. Luego, puedes analizar y mostrar esta información con mayor facilidad en la IU de tu app.

  • Restringe la forma en que un modelo puede responder durante las tareas de clasificación.
    Por ejemplo, puedes hacer que el modelo anote texto con un conjunto específico de etiquetas (por ejemplo, un conjunto específico de enumeraciones como positive y negative), en lugar de etiquetas que produce el modelo (que podrían tener un grado de variabilidad como good, positive, negative o bad).

En esta página, se describe cómo generar resultados estructurados (como JSON y enumeraciones) en tus experiencias híbridas para apps web.

Antes de comenzar

Asegúrate de haber completado la guía de introducción para crear experiencias híbridas.

Cómo establecer la configuración para los resultados estructurados

La generación de resultados estructurados (como JSON y enumeraciones) se admite para la inferencia con modelos alojados en la nube y en el dispositivo.

Para la inferencia híbrida, usa inCloudParams y onDeviceParams para configurar el modelo de modo que responda con un resultado estructurado. Para los demás modos, usa solo la configuración aplicable.

  • Para inCloudParams: Especifica el responseMimeType adecuado (por ejemplo, application/json) y el responseSchema que deseas que use el modelo.

  • Para onDeviceParams: Especifica el responseConstraint que quieres que use el modelo.

Salida de JSON

En el siguiente ejemplo, se adapta el ejemplo general de salida en formato JSON para admitir la inferencia híbrida (en este ejemplo, 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
    }
  }
});

// ...

Salida de enumeración

En el siguiente ejemplo, se adapta el ejemplo general de salida de enumeración para admitir la inferencia híbrida (en este ejemplo, 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
    }
  }
});

// ...