Yapay Zekanın Kod Tabanımızda Halüsinasyon Görmesini Nasıl Durdurdum

Yapay zeka kodlama araçları gerçek üretim projelerinde başarısız oluyor. Yeni kodlarda iyi çalışıyorlar; ancak geçmişi olan eski kodlarda çöküyorlar.

Fintech projemizin üç yıllık bir geçmişi var. İki React frontend'i, bir admin paneli ve bir FastAPI backend'i bulunuyor. Veritabanı, birçok tablo ve ağır join işlemleriyle oldukça karmaşık.

Daha hızlı ilerlemek için yapay zekayı kullanmaya çalıştık. Başarısız olduk.

Yapay zekadan bir kişiler (contacts) tablosu oluşturmasını istedim. İsimler ve e-postalar için yeni sütunlar oluşturdu. Bunların zaten kullanıcılar (users) tablomuzda mevcut olduğunu fark etmedi. Bir yabancı anahtar (foreign key) kullanmak yerine verileri kopyaladı.

Yapay zeka aptal değildi. Bağlamı (context) yoktu. Eksik bilgiyle karar verdi.

Daha iyi kodun nasıl alınacağını sormayı bıraktım. Yapay zekanın iyi kararlar verebilmesi için hangi bağlama ihtiyaç duyduğunu sormaya başladım.

Yapılandırılmış bir iş akışı oluşturduk. Yapay zeka, yalnızca sağladığınız bağlam kadar iyidir. Biz bu bağlamı açık hale getirdik.

Kurulumumuz şu şekilde:

  • ADR Dizini: Mimari Karar Kayıtları (Architecture Decision Records) için bir klasör oluşturduk. Bu dosyalar, belirli seçimleri neden yaptığımızı açıklar. Bir dosya, yapay zekaya yeni tablolar oluşturmadan önce mevcut tabloları kontrol etmesini söyler. Kullanıcı verilerini kopyalamayı yasaklar.
  • context.md: Bu dosya özel terimlerimizi açıklar. Yapay zekaya benzersiz kelimelerimizin birbirleriyle nasıl ilişkili olduğunu söyler.
  • plot.md: Projenin üst düzey bir haritasını ve parçaların nasıl bağlandığını sağlar.
  • Zorunlu Testler: Her yeni API rotası test senaryoları gerektirir.

Bu her şeyi değiştirdi. Bir keresinde yapay zeka paylaşılan bir yardımcı fonksiyonu (utility function) değiştirdi. Bu değişiklik sistemin sekiz farklı kısmını bozdu. Test paketi bunu anında yakaladı. Yapay zeka hatayı gördü ve hem eski hem de yeni gereksinimleri karşılayan bir sürüm oluşturarak kendi hatasını düzeltti.

Testler olmasaydı, o hata üretim ortamına (production) ulaşacaktı.

Yapay zekaya yeni bir yazılımcı gibi davranın. Yeni işe alınan birini, kod tabanınızı bilmediği için suçlamazsınız. Dokümantasyon ve oryantasyon sağlarsınız. Biz de yapay zeka için aynısını yaptık.

Yapımız:

  • docs/context.md: Proje terimleri ve bağlantıları.
  • docs/plot.md: Üst düzey kod tabanı haritası.
  • docs/adr/: Tablo oluşturma ve API yapısı gibi özel kurallar.

Ekibiniz için üç kural:

  • ADR'lerde spesifik olun. Belirsiz tavsiyeler yerine net talimatlar kullanın.
  • Dokümanları otoriter kılın. Yapay zekaya bu kuralların öncelikli olduğunu söyleyin.
  • Hataları kurallara dönüştürün. Yapay zeka her başarısız olduğunda yeni bir ADR yazın.

Bu sistem yapay zekayı mükemmel yapmaz; onu öngörülebilir kılar. Ekibin daha hızlı hareket edebilmesi için yapay zekanın tutarlı olduğu bir kod tabanı istiyoruz.

Kaynak: https://dev.to/jaskiratanand/how-i-made-ai-stop-hallucinating-on-our-3-year-old-fintech-codebase-3g0h