Belirti ve yanlış teşhis
Bir ekip bir agent yayına alır, eval paketini çalıştırır ve toplam skorun birkaç hafta boyunca yükseldiğini, sonra düzleştiğini izler. Bazen skor sıçrar, sonra arada hiçbir kod değişikliği olmadan bir sonraki çalıştırmada düşer. İçgüdü mimariye uzanmaktır: planner'ı değiştir, bir critic agent ekle, retrieval penceresini genişlet, tool-calling şemasını değiştir. Haftalarca mühendislik, hiç modelde olmayan bir soruna harcanır.
Eval setinin kendisi kaymıştır. Öğeler sürüm numarası artırılmadan yerinde düzenlenmiştir. Bir avuç örnek üzerinde ayarlanmış bir prompt şablonu, o örnekleri sessizce few-shot bloğuna emmiştir. İç dokümantasyondan oluşturulmuş bir retrieval index'i, eval sorularını ve cevaplarını içeriyor çıkmıştır. Skor hareket etmiştir çünkü ölçüm aracı hareket etmiştir ve kimse fark etmemiştir çünkü araç hiçbir zaman bir artefakt olarak ele alınmamıştır.
Yardımcı olan çerçeveleme şudur: bir eval seti bir veri setidir. Yazarlığı, kökeni, lisans kısıtları, gizlilik maruziyeti, bir dağılımı ve bir yaşam döngüsü vardır. Onu herkesin düzenleyebildiği bir JSON klasörü olarak ele almak, çoğu kirlenmenin kök nedenidir. Çözüm daha akıllı bir model değildir. Çözüm, eğitim verisine uygulanan aynı disiplinin ölçüm yaptığınız şeye uygulanmasıdır.
Eval setini sürümlenmiş bir artefakt olarak ele alın
Bir eval seti yayımlandıktan sonra değişmez olmalıdır. "Düzenlememeye çalışıyoruz" değil — yapısal olarak değişmez, her revizyon içerik adresli olacak şekilde, böylece bir çalıştırma tam olarak neye karşı skor ürettiğini kaydedebilir.
İşleyen bir mekanizma, her öğeyi ve setin tamamını hash'leyen bir manifest'tir:
set: agent-tool-use-core
revision: 2024-11-07.3
items_hash: sha256:9f2c...
item_count: 412
retired:
- id: tool-0183
reason: saturated
superseded_by: tool-0411

Harness, çalıştırma başlamadan önce revision'ı bir içerik hash'ine çözer ve bu hash'i sonuç kaydına yazar. Hash manifest ile eşleşmezse çalıştırma iptal edilir. Bu tek kısıt, bütün bir hata sınıfını ortadan kaldırır: geçen ay karşılaştırdığınız skor farklı bir araçla üretilmiştir ve artık sistem aksini varsaymanıza izin vermez.
Değişmezliğin bir maliyeti vardır. Bir öğe gerçekten yanlış olduğunda — belirsiz ifade, bir tool-call izinde eski bir API imzası, o zamandan beri değişmiş olgusal bir cevap — onu yamayamazsınız. Onu emekliye ayırır ve bir yenisini eklersiniz; bu da setin bir soy kütüğü edinmesi ve tarihsel karşılaştırmalarınızın bu değişimi hesaba katması gerektiği anlamına gelir. Bu disiplini atlayan ekipler, daha temiz görünen ama sessizce anlamsız zaman serileri elde eder. Ödünleşim gerçektir ve adlandırmaya değer: kolaylığı, kendi trend çizginize güvenme yeteneği karşılığında takas ediyorsunuz.
Holdout disiplini
Bir eval öğesi, geliştirme sırasında kullanılan hiçbir prompt'ta, retrieval index'inde, fine-tuning korpusunda veya few-shot örneğinde yer almamalıdır. Bu kulağa bariz gelir ve rutin olarak ihlal edilir, genellikle retrieval yoluyla.
Bir agent'ın iç dokümantasyon üzerinde bir retrieval adımı varsa ve eval seti aynı depoda ya da aynı vector store'da saklanıyorsa, bir eval sorusuna anlamsal olarak yakın bir sorgu eval öğesini yüzeye çıkarır. Agent sonra yetenekten değil, eval setinden cevap verir. Çıktıda yanlış görünen hiçbir şey yoktur; sadece skor yükselir.
Bunu yakalayan kontrol bir canary'dir. Eval index'ini, doğru cevapları bilinen ve canary olarak işaretlenmiş öğelerle tohumlayın. Bunları ana setten ayrı olarak skorlayın ve canary isabet oranını kirlenme oranı olarak raporlayın. Canary'ler şanstan yüksek bir oranda retrieve ediliyor ya da doğru cevaplanıyorsa, index sızdırıyordur ve manşet sayı şüphelidir.
Canary'ler ucuz ve kusurludur. Retrieval yoluyla ve prompt oluşturma yoluyla sızmayı tespit ederler, ancak pretraining sırasında model ağırlıklarına işlenmiş ezberlemeyi tespit etmezler. Bunun için tek güvenilir sinyaller zamansaldır: bir modelin eğitim kesim tarihinden sonra yazılmış öğeler ya da hiç yayımlanmamış özel bir havuzda tutulan öğeler. Her ikisi de ne ölçebileceğinizi kısıtlar, çünkü özel bir havuz kamuya açık leaderboard'larla karşılaştırılamaz. Ödünleşim budur — dış karş
Her öğe kaynağını ve yazarlığını taşımalıdır. Kredi için değil, lisans ve gizlilik kısıtlarının değiştiklerinde yeniden değerlendirilebilmesi için. İki yıl önce kullanılmasına izin verilen bir veri seti bugün olmayabilir ve kazınmış müşteri transkriptlerinden derlenmiş bir set, değerlendirme kullanımı için hiç temizlenmemiş kişisel veriler içerebilir. Öğe bazında köken olmadan, mevcut tek iyileştirme tüm seti atmaktır.

