İ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), zaman zaman uzun yanıtlar vermesiyle bilinir. Modele yalnızca "doğru" veya "yanlış" yanıt vermesini söyleseniz bile model, samimi bir yanıtla ve istediğinizden daha fazla bilgi vererek yanıt verebilir. Örneğin: "Elbette, cevap: doğru."

Bu sorunu gidermek için Prompt API, LanguageModel.prompt() ve LanguageModel.promptStreaming() yöntemlerine bir 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ü itibarıyla kullanılabilir.

JSON şeması nedir?

JSON şeması, JSON verilerinin tutarlılığını, geçerliliğini ve geniş ölçekte birlikte çalışabilirliğini sağlayan bir kelime hazinesidir. Veri alışverişi söz konusu olduğunda JSON şeması, JSON verilerinin yapısını ve kurallarını tanımlamak için güçlü bir standart olarak ö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 endüstri standardıdır. OpenAI API ve Gemini API gibi API'ler tarafından da kullanılır.

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

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

Bu istenen çıkış nesnesi şekli için karşılık gelen JSON şeması aşağıdaki gibi 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 nesne yapısı tanımlar:

  • "type": "object": Kök değer bir JSON nesnesi olmalıdır.
  • "properties": { "hashtags": ... }: Nesnenin hashtags adlı bir özelliği 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.
      • $ → burada sona ermelidir.
  • "required": ["hashtags"]: Nesne, hashtags mülkünü içermelidir.

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

Biçimin özelliklerinin tam açıklamasını JSON Şeması Temel Bilgileri dokümanında bulabilirsiniz.

LLM'ler, JSON şeması oluşturma konusunda gerçekten iyidir. İsteminizde kısıtlamaları doğal dilde açıklayın ve geçerli bir örnek JSON nesnesi sağlayın. Bu işlem, işin yarısını tamamlamanızı sağlar. Ardından, JSON nesnelerini oluşturulan JSON şemasına göre JSON şeması doğrulayıcılarından biriyle (ör. online Newtonsoft JSON Şeması Doğrulayıcısı) doğrulayabilirsiniz.

JSON nesnesinin, JSON şeması doğrulayıcısında bir JSON şemasına göre başarılı bir şekilde doğrulanması.

İstem API'sine JSON şeması gönderme

Modelin istenen JSON şemasına uyduğundan emin olmak için JSON şemasını prompt() veya promptStreaming() yöntemlerinin seçenekler nesnesine bir responseConstraint alanının değeri olarak bağımsız değişken olarak iletmeniz gerekir.

Bu Mastodon yayını gibi belirli bir mesajın çömlekle ilgili olup olmadığını sınıflandırırken modelin 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 çıkış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 Markdown yanıtından veya diğer son işlemlerden bir nesne ayıklamak yerine, modelin yanıtının geçerli JSON olduğunu varsayabilir.

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