Prompt'u iyileştirme döngüsü: ölç, değiştir, karşılaştır
Önkoşul:Yapılandırılmış çıktı alma (JSON, şema)
Kanca
3-7. derste GÖREV, PERSONA, ÖRNEK, DÜŞÜNCE ZİNCİRİ, FORMAT gibi bir dizi “kol” (lever) öğrendik. Peki HANGİSİNİ, NE ZAMAN, NASIL denemeliyiz — ve bir değişikliğin GERÇEKTEN İYİLEŞTİRME olduğunu NASIL BİLİRİZ?
Sezgi
Prompt iyileştirme, KÖR bir deneme-yanılma DEĞİL, üç adımlı bir döngüdür: ÖLÇ (net, PROGRAMATİK bir başarı kriteri tanımla), DEĞİŞTİR (TEK bir şeyi değiştir), KARŞILAŞTIR (kritere göre puanla) — sonra TEKRARLA. Aşağıda, bir e-postayı özetleme görevinde bu döngünün ÜÇ adımını incele:
(başlangıç noktası)
Summarize this email.
The email is about a client meeting that was originally scheduled for Thursday but has now been moved to Friday due to a scheduling conflict, and the sender is asking the team to update their calendars and flag any issues.
- ✗ ≤ 15 kelime
- ✓ 'Friday' bilgisi korunmuş
- ✗ Bir eylem fiiliyle başlıyor
+ 'in exactly one sentence, under 15 words' (FORMAT kısıtı, 3. ders)
Summarize this email in exactly one sentence, under 15 words.
Client meeting moved to Friday 10am; update your calendar and flag conflicts.
- ✓ ≤ 15 kelime
- ✓ 'Friday' bilgisi korunmuş
- ✗ Bir eylem fiiliyle başlıyor
+ 'focusing on the action the recipient must take' (odak kısıtı)
Summarize this email in one sentence, under 15 words, focusing on the action the recipient must take.
Update your calendar: client meeting is now Friday 10am.
- ✓ ≤ 15 kelime
- ✓ 'Friday' bilgisi korunmuş
- ✓ Bir eylem fiiliyle başlıyor
Mekanizma
Önce ÖLÇ adımı: net, KONTROL EDİLEBİLİR kriterler tanımlayalım (uzunluk, bilgi korunumu, eylem odağı):
Ölç: kriterleri PROGRAMATİK hale getir
# ÖLÇ adımı: NET, PROGRAMATİK OLARAK KONTROL EDİLEBİLİR kriterler tanımla.
EYLEM_FIILLERI = {"update", "schedule", "confirm", "review", "send", "check", "reply", "move"}
def olcumler(metin):
kelimeler = metin.split()
uzunluk_ok = len(kelimeler) <= 15
onemli_bilgi_var = "friday" in metin.lower()
ilk_kelime = kelimeler[0].strip(":,.").lower()
eylemle_basliyor = ilk_kelime in EYLEM_FIILLERI
return {
"uzunluk_ok": uzunluk_ok,
"onemli_bilgi_var": onemli_bilgi_var,
"eylemle_basliyor": eylemle_basliyor,
"kelime_sayisi": len(kelimeler),
}
print(f"E-posta: \"{EPOSTA[:60]}...\"\n")
print(f"{'Varyant':<8} {'<=15 kelime':<14} {'Friday bilgisi var':<20} {'Eylemle başlıyor':<18} {'Kelime sayısı'}")
for v in VARYANTLAR:
olcum = olcumler(v["cikti"])
print(f"{v['isim']:<8} {str(olcum['uzunluk_ok']):<14} {str(olcum['onemli_bilgi_var']):<20} {str(olcum['eylemle_basliyor']):<18} {olcum['kelime_sayisi']}")
v["olcum"] = olcumE-posta: "Hi team, the client meeting has been moved from Thursday 2pm..."
Varyant <=15 kelime Friday bilgisi var Eylemle başlıyor Kelime sayısı
v1 False True False 40
v2 True True False 12
v3 True True True 9Sonra KARŞILAŞTIR adımı: her varyantı puanla ve NEYİN değiştiğini kaydet:
Karşılaştır: puan 1'den 3'e çıkıyor
# KARŞILAŞTIR adımı: her varyantı, kaç kriteri KARŞILADIĞINA göre puanla.
print(f"\n{'Varyant':<8} {'Puan (3 üzerinden)':<20} {'Değişen':<55}")
for v in VARYANTLAR:
puan = sum(1 for k in ["uzunluk_ok", "onemli_bilgi_var", "eylemle_basliyor"] if v["olcum"][k])
v["puan"] = puan
print(f"{v['isim']:<8} {puan:<20} {v['degisen']:<55}")
print("\nv1 -> v2 -> v3 İLERLEMESİ: TEK bir değişiklik (önce FORMAT kısıtı, sonra ODAK kısıtı)")
print("eklendikçe, puan 1'den 3'e yükseliyor -- HER adımda TEK bir değişken değiştirildiği")
print("için, HANGİ değişikliğin NEYİ düzelttiği NETTİR.")
Varyant Puan (3 üzerinden) Değişen
v1 1 (başlangıç noktası)
v2 2 + 'in exactly one sentence, under 15 words' (FORMAT kısıtı, 3. ders)
v3 3 + 'focusing on the action the recipient must take' (odak kısıtı)
v1 -> v2 -> v3 İLERLEMESİ: TEK bir değişiklik (önce FORMAT kısıtı, sonra ODAK kısıtı)
eklendikçe, puan 1'den 3'e yükseliyor -- HER adımda TEK bir değişken değiştirildiği
için, HANGİ değişikliğin NEYİ düzelttiği NETTİR.Matematik
Neden TEK seferde TEK değişiklik
arasında SADECE format kısıtı eklendi; arasında SADECE odak kısıtı eklendi. Eğer İKİSİNİ AYNI ANDA değiştirseydik, puan artışının HANGİ değişiklikten geldiğini AYIRT EDEMEZDİK. Bu, deneysel yöntemin (istatistik kategorisinde gördüğümüz “bir seferde bir değişken” ilkesinin) prompt mühendisliğine UYARLANMASIDIR.
Kod
Nerede işe yarar
Bu döngü, 1-7. derste öğrendiğimiz TÜM tekniklerin (persona, few-shot, CoT, format) SİSTEMATİK olarak nasıl SEÇİLECEĞİNİ belirler:
- Kriter olmadan “iyileştirme” YOKTUR — “bu daha iyi görünüyor” ÖZNEL bir yargıdır; “bu, kriterlerin 3’ünü de karşılıyor” NESNEL bir ÖLÇÜMDÜR.
- Üretim (production) ortamlarında bu döngü OTOMATİKLEŞTİRİLİR — düzinelerce prompt varyantı, YÜZLERCE test girdisiyle OTOMATİK olarak puanlanıp karşılaştırılabilir.
- Her yineleme (iterasyon), ÖNCEKİ adımların üzerine İNŞA EDİLİR — 3-7. dersteki HER teknik, bu döngüde denenip TUTULABİLECEK ya da ATILABİLECEK bir “hipotez”dir.
Bu 2 hatayı yaparsın:
- Birden fazla değişikliği AYNI ANDA yapmak — hangi değişikliğin SONUCU etkilediğini ARTIK bilemezsin.
- Kriterleri BELİRSİZ bırakmak (“daha iyi olsun”) — 7. dersteki gibi, PROGRAMATİK olarak KONTROL EDİLEBİLİR kriterler olmadan, “iyileşme” ÖLÇÜLEMEZ.
Kendini test et
1. Notebook'ta v1'den v3'e giderken puan NEDEN 1'den 3'e çıkıyor?
- Rastgele bir iyileşme
- Her adımda (v1->v2, v2->v3) TEK bir spesifik kısıt eklendi (önce FORMAT, sonra ODAK) ve bu, PROGRAMATİK olarak ölçülen 3 kritere (uzunluk, bilgi korunumu, eylem odağı) birer birer katkı sağladı (doğru cevap)
- Çıktılar rastgele üretildi
- Puanlama sistemi hatalı
Neden: puanlama bloğunda v1=1, v2=2, v3=3 puan alıyor -- her adımda SADECE bir değişkenin değişmesi, HANGİ değişikliğin hangi kritere katkı sağladığını NET kılıyor.
2. Prompt iyileştirmede AYNI ANDA birden fazla şeyi değiştirmenin SORUNU nedir?
- Hiçbir sorunu yoktur, daha hızlı sonuç verir
- Puan değişirse, HANGİ değişikliğin bu sonucu YARATTIĞINI ayırt edemezsin -- bu da istatistik kategorisindeki 'bir seferde bir değişken' ilkesinin ihlalidir (doğru cevap)
- Model bu durumda hata verir
- Sadece maliyeti artırır, başka etkisi yoktur
Neden: MathBox'ta AÇIKÇA belirtildiği gibi, v1->v2 ve v2->v3 arasında SADECE birer değişiklik var; ikisini AYNI ANDA yapsaydık, hangi değişikliğin puanı artırdığını AYIRT EDEMEZDİK.
3. 'Kriter olmadan iyileştirme yoktur' ifadesi NE anlama gelir?
- Her prompt için mutlaka bir matematik formülü gerekir
- 'Bu daha iyi görünüyor' gibi ÖZNEL bir yargı yerine, 'çıktı 15 kelimeden kısa mı', 'önemli bilgi korundu mu' gibi PROGRAMATİK OLARAK KONTROL EDİLEBİLİR kriterler tanımlanmadan, iyileşme NESNEL olarak ÖLÇÜLEMEZ (doğru cevap)
- Kriterler sadece JSON çıktılarında gereklidir
- Her prompt en az 3 kritere sahip olmalıdır
Neden: olcut-tanimlama bloğunda kriterler (uzunluk_ok, onemli_bilgi_var, eylemle_basliyor) TAMAMEN programatik (True/False) olarak tanımlanıyor -- kullanım bölümü bunun NEDEN gerekli olduğunu vurguluyor.
Özet
Özet
- Prompt iyileştirme üç adımlı bir döngüdür: ÖLÇ (net kriter tanımla), DEĞİŞTİR (tek bir şeyi değiştir), KARŞILAŞTIR (kritere göre puanla).
- Kriterler PROGRAMATİK OLARAK KONTROL EDİLEBİLİR olmalıdır -- "daha iyi görünüyor" ölçülemez.
- HER adımda SADECE TEK bir değişken değiştirilmeli -- aksi hâlde hangi değişikliğin işe yaradığı BELİRSİZLEŞİR.
- Bu dersteki örnekte, iki ayrı tek-değişken adımı puanı 1/3'ten 3/3'e çıkardı.
- 3-7. dersteki TÜM teknikler (persona, few-shot, CoT, format), bu döngüde test edilip TUTULAN ya da ATILAN hipotezlerdir.