Erişim kontrolü işin ikinci yarısıdır. Eval seti harness tarafından ve neredeyse başka hiçbir şey tarafından okunabilmelidir. Prompt'lar üzerinde iterasyon yapan mühendislerin eval öğelerine okuma erişimine ihtiyacı yoktur; toplu sonuçlara ve dilim bazında kırılımlara ihtiyaçları vardır. İşi skoru iyileştirmek olan kişilere okuma erişimi vermek, iyi niyetle bile olsa, overfit etmeye yönelik bariz bir teşvik yaratır.
Erişim kontrolünün yanı sıra, geliştirme sırasında eval index'ine dokunan her retrieval'ı loglayın. Bir geliştirme oturumunda bir eval öğesinin yüzeye çıktığını gösteren bir retrieval logu, bir kararı değiştirip değiştirmediğine bakılmaksızın bir kirlenme olayıdır. Log, olayı görünmez olmaktan çıkarıp sonradan denetlenebilir kılar.
Buradaki dürüst ödünleşim hızdır. Eval okuma erişimini kısıtlamak hata ayıklama döngüsünü yavaşlatır, çünkü belirli bir başarısızlık modundan şüphelenen bir mühendis öğeyi açıp okuyamaz. Telafi, raporlama için açıkça kullanılmayan, ayrı ve açıkça okunabilir bir geliştirme setidir. İki set, iki amaç, biri kilitli.
Raporlama pratiği
Revizyonu ve kirlenme oranı olmayan bir manşet sayı bir ölçüm değildir. Bir iddiadır. Yayımlanan her skor, yanında set revizyonunu, içerik hash'ini ve canary'den türetilen kirlenme oranını taşımalıdır. Kirlenme oranı önemsiz değilse, skor tek bir rakam olarak değil, bu uyarıyla birlikte raporlanmalıdır.
Toplamlar ayrıca regresyonu gizler. Karışık bir set üzerindeki tek bir ortalama, bir yetenek gerilerken bir diğeri iyileştiğinde bunu maskeler. Yetenek bazında dilimleri raporlayın — tool seçimi, argüman oluşturma, çok adımlı kurtarma, reddetme davranışı — ve bunları toplamla aynı revizyon disipliniyle raporlayın. Birkaç düzine öğelik bir sette küçük bir miktar hareket eden bir dilim sinyal değildir; öğe sayısını raporlayın ve kararı okuyucuya bırakın.
Son olarak, doymuş öğeleri bir takvime göre emekliye ayırın. Mevcut her modelin geçtiği bir öğe, pohpohlayıcı bir temel çizgi ve seyreltilmiş bir ortalamadan başka hiçbir şeye katkıda bulunmaz. Doymuş öğeleri biriktirmek, paketi kapsamlı gösterirken toplamı her çeyrekte daha az bilgilendirici kılar. Onları emekliye ayırın, emekliliği manifest'e kaydedin ve yerlerine ayırt edici öğeler koyun.
Bunların hiçbiri gösterişli değildir. Ölçüm aracına uygulanmış veri mühendisliğidir ve bir anlam ifade eden skor ile veri hattı hareket ettiği için hareket eden skor arasındaki farktır.