Strukturierte Ausgabe für hybride Funktionen in Web-Apps generieren


Gemini Modelle geben standardmäßig Antworten als unstrukturierten Text zurück. Für einige Anwendungsfälle ist jedoch strukturierter Text wie JSON erforderlich. Beispielsweise können Sie die Antwort für andere nachgelagerte Aufgaben verwenden, die ein festgelegtes Datenschema erfordern.

Damit die generierte Ausgabe des Modells immer einem bestimmten Schema entspricht, können Sie ein Schema definieren, das wie eine Blaupause für Modellantworten funktioniert. Anschließend können Sie Daten direkt aus der Modellausgabe extrahieren, ohne dass eine umfangreiche Nachbearbeitung erforderlich ist.

Hier einige Beispiele:

  • Sorgen Sie dafür, dass die Antwort eines Modells gültiges JSON erzeugt und Ihrem angegebenen Schema entspricht.
    Das Modell kann beispielsweise strukturierte Einträge für Rezepte generieren, die immer den Rezeptnamen, eine Liste der Zutaten und die Schritte enthalten. Anschließend können Sie diese Informationen einfacher parsen und in der Benutzeroberfläche Ihrer App anzeigen.

  • Beschränken Sie, wie ein Modell bei Klassifizierungsaufgaben antworten kann.
    Sie können beispielsweise festlegen, dass das Modell Text mit einer bestimmten Reihe von Labels annotiert (z. B. eine bestimmte Reihe von Enums wie positive und negative) und nicht mit Labels, die das Modell selbst erstellt (die eine gewisse Variabilität aufweisen können, z. B. good, positive, negative oder bad).

Auf dieser Seite wird beschrieben, wie Sie strukturierte Ausgaben (z. B. JSON und Enums) in Ihren hybriden Erlebnissen für Web-Apps generieren.

Hinweis

Achten Sie darauf, dass Sie den Startleitfaden zum Erstellen hybrider Erlebnisse durchgearbeitet haben.

Konfiguration für strukturierte Ausgabe festlegen

Das Generieren strukturierter Ausgaben (z. B. JSON und Enums) wird für die Inferenz mit sowohl in der Cloud gehosteten als auch auf dem Gerät ausgeführten Modellen unterstützt.

Verwenden Sie für die hybride Inferenz sowohl inCloudParams als auch onDeviceParams , um das Modell so zu konfigurieren, dass es mit strukturierter Ausgabe antwortet. Verwenden Sie für die anderen Modi nur die entsprechende Konfiguration.

  • Für inCloudParams: Geben Sie den entsprechenden responseMimeType (z. B. application/json) sowie das responseSchema an, das das Modell verwenden soll.

  • Für onDeviceParams: Geben Sie die responseConstraint an, die das Modell verwenden soll.

JSON-Ausgabe

Im folgenden Beispiel wird das allgemeine Beispiel für die JSON-Ausgabe an die hybride Inferenz angepasst (in diesem Beispiel 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
    }
  }
});

// ...

Enum-Ausgabe

Im folgenden Beispiel wird das allgemeine Beispiel für die Enum-Ausgabe an die hybride Inferenz angepasst (in diesem Beispiel 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
    }
  }
});

// ...