E Elecay
8.1.2.4 Tip: pratik Seri: Sıfırdan Ajan Kurmak

Çıktı Formatını Zorlamak: Talimat Yeter mi, Şema mı Gerekir?

"JSON döndür" demek çoğu zaman işe yarar — ama çoğu zaman yeterli değil. Format belirtmenin dört seviyesi ve hangi durumda hangisinin gerektiği.

Seviye
Orta
Ön koşul
Belirsizlik: Promptunuzda Söylemediğiniz Her Şey Bir Karardır (isteğe bağlı)
Okuma süresi
~9 dakika

“Cevabı JSON olarak ver” yazdınız. Doksan yedi istekte JSON geldi. Üçünde başına bir açıklama cümlesi eklendi ve kodunuz çöktü.

Bu sayılar uydurma; sizin oranınız modele, prompta ve girdiye göre farklı çıkar. Değişmeyen tek şey oranın yüz olmaması. Prompt bir talimattır — bir garanti değil. Model olasılıklarla çalışır ve olasılık hiçbir zaman kesinlik olmaz.

Soru şu: sizin işiniz için “neredeyse her seferinde” yeterli mi?

Dört seviye

Format belirtmenin dört yolu var, güçten zayıfa değil maliyetten kesinliğe doğru sıralanır.

SeviyeNasılGüvenilirlikNe zaman
1. Tarif“Üç maddede yaz”DüşükElle okunacak çıktı
2. ŞablonBoş şablonu gösterip doldurtmakOrtaTutarlılık istenen elle iş
3. ÖrnekDoldurulmuş örnek göstermekOrta-yüksekKarmaşık yapı
4. ŞemaAracın şema zorlama özelliğiYüksekKod okuyacaksa

Çoğu kişi birinci seviyede kalıyor ve ikinci seviyeye geçmenin ne kadar ucuz olduğunu bilmiyor.

Seçim, çıktıyı kimin okuyacağına bağlı. İnsan okuyacaksa ilk iki seviye yeterli; küçük biçim farkları rahatsız etmez. Kod okuyacaksa üçüncü seviye taban, dördüncü seviye tercih edilendir — ve üstüne doğrulama gelir.

Seviye 1: tarif

En yaygın ve en zayıf yol. “Tablo olarak ver”, “madde madde yaz”, “kısa tut”.

Sorunu: Tarif yoruma açık. “Tablo” markdown tablosu mu, boru işaretli metin mi, sütun adları ne? Belirtmediğiniz her ayrıntıyı model seçer. → Belirsizlik: Promptunuzda Söylemediğiniz Her Şey Bir Karardır

Ne zaman yeterli: Çıktıyı siz okuyacaksanız ve biçim ufak farklarla değişse sorun olmuyorsa.

Seviye 2: şablon

Boş bir iskelet gösterip doldurtmak. Yazması bir dakika sürüyor ve tarif seviyesine göre belirgin bir sıçrama sağlıyor.

Çıktıyı tam olarak bu yapıda ver:

Şikâyet grubu: <grup adı>
Sıklık: <sayı>
Örnek: "<yorumdan birebir alıntı>"
Öncelik: yüksek | orta | düşük
---

İki ayrıntı bu şablonu güçlü yapıyor. Köşeli işaretler modele nereyi dolduracağını gösteriyor. Seçenek listesi (yüksek | orta | düşük) serbest metin yerine kapalı bir küme veriyor — model kendi kategori uydurmuyor.

Sondaki ayraç da işe yarar: birden çok kayıt döneceğinde nerede bittiğini belirler.

Seviye 3: örnek

Şablon yerine doldurulmuş bir örnek göstermek. Karmaşık iç içe yapılarda tariften daha net çalışır çünkü model kalıbı sürdürür. → Sıfır, Tek ve Az Örnekle İstem: Modele Örnek Vermek Ne Yapıyor?

Örnek çıktı:

Şikâyet grubu: Kargo gecikmesi
Sıklık: 12
Örnek: "Üç gündür hareket etmiyor"
Öncelik: yüksek
---

Şimdi aşağıdaki yorumlar için aynı yapıda üret:

Dikkat: Örnekteki her ayrıntı bir kural sinyali. Örneğinizde alıntı tırnak içindeyse model tırnak kullanır; kısa bir alıntı verdiyseniz model kısa alıntılar seçer. → Örnek Seçimi: Verdiğiniz Örnek Farkında Olmadığınız Kuralı Öğretir

Seviye 4: şema zorlama

Bazı araçlar, çıktının belirli bir yapıya uymasını model seviyesinde zorlayan özellikler sunar. Bu, promptla rica etmekten farklı bir şey: yapı, üretim sırasında kısıtlanır.

Kod okuyacaksa doğru seçim budur. Teknik ayrıntısı ayrı bir yazının konusu → 7.5.1.3yakında

Ama şema zorlama da her şeyi çözmez. Yapının doğru olması içeriğin doğru olduğu anlamına gelmez. Model geçerli bir JSON içinde uydurulmuş bir tarih döndürebilir.

