Gerar saída estruturada para experiências híbridas em apps da Web


Por padrão, os modelos do Gemini retornam respostas como texto não estruturado. No entanto, alguns casos de uso exigem texto estruturado, como JSON. Por exemplo, você pode estar usando a resposta para outras tarefas downstream que exigem um esquema de dados estabelecido.

Para garantir que a saída gerada do modelo sempre siga um esquema específico, defina um esquema, que funciona como um modelo de respostas. Assim, é possível extrair dados diretamente da saída do modelo com menos pós-processamento.

Veja alguns exemplos:

  • Garantir que a resposta de um modelo gere um JSON válido e esteja em conformidade com o esquema fornecido.
    Por exemplo, o modelo pode gerar entradas estruturadas para receitas que sempre incluem o nome, a lista de ingredientes e as etapas. Assim, é mais fácil analisar e mostrar essas informações na interface do app.

  • Restringir a forma como um modelo pode responder durante tarefas de classificação.
    Por exemplo, você pode permitir que o modelo anote o texto com um conjunto específico de rótulos (por exemplo, um conjunto específico de enums como positive e negative), em vez de rótulos que o modelo produz (que podem ter um grau de variabilidade como good, positive, negative ou bad).

Nesta página, descrevemos como gerar saída estruturada (como JSON e enums) nas suas experiências híbridas para apps da Web.

Antes de começar

Conclua o guia para iniciantes sobre como criar experiências híbridas.

Definir a configuração para saída estruturada

A geração de saída estruturada (como JSON e enums) é compatível com a inferência usando modelos hospedados na nuvem e no dispositivo.

Para inferência híbrida, use inCloudParams e onDeviceParams para configurar o modelo e gerar uma saída estruturada. Para os outros modos, use apenas a configuração aplicável.

  • Para inCloudParams: especifique o responseMimeType adequado (por exemplo, application/json) e o responseSchema que você quer que o modelo use.

  • Para onDeviceParams: especifique o responseConstraint que você quer que o modelo use.

Saída JSON

O exemplo a seguir adapta o exemplo de saída JSON geral para acomodar a inferência híbrida (neste exemplo, 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
    }
  }
});

// ...

Saída de enumeração

O exemplo a seguir adapta o exemplo de saída de enumeração geral para acomodar a inferência híbrida (neste exemplo, 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
    }
  }
});

// ...