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 w innych zadaniach, 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.
    Model może na przykład 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 adnotacji z określonym zestawem etykiet (np. określonym zestawem 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 wyjściowe w formacie strukturalnym (np. JSON i wyliczenia) w przypadku hybrydowych interfejsów aplikacji internetowych.

Zanim zaczniesz

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

Konfigurowanie uporządkowanych danych wyjściowych

Generowanie danych wyjściowych o strukturze (np. 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
    }
  }
});

// ...