Skip to content

Yapilandirilmis Cikti

Semali tipli JSON yanitlari alin

8 dk okuma

Claude’dan 200 destek biletini siniflandirmasini istiyorsunuz. Ilk 50’si temiz JSON dondurur. 51. bilet bunun yerine konusma tarzinda bir paragraf dondurur. --json-schema olmadan, Claude’un cikti formati bir garanti degil, bir oneridir.

--json-schema bayragi Claude’u bir JSON semasina uyan verileri dondurmeye zorlar. Token duzeyinde kisitli kod cozme kullanir ve pratikte semaniza guvenilir sekilde uyan cikti uretir. Cogu insan bunu bilmez, ancak guvenilir veri cikartma, siniflandirma ve API entegrasyonu icin en temiz yoldur.

Claude’un ciktisini programatik olarak ayristirmasi gereken her sey icin, --output-format json ile --json-schema’yi birlestirin. Sema kisitlamasi her cagride tahmin edilebilir, tipli yapi verir — ciktinin ayristirilabilir olmasini ummak yok artik.

Constrained Decoding Pipeline
PROMPT "Classify..." Claude CONSTRAINED Decoding token-level TYPED JSON --json-schema without schema: output is a suggestion with schema: output is a guarantee

Bunu Ne Zaman Kullanmali (ve Ne Zaman Kullanmamali)

--json-schema’yi su durumlarda kullanin:

  • Claude’un ciktisini yapilandirilmis sistemlere (veritabanlari, API’ler, alt akis araclari) ayristiriyorsaniz
  • Bircoq cagri arasinda tutarli, tipli veriye ihtiyaciniz varsa (toplu isleme, siniflandirma boru hatlari)
  • Sema uyumlulugu dogal aciklamalardan daha onemliyse

--json-schema’yi su durumlarda kullanmayin:

  • Serbest bicimli metin veya Claude’un dogal aciklamalarina ihtiyaciniz varsa
  • Cikti insanlar tarafindan okunacaksa, makineler degil
  • Semaniz uyumlulugu zorlamanin yanit kalitesini dusurecegi kadar karmasiksa

JSON Schema, JSON yapisini dogrulamak icin bir sozvarliqidir. Spesifikasyon, araclarin veri sekillerini uygulamak icin kullandigi tipleri, kisitlamalari ve ek aciklamalari tanimlar. Tam spesifikasyon icin json-schema.org adresine bakin.

Temel Sema

--output-format json ile birlikte --json-schema’ya bir JSON Schema dizesi gecirin. Claude, semaya uyan verileri iceren bir structured_output alanina sahip bir yanit zarfi dondurur.

--json-schema ile Varlik Cikarimi
$ claude -p "Bu metinden kisinin adi ve yasini cikart: 'John Smith 32 yasinda ve New York'ta yasiyor'" \ --output-format json \ --json-schema '{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer"},"city":{"type":"string"}},"required":["name","age","city"]}'
{ "type": "result", "subtype": "success", "is_error": false, "result": "", "structured_output": { "name": "John Smith", "age": 32, "city": "New York" }, ... }

Sema gir, yapilandirilmis veri cik. Ayristirma regex’i yok, “lutfen JSON olarak yanit verin” promptu yok. structured_output alani, dogru tiplerle cikarilmis verileri icerir — age, "32" dizisi degil, 32 tamsayisidir.

basic_schemaartifacts/08/basic_schema.json
1{
2 "type": "result",
3 "subtype": "success",
4 "is_error": false,
5 "duration_ms": 9144,
6 "duration_api_ms": 9101,
7 "num_turns": 2,
8 "result": "",A
9 "stop_reason": "end_turn",
10 "session_id": "27c34d79-135c-44c6-b502-0edcd3c3246c",
11 "total_cost_usd": 0.07274925,
12 "usage": {
13 "input_tokens": 4,
14 "cache_creation_input_tokens": 9369,
15 "cache_read_input_tokens": 22296,B
16 "output_tokens": 121
17 },C
18 "structured_output": {
19 "name": "John Smith",
20 "age": 32,
21 "city": "New York"
22 }
23}
Aresult bos -- Claude her seyi structured_output'a koydu
BSemaniza uyan cikarilmis veriler
CTamsayi tipi korunmus -- dize degil

