Arıza Modu
Sabit bir değerlendirme set'ine karşı iterasyon yapan agent'lar göreve yakınsamaz. Set'e yakınsarlar. Bu ince bir istatistiksel artefakt değil; amaç fonksiyonunun sonlu ve statik bir örneklem olduğu bir optimizasyon döngüsünün öngörülebilir sonucudur. Her prompt revizyonu, her tool-call politikası ayarı, her skorlama eşiği düzenlemesi, set'in ölçmeyi amaçladığı temel yetenek yerine eval set'inin kendine özgü tuhaflıklarına doğru atılan bir gradyan adımıdır.
Bu dinamik, kendi kendini geliştiren agent literatüründe iyi belgelenmiştir. Google araştırmacıları, kendi kendini geliştiren agent'ların testleri ezberlemesini engelleyecek yöntemler önermiştir; çünkü varsayılan davranış ezberlemedir. Bir agent kendi eğitim sinyalini üretebildiğinde veya kendi prompt'larını iyileştirebildiğinde, "görevi öğrenmek" ile "testi öğrenmek" arasındaki sınır çözülür. Agent, gerçek bir yetenek ile skorlayıcıyı tatmin eden bir örüntü arasında ayrım yapamaz.
Kontaminasyon genellikle bir sonuç zaten yayımlandıktan sonra keşfedilir. Bir benchmark skoru raporlanır, bir model kartı güncellenir, bir blog yazısı yayımlanır. Aylar sonra biri, eval öğelerinin bir alt kümesinin bir eğitim korpusunda birebir göründüğünü veya agent'ın belirli bir dilimdeki çıktılarının şüpheli derecede tekdüze olduğunu fark eder. Geri çekme sancılıdır; güvene verilen zarar daha kötüdür. Pipeline'ın sorunu yayımdan önce yakalayacak hiçbir mekanizması yoktu, çünkü eval set'i yaşayan bir artefakt değil, sabit bir referans noktası olarak ele alıyordu.
Neden Bir Pipeline Hatası
Eval set'ler, eğitim ve prompt bağlamlarına soybağı olmadan kopyalanır. Bir JSONL dosyası commit edilir, sonra bir fine-tuning işine kopyalanır, sonra bir few-shot prompt'a yapıştırılır, sonra bir retrieval index'ine gömülür. Her kopya bir çataldır. Hiçbiri orijinaline bir referans taşımaz. Orijinal güncellendiğinde çatallar sessizce ayrışır. Bir çatal eğitime sızdığında, eval öğesi ile eğitim örneğinin ortak bir atası paylaştığına dair hiçbir kayıt yoktur.
İterasyon için kullanılan set ile raporlama için kullanılan set arasında holdout disiplini yoktur. Ekipler, rapor ettikleri aynı öğeler üzerinde iterasyon yapar. İterasyon set'i bir tuning set'ine dönüşür ve tuning set'i bir ezberleme hedefine dönüşür. Düzgün bir holdout sadece "bakmadığımız bir set" değildir; iterasyon döngüsünden yapısal olarak izole edilmiş, erişim kontrolleri ve denetim kayıtları olan bir settir.

