Strukturierte Ausgabe mit der Gemini API generieren


Gemini generiert standardmäßig unstrukturierten Text, für einige Anwendungen ist jedoch strukturierter Text erforderlich. Für diese Anwendungsfälle können Sie Gemini dazu zwingen, mit JSON zu antworten, einem strukturierten Datenformat, das für die automatisierte Verarbeitung geeignet ist. Sie können das Modell auch so einschränken, dass es mit einer der in einem Enum angegebenen Optionen antwortet.

Hier sind einige Anwendungsfälle, für die eine strukturierte Ausgabe des Modells erforderlich sein kann:

  • Erstellen Sie eine Datenbank mit Unternehmen, indem Sie Unternehmensinformationen aus Zeitungsartikeln extrahieren.
  • Standardisierte Informationen aus Lebensläufen extrahieren
  • Zutaten aus Rezepten extrahieren und für jede Zutat einen Link zu einer Lebensmittelwebsite anzeigen

Sie können Gemini in Ihrem Prompt auffordern, eine JSON-formatierte Ausgabe zu erstellen. Es kann jedoch nicht garantiert werden, dass das Modell ausschließlich JSON-Daten zurückgibt. Für eine deterministischere Antwort kannst du ein bestimmtes JSON-Schema in einem responseSchema-Feld übergeben, damit Gemini immer mit einer erwarteten Struktur antwortet.

In diesem Leitfaden erfahren Sie, wie Sie JSON mit der Methode generateContent über das SDK Ihrer Wahl oder direkt über die REST API generieren. In den Beispielen ist nur Text zu sehen. Gemini kann jedoch auch JSON-Antworten auf multimodale Anfragen generieren, die Bilder, Videos und Audio enthalten.

Bevor Sie beginnen: Projekt und API-Schlüssel einrichten

Bevor Sie die Gemini API aufrufen können, müssen Sie Ihr Projekt einrichten und Ihren API-Schlüssel konfigurieren.

JSON generieren

Wenn das Modell für die Ausgabe von JSON konfiguriert ist, antwortet es auf jeden Prompt mit einer JSON-formatierten Ausgabe.

Sie können die Struktur der JSON-Antwort durch Angabe eines Schemas steuern. Es gibt zwei Möglichkeiten, dem Modell ein Schema zur Verfügung zu stellen:

  • Als Text in der Aufforderung
  • Als strukturiertes Schema, das über die Modellkonfiguration bereitgestellt wird

Beide Ansätze funktionieren sowohl in Gemini 1.5 Flash als auch in Gemini 1.5 Pro.

Schema als Text im Prompt angeben

Im folgenden Beispiel wird das Modell aufgefordert, Keksrezepte in einem bestimmten JSON-Format zurückzugeben.

Da das Modell die Formatspezifikation aus dem Text im Prompt erhält, haben Sie bei der Darstellung der Spezifikation etwas Spielraum. Jedes vernünftige Format zur Darstellung eines JSON-Schemas kann funktionieren.

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

const model = genAI.getGenerativeModel({
  model: "gemini-1.5-flash",
});

const prompt = `List a few popular cookie recipes using this JSON schema:

Recipe = {'recipeName': string}
Return: Array<Recipe>`;

const result = await model.generateContent(prompt);
console.log(result.response.text());

Die Ausgabe könnte in etwa so aussehen:

[{"recipeName": "Chocolate Chip Cookies"}, {"recipeName": "Oatmeal Raisin Cookies"}, {"recipeName": "Snickerdoodles"}, {"recipeName": "Sugar Cookies"}, {"recipeName": "Peanut Butter Cookies"}]

Schema über die Modellkonfiguration angeben

Im folgenden Beispiel geschieht Folgendes:

  1. Erzeugt ein Modell, das über ein Schema konfiguriert wurde, um mit JSON zu antworten.
  2. Das Modell wird aufgefordert, Keksrezepte zurückzugeben.
// Make sure to include these imports:
// import { GoogleGenerativeAI, SchemaType } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

const schema = {
  description: "List of recipes",
  type: SchemaType.ARRAY,
  items: {
    type: SchemaType.OBJECT,
    properties: {
      recipeName: {
        type: SchemaType.STRING,
        description: "Name of the recipe",
        nullable: false,
      },
    },
    required: ["recipeName"],
  },
};

const model = genAI.getGenerativeModel({
  model: "gemini-1.5-pro",
  generationConfig: {
    responseMimeType: "application/json",
    responseSchema: schema,
  },
});

const result = await model.generateContent(
  "List a few popular cookie recipes.",
);
console.log(result.response.text());

Die Ausgabe könnte in etwa so aussehen:

[{"recipeName": "Chocolate Chip Cookies"}, {"recipeName": "Oatmeal Raisin Cookies"}, {"recipeName": "Snickerdoodles"}, {"recipeName": "Sugar Cookies"}, {"recipeName": "Peanut Butter Cookies"}]