Karmasik Semalar

Semalar ic ice nesneler, diziler, enum’lar ve aciklama ipuclari icerebilir. Kisitli kod cozme, karmasik semalarda yuksek guvenilirlik saglar, ancak API duzeyinde kesin bir garanti degildir.

Nesne Dizileri

Ic Ice Dizi Semasi
$ claude -p "En iyi 3 programlama dilini listele" \ --output-format json \ --json-schema '{"type":"object","properties":{"languages":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"paradigm":{"type":"string"},"year":{"type":"integer"}},"required":["name","paradigm","year"]}}},"required":["languages"]}'
{ "structured_output": { "languages": [ {"name": "Python", "paradigm": "multi-paradigm", "year": 1991}, {"name": "JavaScript", "paradigm": "multi-paradigm", "year": 1995}, {"name": "Java", "paradigm": "object-oriented", "year": 1995} ] }, ... }

Siniflandirma Icin Enum Kisitlamalari

Bir alani sabit bir deger kumesuyle sinirlamak icin enum kullanin. Kisitli kod cozme ile birlestirildiginde, bu Claude’u deterministik bir siniflandiriciya donusturur:

{
"type": "object",
"properties": {
"sentiment": { "type": "string", "enum": ["positive", "negative", "neutral"] },
"confidence": { "type": "number" }
},
"required": ["sentiment", "confidence"]
}

Claude, sentiment icin yalnizca uc enum degerinden birini uretebilir. Halusinasyon uretilmis dorduncu bir secenek imkani yoktur.

Try This

Claude’un ciktisini belirli bir sekille sinirlamayi deneyin:

claude -p “Bu metni positive, negative veya neutral olarak siniflandir: ‘Build yine basarisiz oldu’” —output-format json —json-schema ’{“type”:“object”,“properties”:{“sentiment”:{“type”:“string”,“enum”:[“positive”,“negative”,“neutral”]},“confidence”:{“type”:“number”}},“required”:[“sentiment”,“confidence”]}‘

Cikti semaya tam olarak uyuyor mu? enum kisitlamasini kaldirmayi deneyin — sentiment icin Claude onsuz ne donduruyor?

Aciklama Ipuclari

Sema yapisini degistirmeden cikarmayi yonlendirmek icin description alanlari ekleyin. Bu, ozellikle alan adlari tek basina belirsiz oldugunda kullanislidir:

{
"type": "object",
"properties": {
"action_items": {
"type": "array",
"description": "Toplanti notlarinda belirtilen somut sonraki adimlar listesi",
"items": {
"type": "object",
"properties": {
"task": { "type": "string", "description": "Yapilacak belirli eylem" },
"owner": { "type": "string", "description": "Sorumlu kisi" },
"deadline": { "type": "string", "description": "Belirtildiyse ISO 8601 tarihi, aksi halde bos dize" }
},
"required": ["task", "owner", "deadline"]
}
}
},
"required": ["action_items"]
}

Sema Tasarim Ipuclari

  • required’i bolca kullanin. required listesinde olmayan herhangi bir alan atlanabilir. Gercekten istege bagli alanlar istemiyorsaniz her seyi required’a koyun.
  • Siniflandirma icin enum kullanin. Duygu, onem derecesi, kategori — sonlu bir deger kumesine sahip her sey enum icin uygundur.
  • Cikarmayi yonlendirmek icin description kullanin. Model, uretim sirasinda bu ipuclarini okur. Iyi yazilmis bir aciklama genellikle daha uzun bir prompttan daha etkilidir.
  • Semalari mumkun oldugunca duz tutun. Derin ic ice gecme, derlemek ve uretmek icin daha fazla token gerektirir. Semanizda ucten fazla ic ice gecme seviyesi varsa, yeniden yapilandirmayi dusunun.