Şema yeterli değil: doğrulama katmanı

Kritik bir sistemde format garantisi kodda tamamlanır. Üç kontrol:

Yapı kontrolü. Beklenen alanlar var mı, tipleri doğru mu?

Değer kontrolü. Sayı makul aralıkta mı, tarih geçerli mi, kategori tanımlı kümede mi?

İçerik kontrolü. Alıntı olduğu söylenen metin kaynakta gerçekten geçiyor mu? Bu en değerlisi ve en çok atlanan kontroldür.

Doğrulama başarısız olursa yeniden isteyin. Bir yeniden deneme, çoğu format hatasını çözer — çünkü hatanın kendisi rastgeleliğin sonucudur.

Formatı bozan yaygın sebepler

Açıklama ekleme eğilimi. Model “İşte istediğiniz tablo:” diye başlar. Çözüm: “Yalnızca tabloyu ver, öncesinde ve sonrasında hiçbir metin yazma.”

Uzun girdide format unutulması. Format talimatı promptun başındaysa ve arada uzun bir metin varsa, model üretime başlarken talimat geride kalmıştır. Çözüm: format talimatını girdiden sonra, sona koyun.Olumsuz Talimatlar: \"Bunu Yapma\" Demek Neden Yetmiyor?

Belirsiz alan tanımı. “Öncelik” alanı serbest bırakılırsa model her satırda farklı bir kelime kullanabilir. Seçenek kümesi verin.

Boş veri durumu tanımsız. Bir alanın karşılığı yoksa model uydurabilir. Çözüm: “Bilgi yoksa alanı null bırak” gibi açık bir kural.

Somut örnek: aynı istek dört seviyede

1. TARİF
   Şikâyetleri tablo olarak özetle.

2. ŞABLON
   Çıktıyı şu sütunlarla ver:
   Grup | Sıklık | Örnek alıntı | Öncelik (yüksek/orta/düşük)
   Yalnızca tabloyu ver, başka metin yazma.

3. ÖRNEK
   [doldurulmuş bir satır gösterilir, sonra devamı istenir]

4. ŞEMA
   [aracın yapılandırılmış çıktı özelliği kullanılır]

İkinci seviye, birinciye göre bir dakikalık ek emekle en büyük sıçramayı veriyor. Çoğu iş için doğru durak burası.

Boş sonucu ve hatayı da formata koyun

Şemaların çoğu yalnızca işin yolunda gittiği hâli tarif ediyor. Alanlar sıralanıyor, tipleri veriliyor, örnek çıktı yazılıyor — hepsi bir cevabın var olduğunu varsayarak.

Sorun, cevabın olmadığı durumda ortaya çıkıyor. Metinde aradığınız bilgi yoksa modelin önünde iki seçenek var: şemayı bozmak ya da alanı doldurmak. Şemayı bozmaması gerektiğini kuvvetle söylediyseniz doldurur. Ortaya makul görünen, doğru biçimli ve uydurma bir değer çıkar — ve biçim doğru olduğu için doğrulama katmanınız da onu geçirir.

Çözüm, boşluğa formatta yer açmak:

{
  "tutar": null,
  "durum": "bulunamadi",
  "dayanak": "Metinde tutar geçmiyor."
}

Üç şey birden gerekiyor: alanın boş olabilmesine izin veren bir tip, boşluğu ayrı bir durum olarak işaretleyen bir alan, ve modelin neden boş bıraktığını yazdığı kısa bir gerekçe. Üçüncüsü isteğe bağlı görünür ama en çok işe yarayanıdır: gerekçeyi okuduğunuzda hatanın metinde mi promptta mı olduğunu anlarsınız.

Aynı şey kısmi sonuç için de geçerli. Beş alandan üçü bulunuyorsa, model kalan ikisini uydurmak yerine boş bırakabilmeli. → Olumsuz Talimatlar: \"Bunu Yapma\" Demek Neden Yetmiyor?

Yeniden deneme stratejisi

Doğrulama başarısız olduğunda ne yapacağınız, format garantisinin son halkası.

Aynı promptu tekrar çalıştırın. Format hatalarının çoğu rastgeleliğin sonucudur; ikinci deneme genellikle geçer. En ucuz çözüm bu.

Hatayı geri bildirin. İkinci deneme de başarısızsa, hatayı modele söyleyin: “Önceki çıktın geçerli JSON değildi, şu satırda kırıldı. Yalnızca düzeltilmiş JSON’u ver.” Bu yaklaşım tek denemeye göre belirgin biçimde daha yüksek başarı verir.

Deneme sayısını sınırlayın. İki ya da üç. Sınırsız yeniden deneme, bozuk bir prompta maliyet yakan bir döngüye dönüşür.

Başarısızlığı kaydedin. Hangi girdilerde format bozuluyorsa onlar değerlendirme setinize girmeli. Tekrarlayan bir bozulma, promptta yapısal bir sorun olduğunu gösterir. → Promptları Test Etme: \"Bana İyi Göründü\"yü Bırakmak

