Geçen ay, bir yapay zeka asistanı bir üretim projesi için Python betiği oluşturdu. Çıktı hatasız çalıştı. Veriler sağlam görünüyordu. Ancak manuel bir inceleme, veritabanı çağrılarının arasına gizlenmiş bir N+1 sorgu deseni ortaya çıkardı. Küçük bir veri seti için kod gayet iyi performans gösteriyordu. Bunu binlerce kayda çıkardığınızda, uygulama önce ana nesneler için tek bir sorgu yapacak, ardından ilgili veriler için binlerce takip sorgusu gönderecektir. Sonuç, hiçbir birim testin (unit test) yakalayamayacağı felaket düzeyinde bir performans uçurumu olacaktır.
Bu, modern yazılım geliştirmenin gerçeğidir. Yapay zeka araçları artık kodlama, hata ayıklama ve mimari önerileri, hiçbir insanın yetişemeyeceği hızlarda hallediyor. Bu hız gerçektir. Ancak bu durum, işinizin mahiyetini temelden değiştiriyor. Artık öncelikle sözdizimi (syntax) yazmak için ödeme almıyorsunuz. Denetlemek, mimari oluşturmak ve tam olarak bu tür görünmez tuzakları yakalamak için ödeme alıyorsunuz.
"Mantıklı Ama Yanlış"ın Sessiz Tehlikesi
Yapay zeka tarafından oluşturulan kodlar genellikle doğru görünür çünkü derlenir, çalışır ve beklenen değeri döndürür. Mantık yüzeyde tutarlıdır. Ancak derinde sessizce bozulmuş olabilir.
Düzenli ifadeleri (regular expressions) ele alalım. Bir yapay zeka, İngilizce'de e-posta adreslerini veya tanımlayıcıları mükemmel şekilde eşleştiren bir desen sunabilir. Aynı ifadeyi Almanca umlaut'lar, Arapça alfabeler veya Unicode normalizasyon uç durumları (edge cases) üzerinde çalıştırdığınızda, sessizce başarısız olur. Kod, bir hata (exception) fırlatacak şekilde yanlış değildir; sadece geçerli gerçek dünya verilerini dışarıda bırakır.
Veritabanı sorguları da benzer bir risk taşır. Bir yapay zeka, test sırasında doğru satırları döndüren bir PostgreSQL sorgusu yazabilir; ancak yine de tablolarınızı ölü tuple'larla (dead tuples) şişirebilir, indeks kullanımını atlayabilir veya üretim iş yüklerini felç eden sıralı taramalara (sequential scans) zorlayabilir. Bir demo veri setinde çalışan şey ile gerçek yük altında çalışan şey iki farklı şeydir. Makine gecikmeyi (latency) hissetmez. Bulut faturasını ödemez.
Yazmaktan Doğrulamaya
Temel değişim, "bunu nasıl yazarım?" sorusundan "bunu nasıl doğrularım?" sorusuna geçmektir. Yapay zeka ilk taslağı hazırladığında, bilişsel yükünüz daha ileri aşamalara kaymalıdır. Kodu, yorgun bir yazarın kendi çalışmasına göz gezdirdiği gibi değil, bir güvenlik denetçisinin okuduğu gibi okumanız gerekir.
Bu, farklı bir disiplin türü gerektirir. Otomasyon yanlılığı (automation bias) gerçektir. Bir araç akıcı ve sözdizimsel olarak kusursuz bir çıktı ürettiğinde, insan beyni rahatlar. Sunum cilalı olduğu için doğruluğu varsayarsınız. Bu dürtüye direnç göstermek artık temel beceridir. Aksine kanıtlanana kadar her önerinin bir hipotez olduğunu varsaymalısınız.
Makine ile Çalışmak
Bir yapay zeka kodlama asistanından yararlı çıktı almak, daha hızlı yazmakla ilgili değildir. Makinenin eğitim verileri ile sizin özel gerçekliğiniz arasındaki mesafeyi azaltmakla ilgilidir. Bu mesafeyi birkaç somut uygulama ile daraltabilirsiniz.
İstemlerinizde (prompts) kesin olun. Belirsizlik burada şiir yaratmaz; hata (bug) yaratır. "Bu fonksiyonu optimize et" gibi bir istem, genel tavsiyelere davetiye çıkarır. Bunun yerine, "Bu Python döngüsünü, yinelemeli kaydetmeler yerine tek bir toplu veritabanı güncellemesi (bulk database update) kullanacak şekilde yeniden yapılandır (refactor)" yazın. Belirginlik, olasılık uzayını daraltır.
Gerçek bağlam sağlayın. Siz söylemediğiniz sürece yapay zeka, sıkı bir 30 saniyelik istek zaman aşımı (request timeout) olan bir Kubernetes kümesi içinde PostgreSQL 15 üzerinde Django 4.2 çalıştırdığınızı bilemez. Ona bağımlılık sürümlerinizi, dahili kütüphanelerinizi ve taviz veremeyeceğiniz kısıtlamalarınızı besleyin. Bağlam bir süs değil, bir koruma bariyeridir (guardrail).
Yanıtları kendi belgelerinizle temellendirin. Retrieval-Augmented Generation veya RAG, sadece sohbet robotları için kullanılan bir moda sözcük değildir. Asistanınızı gerçek API spesifikasyonlarınıza, mimari karar kayıtlarınıza (architecture decision records) ve kod tabanı geleneklerinize yönlendirin. Model, eğitim verilerinden tahmin yürütmek yerine gerçekleri belgelerinizden geri çağırdığında, genel tavsiyeler ile kullanılabilir kod arasındaki fark çarpıcı biçimde kapanır.
Karmaşık işleri ayrı görevlere bölün. Ajan (agent) modelleri, her adımın dar bir kapsamı olduğunda en iyi şekilde çalışır. Tek seferde eksiksiz bir mikro hizmet yeniden yapılandırması (microservice refactor) istemeyin. Önce veri şemasını isteyin. Onu doğrulayın. Sonra göç (migration) betiğini isteyin. Onu da doğrulayın. Ardından servis katmanına geçin.