result ve structured_output Karsilastirmasi

--json-schema kullanildiginda, JSON zarfi yeni bir ust duzey alan kazanir. Hangi alanin okunacagini anlamak kritiktir.

Hangi Alan Ayristirilmali

AlanIcerirNe Zaman Kullanilir
resultDogal dil yaniti (bos olabilir)Insanlar icin okunabilir ozet olarak gosterin
structured_outputSemaya uyan JSON nesnesiVeri icin her zaman bunu ayristirin — semaya uyan ciktidir

Bu iki alan birbirinden bagimsizdir. Claude result’ta bir metin aciklamasi VE structured_output’ta yapilandirilmis veri saglayabilir, veya result bos olabilir. Davranis cagrilar arasinda tutarsizdir — bazen her ikisi de doldurulmus, bazen yalnizca structured_output. Ayristiricıniz her zaman veri icin structured_output’u okumali ve result’u istege bagli bir bonus olarak ele almalidir.

Yukaridaki temel varlik cikarimi orneginde, result bos bir dizeydi. Ancak dizi orneginde, Claude hem result’ta insan tarafindan okunabilir bir ozet hem de structured_output’ta yapilandirilmis diziyi sagladi:

array_schemaartifacts/08/array_schema.json
1{
2 "type": "result",
3 "subtype": "success",
4 "is_error": false,
5 "duration_ms": 10344,
6 "num_turns": 2,
7 "result": "Here are the top 3 programming languages by popularity:\n\n1. **Python** (1991) - Multi-paradigm language dominant in AI/ML, data science, web development, and scripting.\n2. **JavaScript** (1995) - Multi-paradigm language that powers the web, running in browsers and on servers via Node.js.\n3. **Java** (1995) - Object-oriented language widely used in enterprise applications, Android development, and large-scale systems.",A
8 "session_id": "7ca8e29b-7cd1-4832-a02a-8a2888808f0e",
9 "total_cost_usd": 0.076849,
10 "structured_output": {
11 "languages": [B
12 {
13 "name": "Python",
14 "paradigm": "multi-paradigm",
15 "year": 1991
16 },
17 {
18 "name": "JavaScript",
19 "paradigm": "multi-paradigm",
20 "year": 1995
21 },
22 {
23 "name": "Java",
24 "paradigm": "object-oriented",
25 "year": 1995
26 }
27 ]
28 }
29}
Aresult bu sefer dolu -- Claude her ikisini de saglamayi secti
Bstructured_output hala kanonik veri kaynagidir

Kisitli Kod Cozme

Prompt tabanli yaklasimlardan (“JSON formatinda yanit verin”) farkli olarak, --json-schema gramer tabanli kisitli kod cozme kullanir. Her token uretim adiminda, model yalnizca ciktiyi semaya karsi gecerli tutan token’lari uretebilir. Bu, son isleme veya dogrulama degildir — uretim sirasinda gerceklesir.

Pratik sonuclari:

  • Neredeyse %100 uyumluluk — cikti pratikte guvenilir sekilde semaya uyar, ancak OpenAI’nin strict: true modundan farkli olarak, Claude’un kisitli kod cozmesi API duzeyinde kesin bir garanti degildir
  • Halusinasyon uretilmis alan yok — yalnizca bildirilen ozellikler ciktida gorunur
  • Dogru tipler — tamsayilar tamsayidir, dizeler dizedir, diziler dizidir
  • Zorunlu alanlar mevcutrequired listesindeki her alan bulunacaktir
  • Enum uygulamasi — degerler tam olarak belirttiginiz seceneklerle sinirlanir

Bu, --json-schema’yi Claude’dan “lutfen JSON dondurmesinI” istemekten ayiran seydir. Prompt muhendisligi ile ~%95 uyumluluk elde edersiniz ve ayristirma basarisizliklarini yonetmeniz gerekir. Kisitli kod cozme ile pratikte neredeyse %100 uyumluluk elde edersiniz.

