- "Yapay zekanın kod analizi hakkındaki düşünce biçimini değiştiren kafa karıştırıcı bir deney"
- Mevcut yapay zekaların bir React kod tabanını analiz ederken sık sık başarısız olduğuna tanık olundu
- Nedenin, junior geliştiricilerin kodu ilk kez okurken yaptığı gibi yalnızca satır bazında analiz eden yaklaşım olduğu fark edildi
Bootcamp dönemi ile kıdemli zihniyeti arasındaki fark
- Junior dönemde dosyaları sırayla, satır satır okurken yönünü çabuk kaybetmek yaygındı
- Kıdemli geliştiriciler büyük PR'ları incelerken şu yaklaşımı kullanır
- Önce kritik dosyalara bakar
- Değişiklikleri işlev bazında gruplayarak kavrar
- Önce genel mimariyi anlar, ardından uygulama detaylarına iner
- Bu yaklaşımı yapay zekaya uygulamaya karar verildi
Deney
- Dosyaları işlevlerine göre gruplandırıp, grup hakkında bağlam bilgisini önce yapay zekaya vermeyi deneyen bir yöntem denendi
- Örnek kodda
FileGroup arayüzü tanımlanıyor ve dosyalar ilgili işlev ile dosya boyutuna göre gruplanarak işleniyor
- Grup bazında yapay zekaya "bunun hangi işlev alanı olduğu ve özellikle nelere dikkat etmesi gerektiği" gibi yönlendirmeler veren prompt'lar kurgulandı
Şaşırtıcı dönüşüm anı
- Daha önce yalnızca "JWT token kimlik doğrulama mantığı içeriyor" düzeyinde basit yanıtlar veren yapay zeka
- "WebSocket bağlantılarına etkisi, yakın zamanda birleştirilen PR'larda race condition olasılığı" gibi kıdemli geliştirici seviyesinde içgörüler sunmaya başladı
- Yapay zeka sistemin tüm bağlamını dikkate alarak tespitlerde bulunmaya başladı
Gerçekte değişen şey
- Daha karmaşık bir makine öğrenimi modeli kullanılmadı; esas nokta, yapay zekaya kıdemli geliştirici gibi düşünme sırasının verilmesiydi
- Bağlam önce: Önce tüm sistemi anlamak
- Pattern matching: Benzer dosyaları gruplayıp tekrar eden mantığı bulmak
- Etki analizi: Değişikliklerin tüm sistem üzerindeki etkisini fark etmek
- Geçmişi anlama: Önceki kod değişikliklerinin nedenini ve bağlamını izlemek
Beklenmedik yan etkiler
- Sadece istenen noktayı düzeltmekle kalmayıp, şu içgörüleri de yakalamaya başladı
- Kopyala-yapıştır kaynaklı yinelenen kod bloklarını belirleme
- Tutarsız hata işleme kalıpları için uyarı verme
- Olası performans darboğazlarını saptama
- Kullanım kalıplarına göre mimari iyileştirme önerileri sunma
Neden önemli
- Son dönemde yapay zeka tabanlı IDE'ler otomatik kod üretmeye odaklanıyor
- Ancak sistemin genel bağlamı olmadan yalnızca öneri sunmak, "ekibe yeni katılmış bir junior geliştirici" kadar riskli olabilir
- Asıl önemli olan, "derinlemesine kod anlayışı"dır
Geriye kalan sorular
- Bağlamın (geçmiş bilgisinin) ne zaman güncelleneceği ve ne zaman korunacağına karar verme sorunu
- Birbiriyle çelişen kalıplar bulunduğunda nasıl tepki verileceği
- Belirsizliği yüksek analiz sonuçlarının kullanıcıya nasıl gösterileceği
Bundan sonraki yön
- Yapay zekaya kıdemli geliştiricilerde görülen şu sezgilerin de öğretilebilip öğretilemeyeceği değerlendiriliyor
- Teknik borcu önceden fark etme becerisi
- Mimari iyileştirme önerilerini proaktif biçimde sunma yetkinliği
- Kullanım kalıplarından güvenlik sorunlarını tespit etme becerisi
- Ekip içindeki gayriresmî kuralları sezebilme yetisi
- Nihai hedef, sadece "daha fazla kod" üretmek değil, "kodu kıdemli geliştirici gibi derinlemesine ve bütünsel biçimde anlamayı" yapay zekaya öğretmek
3 yorum
Kod tabanını analiz etmek ve iyileştirmek için sorulabilecek sorular zaten çok kalıplaşmış değil mi? Yazar biraz fazla heyecanlanmış gibi görünüyor.
Cursor’da not defteriyle proje genelini açıklatmaya benzer bir bağlam gibi görünüyor.
Hacker News yorumu
Yorumlarda insanlar eleştirel davranıyor. Bu yazı, yeni bir aracın olasılıklarına dair kısa ve olumlu sonuçları ele alıyor ve dürüst, makul düşünceler içeriyor
Bu, LLM'lerin etkileyici işler yapabildiğine dair bir başka örnek. Ancak her girdide tutarlı ve doğru çalışan bir sistem kurmak çok zor
Kod yazımı için daha iyi agent sistemlerine yönelik çıkarılacak dersler olabilir
Yazının ilk satırını okuyunca kendimi uzaylı gibi hissettim. Yazının tamamını okumam gerekir ama mevcut kodu sıralı şekilde okumak garip geliyor
İnsan unsurunun önemini vurguluyor. Codebase'in bağlamsal olarak anlaşılması olmadan AI uyarılarının ne anlama geldiği bilinemez
AI'ın var olmayan API'ler uydurmasını engellemek zor. İyi çalıştığında güzel, ama çoğu zaman iyi çalışmıyor
Kod bağlamı ve anlama, LLM tarafından üretilen kodun kalitesini artırmak için önemli
John McCarthy'nin şikayetindeki gibi, bu bir deney ya da kanıt değil, bir hikâye
Sonuçlar etkileyici. Stil ve tutarlılık konusunda eleştiriler var ama sonuç faydalı görünüyor
Bu tekniğin önemli bir kısmı yazıda eksik gibi görünüyor.
getFileContext()veshouldStartNewGroup()implementasyonları yok