Değerlendirme Odaklı Ajan Geliştirme: Promptları Sezgilerle Ayarlamayı Nasıl Bıraktım

Bir promptu değiştirdim. Bir sonraki çalışma daha iyi göründü. Değişiklik işe mi yaradı, yoksa sadece şanslı mıydım?

Uzun süre cevabım "Sanırım öyle" oldu. Bir komutu kurcalardım, pipeline'ı çalıştırırdım, başarılı olduğunu görürdüm ve yayına alırdım. Bu, sezgi tabanlı (vibes-based) mühendisliktir. Ajan inşa eden neredeyse herkes bunu yapar çünkü alternatifi zor görünür.

Ancak kod yazan ajanlar deterministik değildir. Aynı görevi iki kez çalıştırıp iki farklı sonuç alabilirsiniz. Tek bir başarılı çalışma size hiçbir şey söylemez. Değişikliğinizin işe mi yaradığını yoksa sadece zarların mı iyi geldiğini anlayamazsınız.

Bunu makine öğrenmesi disiplinini kullanarak çözdüm. Tüm sistemimi kapsayacak bir değerlendirme çerçevesi (evaluation framework) oluşturdum.

Çerçevenin çalışma şekli şöyledir:

• Hedef: Dondurulmuş bir kod tabanı. Puanların karşılaştırılabilir kalması için bu sabit tutulur. • Görev: Bir prompt ve bir oracle içeren belirli bir benchmark öğesi. • Oracle: Deterministik bir kontrol. Bunlar geçilmesi gereken shell komutlarıdır. • Varyant: Yeni bir planlayıcı gibi test ettiğiniz belirli değişiklik. • Deneme: Tek bir çalışma. Rastgeleliği hesaba katmak için her görevi birden fazla kez çalıştırırım.

Farklı hataları yakalamak için iki tür puanlama kullanıyorum:

  • Kod Derecelendiriciler (Deterministik): Bunlar test geçme oranlarını, maliyeti, süreyi ve dosya değişikliklerini kontrol eder.
  • LLM Hakemi (Olasılıksal): Ayrı ve sabit bir model, spesifikasyon kalitesini ve uygulama sadakatini puanlar.

Kod derecelendiriciler kodun çalışıp çalışmadığını söyler. Hakem ise kodun iyi olup olmadığını söyler. Her ikisine de ihtiyacınız var.

Ayrıca ortalamaları kullanmayı da bıraktım. Aritmetik ortalamalar ajanlar hakkında yalan söyler. Bir görev 3 seferden 2'sinde başarılı olursa, bu iyi görünür. Ancak güvenilir değildir. Bunun yerine iki metrik kullanıyorum:

  • pass@k: Ajan en az bir kez başarılı oldu mu? (Yetenek)
  • pass^k: Ajan her seferinde başarılı oldu mu? (Güvenilirlik)

pass^k değerindeki bir artış gerçek zaferdir. Bu, ajanı sadece şanslı değil, tutarlı hale getirdiğiniz anlamına gelir.

Sistemi keskin tutmak için derin anlayış gerektiren zor görevler ekliyorum. Bir ajan gerçek bir hatada başarısız olduğunda, bu başarısızlığı kalıcı bir göreve dönüştürüyorum. Bu, kapalı bir döngü oluşturur. Ajan geliştikçe benchmark daha da zorlaşır.

Bu altyapıyı kurmak çok iş gerektiriyor ancak inşa ettiğim en yüksek kaldıraç etkisine sahip şey bu oldu. "Bunun daha iyi olduğunu düşünüyorum" ifadesini "bu, daha düşük maliyetle %20 daha güvenilir" ifadesine dönüştürdü.

Kod yazan ajanları demo yapmak kolaydır ancak onlara güvenmek zordur. Demoların ötesine geçmek istiyorsanız, ölçüm yapmaya karar vermelisiniz.

Kaynak: https://dev.to/rickjms/eval-driven-agent-development-how-i-stopped-tuning-prompts-on-vibes-1189

İsteğe bağlı öğrenme topluluğu: https://t.me/GyaanSetuAi