Generowanie danych strukturalnych na potrzeby funkcji hybrydowych w aplikacjach internetowych


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

Aby mieć pewność, że wygenerowane dane wyjściowe modelu zawsze są zgodne z określonym schematem, możesz zdefiniować schemat, który działa jak plan odpowiedzi modelu. Dzięki temu możesz bezpośrednio wyodrębniać dane z wyników modelu, co wymaga mniej przetwarzania końcowego.

Oto przykłady:

  • Upewnij się, że odpowiedź modelu zawiera prawidłowy kod JSON i jest zgodna z podanym schematem.
    Na przykład model może generować uporządkowane wpisy dotyczące przepisów, które zawsze zawierają nazwę przepisu, listę składników i kroki. Dzięki temu możesz łatwiej analizować i wyświetlać te informacje w interfejsie aplikacji.

  • Ograniczanie sposobu, w jaki model może odpowiadać podczas zadań klasyfikacji.
    Możesz na przykład poprosić model o dodanie do tekstu określonego zestawu etykiet (np. określonego zestawu wyliczeń, takich jak positivenegative), a nie etykiet generowanych przez model (które mogą mieć pewien stopień zmienności, np. good, positive, negative lub bad).

Z tego artykułu dowiesz się, jak generować dane strukturalne (np. JSON i wyliczenia) w przypadku aplikacji hybrydowych.

Zanim zaczniesz

Upewnij się, że masz za sobą przewodnik po tworzeniu środowisk hybrydowych.

Konfigurowanie uporządkowanych danych wyjściowych

Generowanie danych wyjściowych o strukturze (takich jak JSON i wyliczenia) jest obsługiwane w przypadku wnioskowania z użyciem modeli hostowanych w chmurze i na urządzeniu.

W przypadku wnioskowania hybrydowego użyj obu tych elementów:inCloudParamsonDeviceParams, aby skonfigurować model tak, aby odpowiadał w formacie strukturalnym. W przypadku pozostałych trybów używaj tylko odpowiedniej konfiguracji.

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

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

Dane wyjściowe JSON

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

// ...

Wynik w formie wyliczenia

W tym przykładzie dostosowujemy ogólny przykład danych wyjściowych wyliczenia 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
    }
  }
});

// ...