Generowanie uporządkowanych danych wyjściowych za pomocą interfejsu Gemini API


Gemini domyślnie generuje tekst nieustrukturyzowany, ale niektóre aplikacje wymagają tekstu ustrukturyzowanego. W takich przypadkach możesz ograniczyć Gemini do odpowiadania za pomocą danych w formacie JSON, który jest formatem uporządkowanych danych odpowiednim do przetwarzania automatycznego. Możesz też ograniczyć model do odpowiadania jedną z opcji określonych w typie zbiorczym.

Oto kilka przypadków użycia, które mogą wymagać uporządkowanych danych wyjściowych z modelu:

  • Utwórz bazę danych firm, wyciągając informacje o nich z artykułów prasowych.
  • wyodrębniać ze standardowych życiorysów informacje,
  • wyodrębniać składniki z przepisów i wyświetlać link do strony sklepu spożywczego dla każdego składnika;

W promptzie możesz poprosić Gemini o wygenerowanie danych wyjściowych w formacie JSON, ale pamiętaj, że nie ma gwarancji, że model wygeneruje dane w tym formacie. Aby uzyskać bardziej deterministyczną odpowiedź, możesz przekazać konkretny schemat JSON w polu responseSchema, aby Gemini zawsze odpowiadał z oczekiwaną strukturą.

Z tego przewodnika dowiesz się, jak wygenerować plik JSON za pomocą metody generateContent w wybranym pakiecie SDK lub bezpośrednio za pomocą interfejsu API REST. Przykłady pokazują dane wejściowe w postaci samego tekstu, ale Gemini może też generować odpowiedzi w formacie JSON na potrzeby żądań multimodalnych, które obejmują obrazy, filmydźwięk.

Zanim zaczniesz: skonfiguruj projekt i klucz interfejsu API

Zanim wywołasz interfejs Gemini API, musisz skonfigurować projekt i klucz interfejsu API.

Wygeneruj kod JSON

Gdy model jest skonfigurowany tak, aby zwracać dane w formacie JSON, odpowiada na każdy prompt z danymi w tym formacie.

Możesz kontrolować strukturę odpowiedzi JSON, podając schemat. Schemat możesz podać modelowi na 2 sposoby:

  • Jako tekst w promptach
  • Jako uporządkowany schemat dostarczony w ramach konfiguracji modelu

Oba podejścia działają zarówno w przypadku Gemini 1.5 Flash, jak i Gemini 1.5 Pro.

Prześlij schemat jako tekst w promptach

W tym przykładzie model zwraca przepisy na ciasteczka w określonym formacie JSON.

Ponieważ model otrzymuje specyfikację formatu z tekstu w promptzie, możesz mieć pewną swobodę w sposobie jej przedstawienia. Możesz użyć dowolnego formatu, który umożliwia wyświetlanie schematu JSON.

// 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());

Dane wyjściowe mogą wyglądać tak:

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

Przekazywanie schematu w ramach konfiguracji modelu

Ten przykład wykonuje następujące czynności:

  1. Tworzy instancję modelu skonfigurowanego za pomocą schematu, aby zwracać odpowiedzi w formacie JSON.
  2. Prosimy o zwrócenie przepisów na ciasteczka.
// 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());

Dane wyjściowe mogą wyglądać tak:

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