Gemini API ile yapılandırılmış çıkış oluşturma


Gemini varsayılan olarak yapılandırılmamış metin oluşturur ancak bazı uygulamalar için yapılandırılmış metin gerekir. Bu kullanım alanları için Gemini'yi, otomatik işlemeye uygun bir yapılandırılmış veri biçimi olan JSON ile yanıt verecek şekilde kısıtlayabilirsiniz. Modeli, bir enum'da belirtilen seçeneklerden biriyle yanıt verecek şekilde de kısıtlayabilirsiniz.

Modelden yapılandırılmış çıkış gerektirebilecek birkaç kullanım alanı aşağıda verilmiştir:

  • Şirket bilgilerini gazete makalelerinden toplayarak bir şirket veritabanı oluşturun.
  • Özgeçmişlerden standartlaştırılmış bilgileri alma
  • Tariflerdeki malzemeleri ayıklayın ve her bir malzeme için bir market web sitesinin bağlantısını gösterin.

İsteminizde Gemini'den JSON biçiminde çıkış üretmesini isteyebilirsiniz ancak modelin yalnızca JSON üreteceği garanti edilmez. Daha kesin bir yanıt için responseSchema alanında belirli bir JSON şemasını iletebilirsiniz. Böylece Gemini her zaman beklenen bir yapıyla yanıt verir. Şemalarla çalışma hakkında daha fazla bilgi edinmek için JSON şemaları hakkında daha fazla bilgi başlıklı makaleyi inceleyin.

Bu kılavuzda, seçtiğiniz SDK üzerinden veya doğrudan REST API'yi kullanarak generateContent yöntemini kullanarak JSON'u nasıl oluşturacağınız gösterilmektedir. Örneklerde yalnızca metin girişi gösterilmektedir. Ancak Gemini, resimler, videolar ve ses içeren çoklu formatlı istekler için JSON yanıtları da oluşturabilir.

Başlamadan önce: Projenizi ve API anahtarınızı oluşturun

Gemini API'yi çağırmadan önce projenizi oluşturmanız ve API anahtarınızı yapılandırmanız gerekir.

API anahtarınızı alma ve güvenliğini sağlama

Gemini API'yi çağırmak için bir API anahtarına ihtiyacınız vardır. Henüz bir anahtarınız yoksa Google Yapay Zeka Studio'da anahtar oluşturun.

API anahtarı alma

Sürüm kontrol sisteminize API anahtarı kontrol etmemeniz önemle tavsiye edilir.

API anahtarınız için Google Cloud Secret Manager gibi bir gizlilik mağazası kullanmanız gerekir.

Bu eğitimdeki tüm snippet'lerde, API anahtarınıza global bir sabit olarak eriştiğiniz varsayılır.

JSON oluştur

Model JSON çıkışı verecek şekilde yapılandırıldığında, tüm istemlere JSON biçimli çıkışla yanıt verir.

Bir şema sağlayarak JSON yanıtının yapısını kontrol edebilirsiniz. Modele şema eklemenin iki yolu vardır:

  • İstemdeki metin olarak
  • Model yapılandırması aracılığıyla sağlanan yapılandırılmış bir şema olarak

İstemde metin olarak bir şema sağlayın

Aşağıdaki örnekte, modelden kurabiye tariflerini belirli bir JSON biçiminde döndürmesi istenir.

Model, biçim spesifikasyonunu istemdeki metinden aldığından spesifikasyonu nasıl temsil edeceğiniz konusunda biraz esneklik olabilir. JSON şemasını temsil etmek için uygun olan her biçim kullanılabilir.

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

Çıkış şu şekilde görünebilir:

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

Model yapılandırması aracılığıyla şema sağlama

Aşağıdaki örnekte şunlar yapılır:

  1. JSON ile yanıt vermek üzere bir şema aracılığıyla yapılandırılan bir modeli oluşturur.
  2. Modelden kurabiye tarifleri döndürmesini ister.

JSON şemasını beyan etmek için kullanılan bu daha resmi yöntem, istemdeki metne güvenmekten daha hassas kontrol sağlar.

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

Çıkış şu şekilde görünebilir:

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

JSON şemaları hakkında daha fazla bilgi

Modeli JSON yanıtı döndürecek şekilde yapılandırdığınızda, JSON verilerinin şeklini tanımlamak için bir Schema nesnesi kullanabilirsiniz. Schema, OpenAPI 3.0 Şema nesnesinin belirli bir alt kümesini temsil eder.

Tüm Schema alanlarının sözde JSON gösterimi aşağıda verilmiştir:

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

Şemanın Type değeri, OpenAPI veri türlerinden biri olmalıdır. Her Type için yalnızca bir alan alt kümesi geçerlidir. Aşağıdaki listede her Type, ilgili tür için geçerli alanlarla eşlenir:

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

Geçerli tür ve alan kombinasyonlarını gösteren bazı örnek şemalar aşağıda verilmiştir:

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

Gemini API'sinde kullanılan şema alanlarının tam dokümanları için Şema referansı başlıklı makaleyi inceleyin.

Mülk sıralaması

Gemini API'de JSON şemalarıyla çalışırken mülklerin sırası önemlidir. API varsayılan olarak mülkleri alfabetik olarak sıralar ve mülklerin tanımlandığı sırayı korur (Google üretken yapay zeka SDK'ları bu sırayı koruyabilir). Yapılandırılmış bir şema içeren modele örnek sağlıyorsanız ve örneklerin özellik sıralaması, şemanın özellik sıralamasıyla tutarlı değilse çıkış dağınık veya beklenmedik olabilir.

Mülklerin tutarlı ve tahmin edilebilir bir şekilde sıralanması için isteğe bağlı propertyOrdering[] alanını kullanabilirsiniz.

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

propertyOrdering[], OpenAPI spesifikasyonunda standart bir alan değildir ve yanıttaki özelliklerin sırasını belirlemek için kullanılan bir dize dizisidir. Mülklerin sırasını belirtip aynı sırayla mülkleri içeren örnekler sağlayarak sonuçların kalitesini artırabilirsiniz.