İstem API'si için yapılandırılmış çıkış desteği

Yayınlanma tarihi: 13 Mayıs 2025

Büyük dil modelleri (LLM'ler) bazen uzun yanıtlar vermesiyle bilinir. Modele yalnızca "doğru" veya "yanlış" şeklinde yanıt vermesini söyleseniz bile model, istediğinizden daha fazla bilgi içeren ve samimi bir yanıt verebilir. Örneğin: "Elbette, yanıt: doğru."

Bu zorluğun üstesinden gelmek için Prompt API, LanguageModel.prompt() ve LanguageModel.promptStreaming() yöntemlerine JSON şeması ileterek modelin yanıtının JSON çıkış biçimini belirtmenize olanak tanır. Yapılandırılmış çıkış desteği, Chrome 137 sürümünden itibaren kullanılabilir.

JSON şeması nedir?

JSON şeması, JSON verilerinin tutarlılığını, geçerliliğini ve büyük ölçekte birlikte çalışabilirliğini sağlayan bir sözlüktür. Veri alışverişi söz konusu olduğunda, JSON verilerinin yapısını ve kurallarını tanımlamak için güçlü bir standart olarak JSON şeması öne çıkar. Verilerinizin özelliklerini tanımlamak için bir dizi anahtar kelime kullanır.

JSON Şeması, yapılandırılmış çıkış sağlamak için kullanılan ve diğerlerinin yanı sıra OpenAI API ve Gemini API tarafından da kullanılan sektör standardıdır.

Örneğin, modele Mastodon gibi bir online sosyal ağdaki gönderiye en fazla üç hashtag ataması için istem gönderiyorsunuz. İdeal çıkış, aşağıdaki JSON'a benzer şekilde görünebilir:

{
  "hashtags": [
    "#pottery",
    "#dyi"
  ] 
}

İstenen bu çıkış nesnesi şeklinin karşılık gelen JSON şeması şu şekilde görünür:

{
  "type": "object",
  "properties": {
    "hashtags": {
      "type": "array",
      "maxItems": 3,
      "items": {
        "type": "string",
        "pattern": "^#[^\\s#]+$"
      }
    }
  },
  "required": ["hashtags"],
  "additionalProperties": false
}

Bu JSON şeması, aşağıdaki kısıtlamalara sahip bir hashtags alanı içermesi gereken bir nesnenin yapısını tanımlar:

  • "type": "object": Kök değer bir JSON nesnesi olmalıdır.
  • "properties": { "hashtags": ... }: Nesnede hashtags adlı bir özellik olabilir (ve bu durumda olmalıdır).
  • "hashtags":

    • "type": "array": Değer bir dizi olmalıdır.
    • "maxItems": 3: Dizi en fazla 3 öğe içerebilir.
    • "items": { "type": "string", "pattern": "^#[^\\s#]+$" }: Dizideki her öğe, verilen normal ifade kalıbıyla eşleşen bir dize olmalıdır: ^#[^\\s#]+$:
      • ^## ile başlamalıdır.
      • [^\\s#]+ → ardından boşluk (\s) veya başka bir # olmayan bir veya daha fazla karakter.
      • $ → orada sona ermelidir.
  • "required": ["hashtags"]: Nesne, hashtags özelliğini içermelidir.

  • "additionalProperties": false: Hashtag'ler dışında başka özelliklere izin verilmez.

Biçimin özelliklerinin tam açıklaması için JSON Şema Temelleri dokümanını okuyun.

Aslında LLM'ler, JSON şeması oluşturma konusunda oldukça iyidir. İsteminize doğal dilde kısıtlamaları açıklayın ve geçerli bir örnek JSON nesnesi ekleyin. Bu şekilde yarı yola ulaşmış olursunuz. Ardından, JSON Şeması doğrulayıcılarından biriyle (ör. online Newtonsoft JSON Şeması Doğrulayıcı) oluşturulan JSON Şeması'na göre JSON nesnelerini doğrulayabilirsiniz.

JSON nesnesini, JSON şeması doğrulayıcıda JSON şemasına göre başarıyla doğrulama.

İstem API'sine JSON şeması iletme

Modelin istenen JSON şemasına uymasını sağlamak için JSON şemasını prompt() veya promptStreaming() yöntemlerinin seçenekler nesnesine responseConstraint alanının değeri olarak iletmeniz gerekir.

Aşağıda, modelin Mastodon gönderisi gibi bir mesajın çömlekçilikle ilgili olup olmadığını sınıflandırırken true veya false ile yanıt vermesini sağlayan çok basit bir JSON şeması örneği verilmiştir.

const session = await LanguageModel.create();

const schema = {
  "type": "boolean"
};

const post = "Mugs and ramen bowls, both a bit smaller than intended- but that's
how it goes with reclaim. Glaze crawled the first time around, but pretty happy
with it after refiring.";

const result = await session.prompt(  
  `Is this post about pottery?\n\n${post}`,
  {  
    responseConstraint: schema,
  }
);
console.log(JSON.parse(result));
// true

Tahmin edilebilir çıktıları destekleme

İstem API'si için yapılandırılmış çıkış desteği, LLM'nin yanıtlarını çok daha tahmin edilebilir hale getirir. Geliştiriciler artık bir nesneyi Markdown yanıtından veya diğer son işlemelerden ayırmak yerine modelin yanıtının geçerli JSON olduğunu varsayabilir.

Bu sayede, yerel ve istemci tarafı yapay zeka çalıştırmanın tüm avantajlarıyla birlikte yerleşik yapay zeka, bulut tabanlı API'lere bir adım daha yaklaşıyor.