Generowanie danych strukturalnych na potrzeby funkcji hybrydowych w aplikacjach internetowych

Gemini modele domyślnie zwracają odpowiedzi w postaci nieustrukturyzowanego tekstu. W niektórych przypadkach wymagany jest jednak tekst ustrukturyzowany, np. w formacie JSON. Możesz na przykład używać odpowiedzi do innych zadań, które wymagają ustalonego schematu danych.

Aby mieć pewność, że wygenerowane przez model dane wyjściowe zawsze będą zgodne z określonym schematem, możesz zdefiniować schemat, który będzie działać jak plan odpowiedzi modelu. Dzięki temu możesz bezpośrednio wyodrębniać dane z danych wyjściowych modelu, ograniczając potrzebę przetwarzania końcowego.

Oto przykłady:

  • Upewnij się, że odpowiedź modelu jest prawidłowym kodem JSON i jest zgodna z podanym schematem.
    Model może na przykład generować ustrukturyzowane wpisy dotyczące przepisów, które zawsze zawierają nazwę przepisu, listę składników i instrukcje. Dzięki temu możesz łatwiej analizować i wyświetlać te informacje w interfejsie aplikacji.

  • Ogranicz sposób, w jaki model może odpowiadać podczas zadań klasyfikacji.
    Możesz na przykład sprawić, że model będzie oznaczał tekst określonym zestawem etykiet (np. określonym zestawem wyliczeń, takich jak positive i negative), a nie etykietami generowanymi przez model (które mogą mieć pewien stopień zmienności, np. good, positive, negative lub bad).

Na tej stronie opisujemy, jak generować ustrukturyzowane dane wyjściowe (np. JSON i wyliczenia) w hybrydowych interfejsach aplikacji internetowych.

Zanim zaczniesz

Upewnij się, że masz za sobą przewodnik dla początkujących dotyczący tworzenia hybrydowych interfejsów.

Ustawianie konfiguracji ustrukturyzowanych danych wyjściowych

Generowanie ustrukturyzowanych danych wyjściowych (np. JSON i wyliczeń) jest obsługiwane w przypadku wnioskowania przy użyciu modeli hostowanych w chmurze i modeli na urządzeniu.

W przypadku wnioskowania hybrydowego użyj zarówno inCloudParams jak i onDeviceParams , aby skonfigurować model tak, aby odpowiadał ustrukturyzowanymi danymi wyjściowymi. W przypadku pozostałych trybów użyj tylko odpowiedniej konfiguracji.

  • W przypadku inCloudParams: określ odpowiedni responseMimeType (np. application/json) oraz responseSchema, którego ma używać model.

  • W przypadku onDeviceParams: określ responseConstraint, którego ma używać model.

Dane wyjściowe JSON

Ten przykład dostosowuje ogólny przykład danych wyjściowych JSON do wnioskowania hybrydowego (w tym przykładzie 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
    }
  }
});

// ...

Dane wyjściowe wyliczeń

Ten przykład dostosowuje ogólny przykład danych wyjściowych wyliczeń do wnioskowania hybrydowego (w tym przykładzie 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
    }
  }
});

// ...