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 zinciri, format gibi bir dizi “kol” (lever) öğrendik. Peki hangisini, ne zaman, nasıl denemeliyiz — ve bir değişikliğin gerçekten iyileştirme olduğunu nasıl biliriz?
Sezgi
Prompt iyileştirme, kör bir deneme-yanılma değil, üç adımlı bir döngüdür: ölç (net, programatik bir başarı kriteri tanımla), değiştir (tek bir şeyi değiştir), karşılaştır (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 edilebilir kriterler tanımlayalım (uzunluk, bilgi korunumu, eylem odağı):
Ölç: kriterleri programatik hale getir
# Ölç adımı: net, programatik olarak kontrol edilebilir 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şılaştır adımı: her varyantı puanla ve neyin değiştiğini kaydet:
Karşılaştır: puan 1'den 3'e çıkıyor
# Karşılaştır adımı: her varyantı, kaç kriteri karşıladığına 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 ilerlemesi: 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, hangi değişikliğin neyi düzelttiği nettir.")
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 ilerlemesi: 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, hangi değişikliğin neyi düzelttiği nettir.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 ikisini aynı anda değiştirseydik, puan artışının hangi değişiklikten geldiğini ayırt edemezdik. Bu, deneysel yöntemin (istatistik kategorisinde gördüğümüz “bir seferde bir değişken” ilkesinin) prompt mühendisliğine uyarlanmasıdır.
Kod
Nerede işe yarar
Bu döngü, 1-7. derste öğrendiğimiz tüm tekniklerin (persona, few-shot, CoT, format) sistematik olarak nasıl seçileceğini 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ü otomatikleştirilir — düzinelerce prompt varyantı, yüzlerce test girdisiyle otomatik olarak puanlanıp karşılaştırılabilir.
- Her yineleme (iterasyon), önceki adımların üzerine inşa edilir — 3-7. dersteki her teknik, bu döngüde denenip tutulabilecek ya da atılabilecek bir “hipotez”dir.
Bu 2 hatayı yaparsın:
- Birden fazla değişikliği aynı anda yapmak — hangi değişikliğin sonucu etkilediğini artık bilemezsin.
- Kriterleri belirsiz bırakmak (“daha iyi olsun”) — 7. dersteki gibi, programatik olarak kontrol edilebilir 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, programatik 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, hangi değişikliğin hangi kritere katkı sağladığını net kılıyor.
2. Prompt iyileştirmede aynı anda birden fazla şeyi değiştirmenin sorunu nedir?
- Hiçbir sorunu yoktur, daha hızlı sonuç verir
- Puan değişirse, hangi değişikliğin bu sonucu yarattığını 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çıkça belirtildiği gibi, v1->v2 ve v2->v3 arasında sadece birer değişiklik var; ikisini aynı anda yapsaydık, hangi değişikliğin puanı artırdığını ayırt edemezdik.
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 programatik olarak kontrol edilebilir 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ğiştir (tek bir şeyi değiştir), karşılaştır (kritere göre puanla).
- Kriterler programatik olarak kontrol edilebilir 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ığı belirsizleşir.
- 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 atılan hipotezlerdir.