--json-schema Kesin Bir Garanti DEGILDIR

Token uretim duzeyinde resmi garanti ile sema uyumlulugunu uygulayan OpenAI’nin strict: true modundan farkli olarak, Claude’un —json-schema’si yuksek oranda guvenilir ancak resmi olarak garanti edilmemis kisitli kod cozme kullanir. Pratikte, iyi olusturulmus semalar icin uyumluluk neredeyse %100’dur, ancak uc durumlar (derin ic ice gecmis semalar, catisan kisitlamalar) hatali cikti uretebilir. Mukemmel uyumluluk varsaymak yerine, uretim boru hatlarinda her zaman structured_output alanini dogrulayin.

Yanlis Alani Ayristirma

response.result’u arayan bir ayristirici olusturarak yapilandirilmis ciktinin response.structured_output icinde oldugunu fark etmeden once 2 saat kaybettik. result alani bazen veri icerir, bazen icermez — tahmin edilemez. —json-schema kullanirken her zaman structured_output’u ayristirin ve result’u insan tarafindan okunabilir ozetler icin istege bagli bir bonus olarak ele alin.

Odul, karmasik semalarin daha fazla token tuketmesidir. Semanin kendisi bir gramere derlenir ve 20 ic ice gecmis nesne iceren bir sema, duz 3 alanli bir semadan derlenmesi ve cikti uretmesi daha uzun surer. Cogu kullanim alani icin fark ihmal edilebilir, ancak derin ic ice gecmis bir semayla binlerce belge isliyorsaniz bilmeye deger.

Gotcha

—output-format text ile —json-schema kullanmak bos cikti uretir. structured_output alani yalnizca JSON zarfinin icinde bulunur. Metin formati kullanirseniz, onu iceren bir zarf yoktur ve result bos olabilir. —json-schema’yi her zaman —output-format json ile eslestirin.

Gotcha

Komut satirinda karakerden kacan tirnak isaretleri kaprislidirir. Kabuklar ic ice tirnaklari farkli sekilde ele alir ve yanlis yerlestirilmis bir ters cizgi sessizce gecersiz bir sema uretecektir. Basit duz nesnelerin otesindeki her sey icin, semayi bir dosyada saklayin ve —json-schema ”$(cat schema.json)” ile gecirin veya komutu JSON.stringify() ile kacarmayi yonetebileceginiz bir betikte olusturun.

Tip

num_turns alani basit cikarimlar icin bile 2 gosterir. Claude sema kurulumu icin dahili bir tur kullanir. Bu normaldir ve bir hata veya bosa harcanan is anlamina gelmez.

Kullanim Alanlari

Yapilandirilmis cikti, duz metin yanitlarla imkansiz olan bir is akisi kategorisinin kilidini acar:

  1. Veri cikarimi — yapilandirilmamis metinden (e-postalar, PDF’ler, loglar) yapilandirilmis alanlar cekme
  2. Siniflandirma — enum kisitlamalariyla duygu, kategori, oncelik seviyesi
  3. Kod inceleme — onem derecesi, dosya, satir numarasi ve oneri iceren yapilandirilmis inceleme ciktisi
  4. Form doldurma — dogal dil girdisinden form alanlari cikarma
  5. API yanit uretimi — Claude destekli API’nizin gecerli, tipli yanitlar dondurdugunu garanti etme
  6. Toplu isleme — tutarli ciktiyla yuzlerce belgeden ayni alanlari cikarma

Hata yonetimi ve sema olusturma dahil Node.js’deki tam bir ayristirma ornegi icin kaynak kılavuza bakin.

Now Do This

En yaygin cikarim goreviniz icin bir sema olusturun — hata siniflandirmasi, log ayristirma veya kod inceleme bulgulari — ve —json-schema ile bir prompt calistirin. Ciktinin eslestiqini dogrulayin. Bu, Claude’u bir metin ureticiden yapilandirilmis bir veri boru hattina donustormenin yoludur.