Son bir kural: yeniden deneme bir çözüm değil bir sigortadır. Her istekte iki kez deneniyorsa sorun rastgelelikte değil promptta veya seçilen seviyededir.

Format kararını kim veriyor?

Bir promptta format belirtmediğinizde, çıktının yapısını üç şeyden biri belirliyor — ve hangisi olduğunu bilmiyorsanız kontrolünüz yok demektir.

Modelin varsayılanı. Belirtmediğinizde model kendi alışkanlığına döner: genellikle giriş cümlesi, ardından madde listesi, sonunda bir kapanış. Bu yapı okunaklı ama makine tarafından işlenmeye uygun değil ve model sürümüyle değişir. → Model Güncellenince Promptlar Neden Bozulur?

Örneklerinizin biçimi. Prompta örnek koyduysanız, o örneklerin yapısı bir format talimatı gibi çalışır — siz format yazmasanız bile. Bu iyi bir şey olabilir ama farkında olmadan gerçekleştiğinde tuzağa dönüşür. → Örnek Seçimi: Verdiğiniz Örnek Farkında Olmadığınız Kuralı Öğretir

Girdinin biçimi. Modele tablo verirseniz tablo döndürme eğilimi artar, madde listesi verirseniz madde listesi. Girdinin yapısı çıktıya sızar.

Bu üçü aynı anda çalışıyor ve çelişebiliyorlar. Örnekleriniz tablo formatındayken girdiniz düz metinse, çıktının hangisine benzeyeceği belirsiz kalır.

Format belirtmenin asıl değeri burada: kararı bu üç kaynaktan alıp size veriyor. Kısa promptlarda bu farkı hissetmezsiniz çünkü üç kaynak da benzer sonuç üretir. Uzun ve karmaşık promptlarda ise belirleyici hâle gelir.

Format ve içerik arasındaki gerilim

Katı format istemenin bir bedeli var ve genellikle konuşulmuyor: belirtilen yapıya sığmayan bilgi kayboluyor.

Üç sütunlu bir tablo istediğinizde, dördüncü bir boyut taşıyan bir bulgu ya zorla bir sütuna sıkıştırılır ya hiç yazılmaz. Model size “bu bilgi yapıya uymuyor” demez; sessizce feda eder.

Bu, özellikle keşif amaçlı işlerde sorun. Bir veriyi ilk kez inceliyorsanız, katı bir format modelin fark ettiği ama sizin öngörmediğiniz şeyleri eler.

Pratik çözüm iki aşamalı çalışmak: önce serbest formatta bir tur yapın ve neyin çıktığını görün, sonra gördüklerinize göre formatı tasarlayıp ikinci turu yapın. Format, keşiften sonra tasarlanmalı — öncesinde değil.

Sınırlar

Format kesinliği içerik doğruluğu değildir. Kusursuz yapıda yanlış bilgi almak mümkündür — hatta daha tehlikelidir, çünkü güvenilir görünür.

Aşırı format yaratıcılığı kısar. Fikir üretiminde katı şablon sonucu daraltır.

Şema zorlama her araçta yok ve olan araçlarda da yeteneği değişir.

Format talimatı yer kaplar. Uzun bir şablon, bağlamın bir kısmını tüketir.

Özet

Format belirtmenin dört seviyesi var: tarif, şablon, örnek ve şema zorlama. Çoğu kişi birinci seviyede kalıyor; ikinciye geçmek bir dakika sürüyor ve en büyük iyileşmeyi sağlıyor.

Şablonu güçlü yapan iki ayrıntı: doldurulacak yerleri işaretlemek ve serbest alanlar yerine kapalı seçenek kümeleri vermek.

Kod okuyacaksa prompt yeterli değil. Şema zorlama kullanın ve üstüne kodda doğrulama koyun — yapı kontrolü, değer kontrolü ve içerik kontrolü.

Format talimatını girdiden sonra yazın. Uzun bir metnin önüne konan format kuralı, üretim başladığında geride kalır.

Sık sorulanlar

Modelden JSON almanın en güvenilir yolu nedir?

Aracın şema zorlama özelliğini kullanmak ve gelen çıktıyı kod tarafında doğrulamak. Yalnızca promptta “JSON ver” demek çoğu zaman çalışır ama garanti vermez.

Model neden çıktının başına açıklama ekliyor?

Yardımcı olma eğilimi. “Yalnızca tabloyu ver, öncesinde ve sonrasında hiçbir metin yazma” gibi açık bir kural bunu büyük ölçüde engeller.

Format talimatını promptun neresine koymalıyım?

Girdiden sonra, promptun sonuna. Uzun bir metnin önüne konan format kuralı, model üretime başladığında geride kalır.

Şablon mu örnek mi daha iyi çalışır?

Basit yapılarda şablon yeterli ve daha ucuz. İç içe geçmiş karmaşık yapılarda doldurulmuş örnek daha net sonuç verir.

Format doğruysa içerik de doğru mudur?

Hayır. Geçerli yapıda yanlış bilgi almak mümkündür ve güvenilir göründüğü için daha risklidir. İçerik kontrolü ayrıca yapılmalıdır.

İlgili yazılar