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 w formacie JSON, czyli uporządkowanych danych odpowiednich do automatycznego przetwarzania. 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, pobierając informacje o nich z artykułów prasowych.
  • wyodrębniać ze standardowych życiorysów informacje,
  • Wyodrębnianie składników z przepisów i wyświetlanie linku do strony internetowej 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ł zgodnie z oczekiwaną strukturą. Więcej informacji o pracy ze schematami znajdziesz w artykule Więcej informacji o schematach JSON.

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.

Więcej informacji o schematach JSON

Gdy skonfigurujesz model tak, aby zwracał odpowiedź w formacie JSON, możesz użyć obiektu Schema do zdefiniowania kształtu danych JSON. Obiekt Schema reprezentuje wybrany podzbiór obiektu schematu OpenAPI 3.0.

Oto reprezentacja w pseudo-formacie JSON wszystkich pól Schema:

{
  "type": enum (Type),
  "format": string,
  "description": string,
  "nullable": boolean,
  "enum": [
    string
  ],
  "maxItems": string,
  "minItems": string,
  "properties": {
    string: {
      object (Schema)
    },
    ...
  },
  "required": [
    string
  ],
  "propertyOrdering": [
    string
  ],
  "items": {
    object (Schema)
  }
}

Type schematu musi być jednym z typów danych OpenAPI. W przypadku każdego elementu Type prawidłowy jest tylko podzbiór pól. Na liście poniżej każdy typ Type jest powiązany z odpowiednimi polami:

  • string -> enum, format
  • integer -> format
  • number -> format
  • boolean
  • array -> minItems, maxItems, items
  • object -> właściwości, wymagane, propertyOrdering, nullable

Oto kilka przykładowych schematów z prawidłowymi kombinacjami typu i pola:

{ "type": "string", "enum": ["a", "b", "c"] }

{ "type": "string", "format": "date-time" }

{ "type": "integer", "format": "int64" }

{ "type": "number", "format": "double" }

{ "type": "boolean" }

{ "type": "array", "minItems": 3, "maxItems": 3, "items": { "type": ... } }

{ "type": "object",
  "properties": {
    "a": { "type": ... },
    "b": { "type": ... },
    "c": { "type": ... }
  },
  "nullable": true,
  "required": ["c"],
  "propertyOrdering": ["c", "b", "a"]
}

Pełną dokumentację pól schematu, które są używane w Gemini API, znajdziesz w dokumentacji schematu.

Sortowanie obiektów

Gdy pracujesz z schematami JSON w interfejsie Gemini API, ważna jest kolejność właściwości. Domyślnie interfejs API sortuje właściwości alfabetycznie i nie zachowuje kolejności, w jakiej są one zdefiniowane (chociaż pakiety SDK Google Gen AI mogą zachować tę kolejność). Jeśli przekazujesz modelowi przykłady z skonfigurowanym schematem, a kolejność właściwości przykładów nie jest zgodna z kolejnością właściwości schematu, wynik może być niejasny lub nieoczekiwany.

Aby zapewnić spójne i przewidywalne sortowanie właściwości, możesz użyć opcjonalnego pola propertyOrdering[].

"propertyOrdering": ["recipe_name", "ingredients"]

propertyOrdering[] – nie jest to standardowe pole w specyfikacji OpenAPI – to tablica ciągów znaków służąca do określania kolejności właściwości w odpowiedzi. Określając kolejność właściwości, a następnie podając przykłady z tymi właściwościami w tej samej kolejności, możesz potencjalnie poprawić jakość wyników.