Prompt Engineering, Ölçülünce: Çıktıyı Ne Değiştirir
Altmış ticket, aynı kelimeler altı sırada; doğruluk %26,7–%85,0. Sonra dört internet taktiği ve her biri için hata çubukları.
Bu sayfada
İşte bir destek ticket’ı ve gidebileceği dört kuyruk.
The label on the parcel has my old surname on it.
-> billing / technical / shipping / accountOnu yönlendirmek için prompt içinde üç şeye ihtiyacın var: kuyruk tanımları, ticket ve birini seçme talimatı. Üç blok. Bunları yerleştirebileceğin altı sıra var ve altı sıranın tamamında bloklar tam olarak aynı karakterleri içeriyor.
Cevapları bilinen altmış ticket üzerinde, altı sıra %26,7 ile %55,0 arasında skor alıyor. Aynı iki bloğu user turn’den çıkarıp system turn’e taşı; tek bir kelimeyi bile değiştirme. Aynı model %76,7 alıyor. Ticket’ı XML tarzı bir tag içine sarınca %85,0’a ulaşıyor.
Model hakkında hiçbir şey değişmedi. Görev hakkında hiçbir şey değişmedi. Tek bir kelime yeniden yazılmadı. Elli sekiz puanlık oynama, aynı metni düzenleme biçiminden çıktı.
Bu bölümün var olma nedeni bu; aynı zamanda alanın en fazla cargo-cult bulaşmış konusunun bu olmasının nedeni de bu. Etkiler gerçek ve büyük; bu da her anekdotu doğrulanmış gibi hissettiriyor. Ama modeller ve görevler arasında kararsızlar; bu da çoğu tavsiyenin aslında yalnızca bir anekdot olduğu anlamına geliyor. Bu yüzden bu bölümün tek bir kuralı var ve içindeki her şey o kurala bağlı:
Bir prompt tartışılmaz, ölçülür. Yirmi vaka üzerinde dört varyant hiçbir şeyi ayırt etmez.
Prompt tüm state’tir
Bölüme bağlantı: Prompt tüm state’tirÖlçümlerden önce, aşağıdakilerin yarısını sessizce açıklayan bir gerçek.
Modelin hafızası yoktur. İki çağrı arasında hiçbir şeyi tutmaz — son sorunu, kendi son cevabını, eklediğin dosyayı, hatta ona zaten iki kez sorduğun gerçeğini bile. Her çağrı boş bir makineden başlar ve o makinenin bildiği tek şey, ona az önce verdiğin token dizisidir.
Bir chat arayüzünde hafıza gibi görünen şey, client’ının tüm konuşmayı, her turn’ü, baştan itibaren yeniden göndermesidir. Model her seferinde hepsini sıfırdan tekrar okur. Bölüm 13 bu yeniden okumanın bir forward pass içinde neye mal olduğunu ölçtü; Bölüm 16 bunu faturadaki bir satıra dönüştürüyor. Burada tasarım açısından önemli olan sonuç şu: prompt, state’i olan bir sisteme gönderilen bir mesaj değildir. State’in kendisidir.
Bu, bir grup kafa karışıklığını emekliye ayırır. “Model ona söylediğimi unuttu” genellikle bunun hiç gönderilmediği anlamına gelir. “Önceki talimatımı görmezden geldi” genellikle geçmiş kırpıldığında talimatın window dışına düştüğü anlamına gelir. “Production’da farklı davrandı” genellikle production’ın test ettiğinden farklı bir prompt birleştirdiği anlamına gelir. Bunların hiçbiri model problemi değildir ve hiçbiri bir şeyi yeniden ifade ederek çözülmez.
“Bu prompt daha iyi” iddiası bir dağılım hakkındaki iddiadır ve tek bir çıktıya bakarak bir dağılım göremezsin. İhtiyacın olan şey sıkıcıdır: bilinen cevapları olan vakalar, N varyant ve bir aralık.
Harness, Bölüm 14’teki client ile aynı şekle sahip elli satırlık TypeScript’tir — bir request, bir deadline, biraz concurrency, bir sayım. Bölüm 19’da bir retriever’ı değerlendirmek için ve Bölüm 29’da golden set olarak tekrar ortaya çıkar.
export type Case = { input: string; expected: string };
export type Variant = { name: string; build: (c: Case) => ChatMessage[] };
async function pooled<T, R>(xs: T[], n: number, f: (x: T) => Promise<R>) {
const out: R[] = new Array(xs.length);
let i = 0;
await Promise.all(
Array.from({ length: n }, async () => {
while (i < xs.length) {
const k = i++;
out[k] = await f(xs[k]);
}
}),
);
return out;
}
export async function runVariant(v: Variant, cases: Case[], concurrency = 6) {
const hits = await pooled(cases, concurrency, async (c) => {
const answer = await complete(v.build(c));
return answer.trim().toLowerCase() === c.expected;
});
return { name: v.name, hits, k: hits.filter(Boolean).length, n: cases.length };
}Geri dönen sayı sonuç değildir. Sonuç budur:
/** 95 % Wilson score interval for a proportion. Chapter 4 derives it. */
export function wilson(k: number, n: number, z = 1.96) {
const p = k / n;
const d = 1 + (z * z) / n;
const centre = (p + (z * z) / (2 * n)) / d;
const half = (z * Math.sqrt((p * (1 - p)) / n + (z * z) / (4 * n * n))) / d;
return [Math.max(0, centre - half), Math.min(1, centre + half)] as const;
}Bölüm 4 argümanı kurdu, bu bölüm de onu tahsil ediyor. Yirmide on yedi doğru %85’tir ve %95 aralığı %64’ten %95’e uzanır. 20’de 13 alan bir varyant — %65, açıkça daha kötü hissettirir — %43 ile %82 arasında bir aralığa sahiptir. Bu iki aralık neredeyse tüm uzunlukları boyunca çakışır. Yirmi vaka iyi bir prompt’u orta halli olandan ayıramaz ve yayımlanmış prompt tavsiyelerinin çoğu daha azıyla doğrulanmıştır.
Bu bölümün kullandığı altmış vaka hâlâ çok değildir. Büyük etkileri görmek için yeterlidir ve küçük etkileri göremediğinde bunu kabul edecek kadar dürüsttür — aşağıda bunu birkaç kez yapacak.
Position: aynı kelimeler, altı sıra
Bölüme bağlantı: Position: aynı kelimeler, altı sıraÜç blok — kurallar R, ticket T, talimat I — tek bir user message içine birleştirildi. Altı permütasyonun tamamı, byte düzeyinde özdeş içerik, her biri altmış vaka.
| üç bloğun sırası | doğru | doğruluk, %95 Wilson |
|---|---|---|
| kurallar, talimat, ticket | 33/60 | %55,0 [42,5, 66,9] |
| kurallar, ticket, talimat | 30/60 | %50,0 [37,7, 62,3] |
| ticket, kurallar, talimat | 22/60 | %36,7 [25,6, 49,3] |
| talimat, ticket, kurallar | 21/60 | %35,0 [24,2, 47,6] |
| talimat, kurallar, ticket | 17/60 | %28,3 [18,5, 40,8] |
| ticket, talimat, kurallar | 16/60 | %26,7 [17,1, 39,0] |
En iyiden en kötüye fark 28,3 puan ve aralıklar çakışmıyor; yani bu, gürültüyle ilgili bir hikâye değil. Her arm aynı altmış item üzerinde skorlandığı için daha keskin soru paired olandır: iki arm’ın anlaşamadığı vakalarda bölünme ne kadar tek taraflı? En kötü sıradan en iyi sıraya geçiş 21 vakayı doğruya, 4 vakayı yanlışa çevirdi — exact paired probability 0,0009.3
Tabloyu kazananı için değil, şekli için oku. En iyi iki satır da ticket ile bitiyor; en kötü iki satır talimatı ya ortaya gömüyor ya da veriden sonra sürüklüyor. Bu, Liu ve arkadaşlarının Lost in the Middle adını verdiği fenomenin aynısıdır: bir prompt’un kenarlarındaki materyal, merkezdeki materyalden daha güvenilir kullanılır.4 Bölüm 16 window’un fiyatını çıkarıyor; Bölüm 24 ise etkiyi uzunlukta düzgün biçimde ölçüyor: orada orta kısım tarif edildiği gibi çöküyor ve en sondaki toparlanma yeniden görünmüyor. Burada pratik kural kendiliğinden çıkıyor: görev üstte, veri altta, ortada önemli hiçbir şey yok.
Şimdi aynı kelimeleri turn’ler arasında taşı. Bölüm 11, chat template’in modelin etrafındaki dekorasyon değil, onun bir parçası olduğunu ortaya koydu — <|im_start|>system ve <|im_start|>user, modelin fine-tuning sırasında tam da bu pozisyonlarda milyonlarca kez gördüğü gerçek token’lar. Bu yüzden talimatının bu marker’ların hangi tarafına düştüğü önemli olmalı; ve oluyor:
| aynı kelimeler nerede duruyor | doğru | doğruluk, %95 Wilson |
|---|---|---|
| kurallar ve talimat system turn’de, ticket tek başına user turn’de | 46/60 | %76,7 [64,6, 85,6] |
| kurallar system turn’de, talimat ve ticket user turn’de | 44/60 | %73,3 [61,0, 82,9] |
| kurallar ve talimat system turn’de, talimat ticket’tan sonra tekrarlandı | 42/60 | %70,0 [57,5, 80,1] |
| üç blok da tek bir user turn’de | 33/60 | %55,0 [42,5, 66,9] |
Kuralları ve talimatı template sınırının öbür tarafına taşımak 21,7 puan kazandırdı — 19 vaka kazanıldı, 6 kaybedildi, paired probability 0,0146 — üstelik tek bir karakter değiştirmeden. System prompt versus user prompt sorusunun somut cevabı budur: bunlar aynı şeyi söylemenin iki yolu değildir. Modelin üzerinde eğitildiği bir yapıda iki farklı token pozisyonudur ve system pozisyonu, tüm konuşmaya uygulanacak talimatların ait olduğu yerdir.
Üçüncü satıra da dikkat et. Ticket’tan sonra talimatı tekrarlamak — yaygın önerilen bir taktik — onu bir kez söylemenin altında skor aldı. Bu modelde, bu görevde, iki kez söylemek bir kez söylemekten kötüydü.
Delimiter’lar ve içlerinde saklanan istatistik dersi
Bölüme bağlantı: Delimiter’lar ve içlerinde saklanan istatistik dersiAynı prompt, en iyi yerleşim, altmış vaka. Değişen tek şey ticket metninin etrafında ne olduğudur.
| ticket nasıl delimiter ile ayrıldı | doğru | doğruluk, %95 Wilson |
|---|---|---|
| XML tarzı bir tag | 51/60 | %85,0 [73,9, 91,9] |
| hiçbir şey yok | 48/60 | %80,0 [68,2, 88,2] |
| bir Markdown heading | 47/60 | %78,3 [66,4, 86,9] |
bir label, Ticket: | 46/60 | %76,7 [64,6, 85,6] |
| hash fence’ler | 45/60 | %75,0 [62,8, 84,2] |
| triple backticks | 44/60 | %73,3 [61,0, 82,9] |
| çift tırnak | 40/60 | %66,7 [54,1, 77,3] |
Noktalama işaretinden on sekiz puanlık yayılım. Ama iki uç aralığa bak: [73,9, 91,9] ve [54,1, 77,3]. Çakışıyorlar. Kaba okumaya göre — hata çubuklarını karşılaştır, değiyorlarsa hiçbir şey söyleme — bu tablo hiçbir şeyi kanıtlamaz.
Kaba okuma burada yanlış ve nedenini anlamak tablodan daha değerlidir. Her varyant aynı altmış ticket üzerinde skorlandı; yani iki ölçüm bağımsız örneklem değildir, paired’dır. Her aralığın genişliğinin çoğu, iki arm’ın paylaştığı bir belirsizlik kaynağından gelir — bu altmış ticket’ın temsil edici olup olmadığı — ve onları birbirleriyle karşılaştırdığında bu kaynak iptal olur. Bunun yerine paired soruyu sor ve cevap keskindir: çift tırnaktan XML tag’e geçmek 12 vakayı doğruya, 1 vakayı yanlışa çevirdi; paired probability 0,0034. Bu gerçek bir farktır.
Sonra aynı test manşeti söndürür. XML tag, düz Ticket: label’ını 8,3 puan geçti; bir blog yazısının başlığına koyacağı sayı budur. Paired: 6 kazanım, 1 kayıp, probability 0,1250. Kanıtlanmış değil. O ünlü iyileştirmenin dayandığı şey yedi vakadır.
Yani iki farklı soru ve iki farklı araç var; bunları karıştırmak prompt tavsiyesinin aynı anda iki yönde de yanlış gitmesine yol açar:
Bu prompt ne kadar iyi? Kendi doğruluğu üzerindeki Wilson aralığı. Yüzlerce vakan yoksa geniştir. Ship edip etmemeye karar veren birine raporlayacağın sayı budur.
B, A’dan daha mı iyi? Anlaşamadıkları vakalar üzerindeki paired test. Setin paylaşılan zorluğu iptal olduğu için çok daha hassastır. İki aday arasında karar verirken kullanacağın sayı budur.
Genel bulgu — modellerin semantik içerik taşımayan biçimlendirme seçimlerine güçlü ve öngörülemez biçimde duyarlı olduğu — yeni değil. Sclar ve arkadaşları düzinelerce görevde sadece ayırıcıları, boşlukları ve büyük-küçük harfi değiştirdi ve doğruluk yayılımlarının yayımlanmış model sıralamalarını tersine çevirecek kadar geniş olduğunu buldu.5 Pratik sonuç “XML tag kullan” değildir. Sonuç şudur: formatting bir hyperparameter’dır, sweep etmenin maliyeti yoktur ve tek bir formatı sabitleyen iki model karşılaştırması, modeller kadar formatları da karşılaştırır.
Gerçekte kaç örnek yeterlidir
Bölüme bağlantı: Gerçekte kaç örnek yeterlidirIn-context learning — modele prompt içinde çalışılmış örnekler göstermek ve herhangi bir weight update olmadan onlardan genelleme yapmasını sağlamak — GPT-3’ü ünlü yapan kabiliyettir.6 Pratik soru hiçbir zaman çalışıp çalışmadığı değildir. Kaç örnek için ödeme yapmaya değeceğidir.
Örnekler, template’in üzerinde eğitildiği yapı bu olduğu için, gerçek prior turn’ler olarak, user ve assistant dönüşümlü biçimde girer. Her k, on altı etiketli ticket’tan oluşan ayrık bir havuzdan beş farklı random draw ile çalıştırıldı:
| örnekler | ortalama doğruluk | en kötü ve en iyi draw | draw’lar arası yayılım |
|---|---|---|---|
| 0 | %76,7 | — | — |
| 1 | %78,7 | %78,3 – %80,0 | 1,7 puan |
| 2 | %83,7 | %80,0 – %86,7 | 6,7 puan |
| 4 | %81,7 | %78,3 – %86,7 | 8,3 puan |
| 8 | %83,7 | %78,3 – %88,3 | 10,0 puan |
| 16 | %89,3 | %85,0 – %93,3 | 8,3 puan |
İki örnek yedi puan kazandırdı. Sonraki altı örnek ölçülebilir hiçbir şey kazandırmadı — 83,7, sonra 81,7, sonra 83,7; kendi gürültüsü içinde dolaşan bir dizi. On altı örnek bir beş buçuk puan daha kazandırdı. Eğri pürüzsüz bir tırmanış değil; bir basamak, bir plato ve bir basamak.
En önemli sütun son sütundur. k = 8 seviyesinde, tesadüfen hangi sekiz örneği seçtiğin doğruluğu 10 puan oynattı — iki örnekten sekize çıkmanın tüm kazancından büyük. En alt satır bunun en keskin versiyonudur: k = 16 seviyesinde havuz tükenir; yani beş run’ın tamamı tam olarak aynı on altı örneği içerir, yalnızca göründükleri sıra farklıdır. Sadece sıra doğruluğu 8,3 puan oynattı.
Lu ve arkadaşlarının raporladığı sonuç budur ve arandığı her yerde hayatta kalır: örnek sıralaması, etkisi örnek sayısıyla kıyaslanabilir gerçek bir hyperparameter’dır.7 Bu yüzden few-shot prompting hakkındaki dürüst tavsiye bir sayı değildir. Şudur:
Sıfırdan başla ve örnekleri yalnızca ölçüme karşı ekle
Bölüme bağlantı: Sıfırdan başla ve örnekleri yalnızca ölçüme karşı ekleİlk ikisi genellikle değer. Ondan sonrası tahmindir ve bu tahmin ürünün ömrünün geri kalanında her tek çağrıda token maliyeti yaratır.
Seçimi prompt’un bir parçası olarak ele al
Bölüme bağlantı: Seçimi prompt’un bir parçası olarak ele alİyi seçilmiş iki örnek, dikkatsiz seçilmiş sekiz örneği yener. Örneklerin bir spreadsheet’in tepesinden geldiyse, daha fazlasını eklemeden önce sweep edilecek değişken budur.
Sırayı bir kez sweep et, sonra dondur
Bölüme bağlantı: Sırayı bir kez sweep et, sonra dondurÜcretsizdir, gerçek bir etkidir ve bu bölümdeki çoğu şeyin aksine denemek için yeniden yazım gerektirmez.
Class balance’ı kontrol et
Bölüme bağlantı: Class balance’ı kontrol etHepsi aynı label olan dört örnek modele görevi değil label’ı öğretir. Bu modelin, hangi kuyruk en son listelendiyse ona çökmesi aynı hatanın farklı kostümüdür.
İnternetten dört cümle
Bölüme bağlantı: İnternetten dört cümleŞimdi folklor. Bunların her biri, bunun dışında özdeş olan bir system prompt’un başına eklenen tek bir cümledir; aynı altmış vaka üzerinde.
| system prompt’a eklenen cümle | doğru | doğruluk, %95 Wilson | baseline’a karşı paired |
|---|---|---|---|
| hiçbir şey eklenmedi | 46/60 | %76,7 [64,6, 85,6] | — |
| “Derin bir nefes al ve bu problem üzerinde dikkatle çalış.” | 47/60 | %78,3 [66,4, 86,9] | +4 / −3, p = 1,000 |
| “Bu kariyerim için çok önemli.” | 46/60 | %76,7 [64,6, 85,6] | +5 / −5, p = 1,000 |
| “Yirmi yıllık deneyime sahip world-class bir müşteri destek operasyonları uzmanısın.” | 42/60 | %70,0 [57,5, 80,1] | +3 / −7, p = 0,344 |
| “Doğru cevap verirsen sana $200 bahşiş vereceğim.” | 41/60 | %68,3 [55,8, 78,7] | +1 / −6, p = 0,125 |
| “Yanlış kuyruğa gönderdiğin her ticket için cezalandırılacaksın.” | 25/60 | %41,7 [30,1, 54,3] | +3 / −24, p < 0,001 |
Beşin dördü hiçbir şey yapmadı. “Biraz yaptı” değil; altmış paired vakanın görebileceği hiçbir şey yapmadı. Uzman persona’sı ve rüşvet, dokunulmamış baseline’ın altında skor aldı; o düşüşler bile paired test’i geçemiyor — aşağı yönü işaret eden gürültüler.
Üzerinde durulacak satır üçüncüsü. “Bu kariyerim için çok önemli” tam olarak aynı doğruluğu üretti, 60’ta 46 — ve altmış cevabın onu değişti, beşi her yönde. Özet istatistik aynıydı, davranış aynı değildi. Değerlendirmen küçük bir set üzerindeki tek bir sayıysa, çıktılarının altıda birini yeniden yazan bir değişiklik hiçbir şey yapmamış gibi görünebilir ve bunu bedava olduğuna inanarak ship edersin.
Sonra tehdit var; iğneyi oynatan tek cümle bu ve onu 35 puan aşağı oynattı, 24 vakayı doğrudan yanlışa çevirdi. Bu bir yuvarlama artefact’ı değil; farklı bir model davranışı. Ders “bir modeli asla tehdit etme” değildir. Ders, duygusal çerçevenin inert olmadığıdır. Dağılımı kaydırır, bazen sert biçimde; üstelik cümleyi okuyarak kimsenin tahmin edemeyeceği bir yöne. Tam da bu yüzden hakkında akıl yürütülmek yerine ölçülmelidir.
Bu bölümün sana borçlu olduğu bir caveat: Bu beş cümle tek bir küçük modelde ve tek bir görevde test edildi. Bazılarının başka yerlerde yayımlanmış desteği var — “derin bir nefes al” yüksek skor alan talimatları icat etmek yerine onları arayan bir makaleden çıktı; bu, sonradan dolaşıma giren iddiadan farklı ve daha iyi bir iddiadır.8 Genelleşen şey cümleler değil. Blog yazılarında hayatta kalan liste ile ölçümde hayatta kalan listenin iki farklı liste olmasıdır; hangisini tuttuğunu bilmenin tek yolu bench’i çalıştırmaktır.
“Yapma” neden başarısız olur
Bölüme bağlantı: “Yapma” neden başarısız olurHerkesin tekrarladığı bir kural — ne istemediğini değil, ne istediğini söyle — ve her zamanki gibi yanında sayı yok. İşte sayı. Aynı format gereksinimi, üç farklı biçimde yazıldı; modelin serbest üretmesine izin verildi ki uyum gözlemlenebilsin:
| format kuralı nasıl yazıldı | çıktı tam olarak izin verilen tek bir kelimeydi | ortalama output token |
|---|---|---|
| “Tek kelimeyle cevapla.” | 10/60 (%16,7) | 2,6 |
| “Kendini açıklama. Cümle yazma. Noktalama ekleme.” | 1/60 (%1,7) | 14,0 |
| ikisi birlikte | 41/60 (%68,3) | 2,3 |
Üç yasak, tek bir talimattan kötü performans gösterdi ve modele beş kat daha fazla metin yazdırdı — üçünün de aynı anda tam tersi. Pozitif cümleyi geri eklemek bunu %68’e kurtardı.
Mekanizma Bölüm 8’i hatırladığında gizemli değildir. Model, kendinden önceki her şeye koşullanmış bir dağılımdan next token seçer ve bir yasak, yasaklanan şeyi bu koşullamanın içine koyar. Negation için bir operator yoktur; artık bir kelimenin göründüğü bir context vardır.
Bu doğrudan ölçülebilir. Baseline prompt’u al ve bir satır ekle: Do not use the shipping queue for software problems. Sonra yalnızca shipping ticket’ı olmayan kırk beş ticket’a bak:
shipping seçildi | shipping üzerindeki ortalama olasılık | genel doğruluk | |
|---|---|---|---|
| baseline | 45 vakanın %11,1’i | 0,131 | %76,7 [64,6, 85,6] |
| adını söyleyerek yasakladıktan sonra | %37,8 | 0,374 | %51,7 [39,3, 63,8] |
Bir kuyruğu elemek için adını söylemek, modelin onu üç kat daha sık seçmesine neden oldu, ona atadığı probability mass’i neredeyse üçe katladı ve genel doğruluktan 25 puan götürdü — 16 vaka kaybedildi, 1 kazanıldı, paired probability 0,0003.
Bir fili düşünme, ölçülmüş hali. Rewrite her zaman aynıdır: yasağı gereksiz kılan pozitif kuralla değiştir. “Software problemleri için shipping kullanma” değil; “shipping’i yalnızca fiziksel bir paket söz konusu olduğunda kullan”.
Dürüst karşı örnek: maliyetli olan ve karşılığını vermeyen chain of thought
Bölüme bağlantı: Dürüst karşı örnek: maliyetli olan ve karşılığını vermeyen chain of thoughtBölüm 12 chain of thought’u düzgün inşa etti — önce bir prompting tekniği olarak,910 sonra doğrulanabilir ödüllerle eğitilmiş bir şey olarak — ve bu bölüme ertelediği bir uyarıyla bitti: bir modele adım adım düşünmesini söylemek, model kendi başına akıl yürütmeye başladığında yardımcı olmayı bırakır ve zarar verebilir. İşte o uyarı, altında bir tabloyla; daha fazla düşünmenin daha iyi olması gerektiğini varsaymanın kolay olduğu bir görevde.
İki arm da aynı instrument ile aynı pozisyonda okunur. Tek fark, modelin kendisinin yazdığı bir chain of thought’un önce context içinde durup durmamasıdır.
| arm | doğru | doğruluk, %95 Wilson | vaka başına ekstra output token |
|---|---|---|---|
| chain of thought yok | 37/60 | %61,7 [49,0, 72,9] | 0 |
| chain of thought, 60 token’a kadar | 34/60 | %56,7 [44,1, 68,4] | 53,1 |
| chain of thought, 200 token’a kadar | 34/60 | %56,7 [44,1, 68,4] | 97,7 |
Doğruluk düştü, maliyet arttı; ve bu bölümün kendi kuralı kendi sonucuna da uygulanır: düşüş 7 vaka kazanıma karşı 10 kayıp, paired probability 0,629; yani kanıtlanmış değil. Kanıtlanmış olan şey, çağrı başına doksan sekiz ekstra output token ürettiği ve ölçülebilir hiçbir şey satın almadığıdır. Belirsizlik tamamen fayda tarafındadır. Fatura kesindir.
Başarısız olan bir chain, çalışan bir chain’den daha öğreticidir. “Slack integration’ın Salı gününden sonra mesaj göndermeyi bıraktı” hakkında akıl yürütmesi istendiğinde model şunu yazdı:
1. Check if the issue persists on Monday.
2. Verify if there are any updates or changes in your Slack setup that
might affect message posting.
3. If no update has been made since Tuesday, check for any recent system
restarts or downtime affecting Slack functionality.
4. If you have recently installed new software or updated your
environment, ensure it's compatible with Slack version.
5. Contact Slack support for further assistance or troubleshooting steps.Bu yetkin troubleshooting tavsiyesidir ve görev bu değildir. Düşünmesi istendiğinde model, eğitim verilerinde “bu destek ticket’ı hakkında adım adım düşün” ifadesinin en çok benzediği türe kaydı — sonra bir sınıflandırma sorusunu kendi context’i içinde beş yüz karakterlik alakasız akıl yürütmeyle cevapladı. Chain of thought, hesaplanmaya değer ara state içeren problemlerde yardımcı olur: aritmetik, multi-hop lookup’lar, constraint satisfaction. Bir cümleyi dört bucket’tan birine yönlendirmede ara state yoktur. Chain’in tutacağı hiçbir şey yoktur; bu yüzden yaptığı tek şey, nihai kararın sonra içinden sağ çıkması gereken makul metin eklemektir.
İki pratik sonuç. Birincisi, akıl yürütmek üzere eğitilmiş bir model için — Bölüm 12’nin RLVR modelleri — talimat gereksiz olmaktan kötüdür: modelin üreteceği uzun chain’i kısa, prompt şekilli bir chain ile değiştirebilir. Ve self-consistency’nin yaptığı gibi birkaç chain örnekleyip oylamak,11 üzerinde anlaşmazlık olacak hiçbir şey bulunmayan bir görevi kurtaramaz: olmayan beraberlikleri bozmak için maliyeti sample sayısıyla çarpar. Bölüm 12 bu trade’i geçerli olduğu yerde ölçtü. İkincisi, karşılaştırma scaffold’unun kendisinin neye mal olduğuna dikkat et. Cevabı bir Final queue: satırına zorlamak, no-reasoning arm’ı %76,7’den %61,7’ye düşürdü. On beş puan, iki arm’ı karşılaştırılabilir yapmak için ödendi. Senin kolaylığın için var olan yapı da bedava değildir.
Aynı çağrı, iki kez
Bölüme bağlantı: Aynı çağrı, iki kezSon bir ölçüm; çünkü ilk şaşırtıcı sonuçtan sonra herkesin sorduğu soru bu. Altmış prompt, greedy decoding, tekrar tekrar çalıştırıldı:
- Aynı çağrı, her şey sabit tutulup tekrarlandığında bit-identical olasılıklar döndürdü. Deterministic.
- Aynı çağrı farklı komşularla batch’lendiğinde — batch size 1, 4, 12, 30 ve 60 — olasılıklar 0,0128’e kadar farklılaştı. Seçilen label 60 vakanın 0’ında değişti.
Label hayatta kaldı çünkü alanı vardı: altmış vaka genelinde en yüksek iki kuyruk arasındaki en dar gap 0,0459 idi, drift’in üç buçuk katı. Stabilite algoritmanın bir özelliği değildi. Bir margin’di ve margin’ler tükenir. Bölüm 17, aritmetik nedenin yaşadığı ve o gap’leri genişletip daraltan sampling knob’larının parçalara ayrıldığı yerdir. Bunu buraya dikmenin nedeni, herhangi bir prompt ölçümünün ne anlama gelebileceğini sınırlamasıdır: bench, yalnızca bir toleransa kadar yeniden üretilebilir olan bir sistemi ölçer ve varyantlar arasındaki iki puanlık fark kötü bir günde o toleransın içindedir.
Fikir yürütmeyi bırak, aramaya başla
Bölüme bağlantı: Fikir yürütmeyi bırak, aramaya başlaYukarıdaki her şey, bir insanın varyant seçmesi ve bir makinenin onu puanlamasıdır. Bariz sonraki adım, varyantları da makinenin seçmesine izin vermektir.
APE tam olarak bunu yapar: bir model aday talimatlar önerir, bunlar held-out örneklerde skorlanır ve en iyiler hayatta kalır.8 Bulduğu talimatlar çoğu zaman hiçbir insanın yazmayacağı şeylerdir; amaç da budur — arama, profesyonel duyulana değil, skor alana yapılır.
DSPy daha ileri gider ve bir ürün için daha kullanışlı fikirdir.12 Bir pipeline’ın her adımının ne aldığı ve ne döndürdüğünü bildirirsin; framework bunu prompt’lara compile eder, demonstration’ları seçer ve talimatları metriğine göre optimize eder. Model değiştirince yeniden yazmak yerine recompile edersin. Prompt, birinin elle tune ettiği source code olmaktan çıkar ve bir metriğe karşı üretilmiş artefact haline gelir; en başından beri olması gereken de buydu.
Hiçbiri bench ihtiyacını ortadan kaldırmaz. İkisi de bench’i ihtiyacın olan tek şey yapar; çünkü metriği olmayan bir optimizer hiçbir şeyi optimize etmez.
Geriye discipline kalıyor. Prompt’lar version control’de, dosyalarda, onları gönderen kodun yanında olmalıdır — birinin Salı günü düzenlediği database satırında değil. Ürettikleri her output’un yanında saklanan bir version identifier’a ihtiyaçları var; yoksa bir şey regresse ettiğinde neyin değiştiğini bulamazsın. Continuous integration içinde bench’e ihtiyaçları var; çünkü prompt, sisteminin bir vendor tarafından yeni bir model deploy edilerek sessizce geçersiz kılınabilecek tek parçasıdır. Ve vakalara ihtiyaçları var: yüz tane zeki vaka değil, geçen çeyrekte kırılan sıkıcı yirmi vaka; sonsuza kadar saklanmalı. Teslimat bench’tir. Prompt onun yan ürünüdür.
Bundan sonra nereye gidiyoruz
Bölüme bağlantı: Bundan sonra nereye gidiyoruzBu bölümdeki her şey doğrulukla ölçüldü. O varyantların her birinin bir fiyatı da var.
21,7 puan kazandıran system prompt her çağrıda, sonsuza kadar gönderilir. Yedi puan kazandıran iki örnek her çağrıda, sonsuza kadar gönderilir. On iki puan kazandıran on altı örnek her çağrıda, sonsuza kadar gönderilir ve kullanıcının gerçekten sorduğu sorunun yaklaşık on katı uzunluğundadır. Hiçbir şey kazandırmayan chain of thought, request başına doksan sekiz ekstra token üretti ve output token’lar pahalı olan türdür.
Bunların hiçbiri doğruluk tablolarında görünmez ve hepsi faturada görünür.
Bölüm 16, bu kararların gerçekte denominated olduğu birim hakkındadır. Billing unit olarak token, hafıza değil budget olarak context window, kırk turn’lük bir konuşmanın neden ilk turn’ün kırk katından çok daha pahalı olduğu, prompt caching’in neyi ödediği ve neyi ödemediği, prompt’unun sırasının cache hit olup olmayacağını neden belirlediği — bunun stable materyali başa, variable materyali sona koymak için ikinci, tamamen ekonomik bir neden olduğu ortaya çıkar.
Kaynaklar ve yöntem
Bölüme bağlantı: Kaynaklar ve yöntemBench ve her tablo greedy decoding altında Qwen/Qwen2.5-0.5B-Instruct ile üretildi; bu yüzden tam olarak yeniden üretilirler. Hugging Face’in chat template dokümantasyonu, Bölüm 11’deki template marker’larının gerçekte neye expand ettiğine ve yanlış template ile ship edilen bir modelin gerçek ve tekrarlayan bir failure olduğuna dair referanstır. Laboratory scale yerine production scale’de position ve format effect’leri için yukarıdaki atıflar primary source’lardır; vendor prompting guide’ları örnekleri açısından faydalıdır ve hiçbirinin bir aralık yayımlamadığı bilinerek okunmalıdır.
Referanslar
Bölüme bağlantı: Referanslar-
Anthropic, Effective context engineering for AI agents (29 Eylül 2025), bu bölümde kullanılan ve Bölüm 24’te geliştirilen prompt-versus-context ayrımı için. ↩
-
Zhao, Z., Wallace, E., Feng, S., Klein, D. and Singh, S. Calibrate Before Use: Improving Few-Shot Performance of Language Models. arXiv:2102.09690 (2021). Majority-label, recency ve common-token bias; ve bu bölümün bench’inde rotation’ın neden optional olmadığı. ↩
-
McNemar, Q. Note on the sampling error of the difference between correlated proportions or percentages. Psychometrika 12(2), ss. 153–157 (1947). Bu bölümdeki paired karşılaştırmalar, discordant count’lar küçük olduğu için chi-squared approximation yerine exact binomial form kullanır. ↩
-
Liu, N. F. et al. Lost in the Middle: How Language Models Use Long Contexts. arXiv:2307.03172 (2023). Burada position effect için alıntılandı; uzunlukta Bölüm 24’te ölçüldü. ↩
-
Sclar, M., Choi, Y., Tsvetkov, Y. and Suhr, A. Quantifying Language Models’ Sensitivity to Spurious Features in Prompt Design. arXiv:2310.11324 (2023). Yalnızca separator’lar ve spacing, doğruluğu model leaderboard’larını yeniden sıralayacak kadar oynatır. ↩
-
Brown, T. B. et al. Language Models are Few-Shot Learners. arXiv:2005.14165 (2020). In-context learning’i bir meraktan çok bir kabiliyet olarak tanıtan makale; bölüm 3, herkesin artık kullandığı zero-shot / one-shot / few-shot sözlüğünün kaynağıdır. ↩
-
Lu, Y., Bartolo, M., Moore, A., Riedel, S. and Stenetorp, P. Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity. arXiv:2104.08786 (2021). Yukarıdaki few-shot tabloda yeniden üretilen sonuç. ↩
-
Zhou, Y. et al. Large Language Models Are Human-Level Prompt Engineers. arXiv:2211.01910 (2022). Öneri ve skorlama yoluyla automatic prompt engineering. Çok alıntılanan “derin bir nefes al” talimatı Yang, C. et al., Large Language Models as Optimizers, arXiv:2309.03409 (2023) çalışmasından gelir; bu çalışma onu tek bir görevde ve tek bir modelde aramayla buldu — blog yazılarına yolculuğu boyunca bozulmadan kalmayan bir iddia. ↩ ↩2
-
Wei, J. et al. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. arXiv:2201.11903 (2022). ↩
-
Kojima, T., Gu, S. S., Reid, M., Matsuo, Y. and Iwasawa, Y. Large Language Models are Zero-Shot Reasoners. arXiv:2205.11916 (2022). “Adım adım düşünelim” sonucu; koşulların ne kadar dar olduğunu görmek için okumaya değer. ↩
-
Wang, X. et al. Self-Consistency Improves Chain of Thought Reasoning in Language Models. arXiv:2203.11171 (2022). Bölüm 12’de maliyeti eklenmiş olarak ölçüldü. ↩
-
Khattab, O. et al. DSPy: Compiling Declarative Language Model Calls into Self-Improving Pipelines. arXiv:2310.03714 (2023). ↩