Harness'taki değişiklikler, geçmiş sayıların karşılaştırılabilirliğini sessizce değiştirir. Harness, eval'i çalıştıran koddur: prompt şablonu, tool tanımları, ayrıştırma mantığı, skorlama fonksiyonu, yeniden deneme politikası, model sürümü. Bunlardan herhangi birindeki bir değişiklik, skorları bir ekibin ölçmeye çalıştığı etkiden daha fazla kaydırabilir. Ancak harness değişiklikleri tipik olarak eval set'inde bir sürüm artışı olmadan commit edilir, böylece bir dashboard aslında karşılaştırılamaz ölçümlerin bir birleşimi olan bir zaman serisi gösterir.
Kök neden bir kategori hatasıdır. Eval set'ler veri olarak ele alınır ve verinin atıl olduğu varsayılır. Ancak bir eval set'i, ona atıfta bulunan her sonucun bir bağımlılığıdır. Bir şeması, bir kökeni, bir dizi tüketicisi ve bir yaşam döngüsü vardır. Stack'teki diğer herhangi bir bağımlılıkla aynı sürümleme, inceleme ve kullanımdan kaldırma disiplinini hak eder.
Tasarım Kuralı: Eval'leri Sürümlenmiş Bağımlılıklar Olarak Ele Alın
Eval set'ini, harness'ı ve skorlama kodunu tek bir sürümlenmiş birim olarak sabitleyin. Üç ayrı sürüm değil; tek bir bileşik sürüm. Bir eval sürümü bir demettir: öğe set'i, prompt ve tool yapılandırması, skorlama uygulaması ve model tanımlayıcısı. Herhangi bir öğedeki herhangi bir değişiklik yeni bir sürüm üretir. Sürüm, insan tarafından atanmış bir etiket değil, bir içerik hash'idir, böylece kayamaz.
İterasyon için asla kullanılmayan, döndürülen özel bir holdout bulundurun. Holdout ayrı olarak yazılır, ayrı erişim kontrolleri olan ayrı bir depoda saklanır ve bir programa göre döndürülür. Döndürme, açığa çıkmış öğelerin emekliye ayrılması ve yenilerinin yazılması anlamına gelir. Bu pahalıdır ve dürüst ödünleşim budur: asla döndürülmeyen bir holdout, içeriği ekip bilgisine sızdığı anda fiili bir iterasyon set'i haline gelir. Döndürme maliyeti, bir anlam ifade eden ölçümün bedelidir.
Raporlanan her metrikle birlikte eval sürümünü kaydedin. Eval sürümü olmayan bir sayı bir sonuç değildir; bir söylentidir. Sürüm dashboard'larda, model kartlarında, deney takipçilerinde ve bir skora atıfta bulunan her belgede görünmelidir. Bir gözden geçiren "bu iyileşti mi?" diye sorduğunda, ilk soru iki sayının aynı eval sürümünü paylaşıp paylaşmadığıdır.
Somut bir mekanizma: demeti birbirine bağlayan bir manifest dosyası.
eval_version: sha256:9f2c...
items: s3://evals/holdout-2024-11/items.jsonl
harness:
prompt_template: sha256:1a4b...
tools: sha256:7c3d...
scoring: sha256:e8f1...
model: provider/model-nameerver-rack-closeup-48ae67-477829.jpg)
Manifest, atıf birimidir. Bir release gate, bir deploy'a izin vermeden önce manifest hash'ini kontrol eder. Bir dashboard, metriğin yanında hash'i gösterir. Bir eğitim pipeline'ı, manifest'i bir holdout manifest'iyle eşleşen öğeleri almayı reddeder. Hash, soybağıdır.
## Tespit
Zaman içinde öğe başına performansı takip edin. Toplu skorlar ezberlemeyi gizler. Öğe başına görünüm bunu ortaya çıkarır: bir zamanlar zor olan ve şimdi tekdüze geçilen öğeler, temel yetenekte karşılık gelen bir değişiklik olmadan geçme oranı sıçrayan öğeler, çıktıları tek bir ifadeye çökmüş öğeler. Şüpheli derecede tekdüze başarı bir sinyaldir. Gerçek görevlerin bir zorluk dağılımı vardır; bir dilimdeki her öğeyi geçen bir agent ya gerçekten yeteneklidir ya da dilimi görmüştür.
Herhangi bir sürüm kararından önce yeni yazılmış bir dilimle karşılaştırın. Taze dilim küçüktür, elle yazılmıştır ve iterasyon için asla kullanılmaz. Bir benchmark değildir; bir akıl sağlığı kontrolüdür. Agent'ın taze dilimdeki skoru iterasyon set'indeki skorundan ayrılırsa, iterasyon set'i kontamine veya aşırı uyumludur. Ayrışma, bulgunun kendisidir.
Bir harness değişikliğini yeniden temellendirme gerektiren kırıcı bir değişiklik olarak ele alın. Prompt şablonu, tool tanımları, ayrıştırma mantığı veya skorlama fonksiyonu değiştiğinde, önceki sayılar artık karşılaştırılamaz. Herhangi bir adayı karşılaştırmadan önce yeni harness üzerinde temel çizgiyi yeniden çalıştırın. Bu yavaştır ve ikinci dürüst ödünleşim budur: her harness değişikliğini yeniden temellendirmek hesaplama maliyetini çoğaltır ve iterasyonu yavaşlatır. Alternatif, ilerleme gibi görünen ve aslında karşılaştırılamaz ölçümler dizisi olan bir zaman serisidir. Yeniden temellendirmenin maliyeti sınırlıdır; kontamine bir sürüm kararının maliyeti değildir.
Daha derin nokta şudur: kendi kendini geliştiren agent'lar eval set'ini eğitim döngüsünün bir parçası haline getirir. Bu gerçekleştiğinde, eval set'i artık tarafsız bir gözlemci değildir. Bir katılımcıdır. Katılımcıların sürümlemeye, erişim kontrolüne ve döndürmeye ihtiyacı vardır. Pipeline kusuru agent'ların hile yapması değil; pipeline'ın onlara statik bir hedef verip buna ölçüm demesidir.
## Yaşam Döngüsü Yükümlülüğü
Eval set'ler çürür. Öğeler kamuya açılır, modeller onları ezberler, harness'lar kayar ve bir zamanlar anlam ifade eden sayılar gürültüye dönüşür. Yanıt, bir kez daha iyi bir set yazıp ummak değildir. Yanıt, set'i bir yaşam döngüsü olan bir bağımlılık olarak ele almaktır: yazılır, sürümlenir, tüketilir, döndürülür, emekliye ayrılır. Harness bu bağımlılığın bir parçasıdır, ayrı bir mesele değil. Sürüm sözleşmedir. Sözleşme açık olduğunda kontaminasyon tespit edilebilir, karşılaştırılabilirlik korunur ve raporlanan bir skor denetlenebilir bir iddiadır. Örtük olduğunda agent testi optimize eder, test görevi ölçmeyi bırakır ve sonuç kimse farkına varmadan yayımlanır.
