Membuat output terstruktur dengan Gemini API


Gemini menghasilkan teks tidak terstruktur secara default, tetapi beberapa aplikasi memerlukan teks terstruktur. Untuk kasus penggunaan ini, Anda dapat membatasi Gemini untuk merespons dengan JSON, format data terstruktur yang cocok untuk pemrosesan otomatis. Anda juga dapat membatasi model untuk merespons dengan salah satu opsi yang ditentukan dalam enum.

Berikut beberapa kasus penggunaan yang mungkin memerlukan output terstruktur dari model:

  • Buat database perusahaan dengan mengambil informasi perusahaan dari artikel surat kabar.
  • Mengambil informasi standar dari resume.
  • Mengekstrak bahan dari resep dan menampilkan link ke situs bahan belanja untuk setiap bahan.

Dalam perintah, Anda dapat meminta Gemini untuk menghasilkan output berformat JSON, tetapi perhatikan bahwa model tidak dijamin akan menghasilkan JSON dan tidak ada yang lain selain JSON. Untuk respons yang lebih deterministik, Anda dapat meneruskan skema JSON tertentu di kolom responseSchema sehingga Gemini selalu merespons dengan struktur yang diharapkan. Untuk mempelajari lebih lanjut cara menggunakan skema, lihat Selengkapnya tentang skema JSON.

Panduan ini menunjukkan cara membuat JSON menggunakan metode generateContent melalui SDK pilihan Anda atau menggunakan REST API secara langsung. Contoh ini menunjukkan input khusus teks, walaupun Gemini juga dapat menghasilkan respons JSON untuk permintaan multimodal yang menyertakan gambar, video, dan audio.

Sebelum memulai: Menyiapkan project dan kunci API

Sebelum memanggil Gemini API, Anda perlu menyiapkan project dan mengonfigurasi kunci API.

Mendapatkan dan mengamankan kunci API

Anda memerlukan kunci API untuk memanggil Gemini API. Jika Anda belum memilikinya, buat kunci di Google AI Studio.

Mendapatkan kunci API

Sebaiknya jangan memasukkan kunci API ke dalam sistem kontrol versi Anda.

Anda harus menggunakan secret store untuk kunci API, seperti Secret Manager Google Cloud.

Semua cuplikan dalam tutorial ini mengasumsikan bahwa Anda mengakses kunci API sebagai konstanta global.

Buat JSON

Saat dikonfigurasi untuk menghasilkan JSON, model akan merespons perintah apa pun dengan output berformat JSON.

Anda dapat mengontrol struktur respons JSON dengan memberikan skema. Ada dua cara untuk menyediakan skema ke model:

  • Sebagai teks dalam perintah
  • Sebagai skema terstruktur yang disediakan melalui konfigurasi model

Memberikan skema sebagai teks dalam perintah

Contoh berikut meminta model untuk menampilkan resep kue dalam format JSON tertentu.

Karena model mendapatkan spesifikasi format dari teks dalam perintah, Anda mungkin memiliki beberapa fleksibilitas dalam cara merepresentasikan spesifikasi. Format yang wajar untuk merepresentasikan skema JSON dapat berfungsi.

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

Output-nya mungkin terlihat seperti ini:

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

Menyediakan skema melalui konfigurasi model

Contoh berikut melakukan hal berikut:

  1. Membuat instance model yang dikonfigurasi melalui skema untuk merespons dengan JSON.
  2. Meminta model untuk menampilkan resep kue.

Metode yang lebih formal untuk mendeklarasikan skema JSON ini memberi Anda kontrol yang lebih tepat daripada hanya mengandalkan teks dalam perintah.

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

Output-nya mungkin terlihat seperti ini:

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

Selengkapnya tentang skema JSON

Saat mengonfigurasi model untuk menampilkan respons JSON, Anda dapat menggunakan objek Schema untuk menentukan bentuk data JSON. Schema mewakili subset tertentu dari objek Skema OpenAPI 3.0.

Berikut adalah representasi pseudo-JSON dari semua kolom 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 skema harus berupa salah satu Jenis Data OpenAPI. Hanya sebagian kolom yang valid untuk setiap Type. Daftar berikut memetakan setiap Type ke kolom yang valid untuk jenis tersebut:

  • string -> enum, format
  • integer -> format
  • number -> format
  • boolean
  • array -> minItems, maxItems, items
  • object -> properties, required, propertyOrdering, nullable

Berikut adalah beberapa contoh skema yang menunjukkan kombinasi jenis dan kolom yang valid:

{ "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"]
}

Untuk dokumentasi lengkap kolom Skema seperti yang digunakan di Gemini API, lihat Referensi skema.

Pengurutan properti

Saat Anda menggunakan skema JSON di Gemini API, urutan properti sangat penting. Secara default, API mengurutkan properti menurut abjad dan tidak mempertahankan urutan properti yang ditentukan (meskipun Google Gen AI SDK dapat mempertahankan urutan ini). Jika Anda memberikan contoh ke model dengan skema yang dikonfigurasi, dan urutan properti contoh tidak konsisten dengan urutan properti skema, output-nya mungkin tidak beraturan atau tidak terduga.

Untuk memastikan pengurutan properti yang konsisten dan dapat diprediksi, Anda dapat menggunakan kolom propertyOrdering[] opsional.

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

propertyOrdering[] – bukan kolom standar dalam spesifikasi OpenAPI – adalah array string yang digunakan untuk menentukan urutan properti dalam respons. Dengan menentukan urutan properti, lalu memberikan contoh dengan properti dalam urutan yang sama, Anda berpotensi meningkatkan kualitas hasil.