Bir Yapay Zeka Git Commit Mesajı Oluşturucu Geliştirdim
Eskiden "fixed bug" veya "updated stuff" gibi kötü commit mesajları yazardım. Bu durum pull request'lerimi karmaşık hale getiriyordu. Bunu yapay zeka kullanarak otomatikleştirmeye karar verdim. Kod farklarımdan (diffs) temiz ve geleneksel (conventional) commit mesajları üretmek istiyordum.
Düşündüğümden daha zordu. Basit bir prompt işe yaramadı.
İlk denemeler birçok nedenden dolayı başarısız oldu:
- Yapay zeka, kısa satırlar yerine uzun paragraflar yazıyordu.
- Gerekli olan "feat:" veya "fix:" öneklerini görmezden geliyordu.
- Kodda var olmayan özellikleri uyduruyordu (hallucination).
- Yerel modeller çok yavaştı ve şiirsel, işe yaramaz bir tarzda yazıyordu.
Sonunda çalışan hibrit bir sistem kurdum. Kullandığım yapı şu şekilde:
- Tür Sınıflandırması: Mesajı yazmadan önce modelden feat, fix veya chore gibi bir tür seçmesini istiyorum.
- Bağlam Kısaltma: Diff'in sadece ilk 250 satırını gönderiyorum. Bu, maliyeti düşürüyor ve odağın keskin kalmasını sağlıyor.
- Doğrulama: Çıktıyı kontrol etmek için bir regex kullanıyorum. Eğer mesaj yanlışsa, betik tekrar deniyor.
- Düşük Sıcaklık (Temperature): Sıcaklığı 0.2 olarak ayarlıyorum. Bu, çıktıyı tutarlı ve sıkıcı hale getiriyor. Loglar için sıkıcılık iyidir.
Otomatik commit hook'ları kullanmıyorum. Yapay zeka hata yapabilir. Betiği bir git alias'ı olarak çalıştırıyorum. Bir mesaj öneriyor ve ben commit yapmadan önce onu inceliyorum. Manuel inceleme, kötü bir git geçmişine karşı en iyi sigortadır.
Öğrendiğim üç ders:
- Token limitleri düşmanınızdır. Büyük diff'ler bütçenizi veya prompt'unuzu bozacaktır.
- Doğrulama zorunludur. O olmadan saçma sapan sonuçlar alırsınız.
- Hız önemlidir. Hızlı ve ucuz olduğu için GPT-4o-mini kullanıyorum.
Hassas kodlar üzerinde çalışıyorsanız, diff'lerinizi harici bir API'ye göndermeyin. Bunun yerine yerel bir model kullanın.
Siz commit mesajlarınızı nasıl yönetiyorsunuz? Yapay zeka mı kullanıyorsunuz yoksa elle mi yazıyorsunuz?
