Web sitemde bir dijital ikiz çalıştırıyorum. Hayatım ve yeteneklerim hakkında soruları yanıtlıyor. Ona tek bir katı kural verdim: asla uydurma. Eğer birisi sahip olmadığım bir yetenek hakkında soru sorarsa, bilmediğini itiraf etmeli. Aylarca sistemin çalıştığına inandım. Arada bir elle test ediyordum ve cevaplar sağlam görünüyordu. Sonra düzgün bir değerlendirme düzeneği kurdum. Rakamlar oldukça sarsıcıydı. 35 sorudan dokuzu tamamen yalandan ibaretti. Cevaplanamaz olması için tasarlanmış sekiz sorudan model sadece dördünü reddetti. Halüsinasyon önleyici prompt'um yaklaşık dörtte bir oranında başarısız oldu. Kullanıcılarına yalan söyleyen bir ürün piyasaya sürüyordum.

Çok Basit Bir Retrieval Kurulumu

Pinecone veya herhangi bir ağır sıklet vektör veritabanı kurmadım. Tüm kurulum düz bir JSON dosyasından ibaret. Kodum profilimi ayrı bölümlere ayırıyor. Bir soru geldiğinde sistem, sorgu ile her bir metin parçası (chunk) arasındaki kosinüs benzerliğini hesaplıyor, en yakın eşleşmeleri seçiyor ve bunları bağlam (context) olarak prompt'un içine yerleştiriyor. Model daha sonra sadece o pencerede gördüklerine dayanarak bir cevap üretiyor.

Dar bir bilgi kümesine hizmet eden küçük bir kişisel site için bu yaklaşım hızlıdır ve maliyeti neredeyse sıfırdır. Uzak bir vektör deposuna ağ üzerinden gidip gelme (round-trip) yoktur, indeksleme yükü yoktur ve karmaşık bir orkestrasyon gerektirmez. Dosyayı okur, parçaları puanlar, prompt'u oluşturur ve işinizi bitirirsiniz. Ancak arka uçtaki basitlik, çıktıdaki dürüstlüğü garanti etmez. Model doğaçlama yapmaya karar verdiğinde hafif bir pipeline bile ciddi sorunlar çıkarabilir. "İşte bağlam bu" ile "bu konuda söyleyeceklerim şunlar" arasındaki boşluk, halüsinasyonların yaşadığı yerdir. Modele iş geçmişinizle ilgili bir paragraf verebilirsiniz ve yine de hiç dokunmadığınız bir programlama dili hakkında kendinden emin bir uydurma cevap alabilirsiniz.

Güvenimi Sarsan Rakamlar

Aylarca, manuel olarak yapılan rastgele kontrolleri yeterli kapsam olarak gördüm. Sohbeti açar, cevabını zaten bildiğim bir soruyu sorar ve yanıt doğru görünüyorsa onay verirdim. Test stratejim buydu. Arayüzü bizzat kullandığım için kapsamlı hissettiriyordu. Ama değildi.

Sonunda sistematik olarak çalışabilen bir değerlendirme düzeneği yazdığımda tablo değişti. Test seti, ikize 35 soru yöneltti. Dokuz cevap yalan içeriyordu. Ayrıca profilimde hiçbir yerde cevabı bulunmayan sekiz soru da ekledim. Model bunların hepsini reddetmeliydi. Sadece dördünü reddetti. Asla uydurmamak üzerine kesin ifadeler içeren, özenle hazırlanmış halüsinasyon önleyici prompt'um yaklaşık yüzde 25 oranında başarısız oldu. Dörtte bir. Bu bir yuvarlama hatası değil. Bu, bozuk bir üründür.

Dostane Sorularla Test Etmeyi Bırakın

Kendi ürününüzü sadece kullanarak hataları bulamazsınız. Onları ürünü bozmaya çalışarak bulursunuz. Benim manuel testlerim fazla dostaneceydi. Sadece cevabını tam olarak bildiğim soruları soruyordum, bu da bilinçaltı düzeyde modeli güvenli bölgeye yönlendirdiğim anlamına geliyordu. Sınırları hiç zorlamadım. Hiç sahip olmayı dilediğim yetenekleri veya hiç yaşanmamış deneyimleri sormadım.

Gerçek test, adversarial (karşıt) bir niyet gerektirir. Yapay zekanın hata yapması için tasarlanmış sorular hazırlamalısınız. Laboratuvarda hata yapmasını istersiniz ki bir ziyaretçinin önünde yapmasın. Sadece halihazırda inandığınız şeyleri onaylayan bir test seti, sadece süslenmiş bir demodan ibarettir. Eğer aktif olarak uç durumlar (edge cases) ve tuzak sorular üretmiyorsanız, test yapmıyorsunuz demektir. Sadece umut ediyorsunuzdur.

Önem Arz Eden İki Hata

Prompt yazmak bir garanti değildir. Bir yapay zekaya halüsinasyon görmemesini söyleyen uzun ve ayrıntılı bir talimat, sadece bir komut gibi süslenmiş bir öneridir. Model çoğu zaman buna uyabilir, ancak istatistiksel baskı onu başka bir yöne ittiği anda talimatı görmezden gelecektir. Temperature, token olasılığı ve eğitim verisinin yapısı, sistem prompt'unuzdaki bir cümleden çok daha ağır basar. İtaati umutla değil, verilerle ölçmelisiniz. Güçlü bir talimat doğrulanmış bir gerçek değildir. O bir taleptir ve talepler reddedilebilir. Eğer tüm güvenlik stratejiniz prompt'unuzu sert bir şekilde kelimelere dökmeye dayanıyorsa, kağıt mendilden bir bariyer inşa etmişsiniz demektir. Modelin ne sıklıkla, hangi koşullar altında itaat ettiğini ve hata yaptığında neden hata yaptığını sayan bir değerlendirme düzeneğine ihtiyacınız var. Rakamların ses tonunuz umurunda olmaz.

Değerlendirme döngüsü kusurluydu. İşte beni neredeyse tuzağa düşüren ince bir tuzak. Orijinal test aracım, getirme (retrieval) sürecini iki kez çalıştırıyordu. İlk çalışma, ground truth ile karşılaştırmak için bağlamı çekiyordu. İkinci çalışma ise asıl cevap üretimi için bağlamı çekiyordu. Pratikte bu, değerlendiricinin gördüğü parçaların, modelin gördüğü parçalardan farklı olabileceği anlamına geliyordu. Değerlendirici, cevabı yapay zekanın belki de hiç almamış olabileceği verilere göre puanlıyordu. Yanlış girdiyi puanlayan bir değerlendirme, hiç değerlendirme yapmamaktan daha kötüdür. Size sahte bir güvenlik hissi verir. Skora bakarsınız, yüksek bir geçme oranı görürsünüz ve rahatlarsınız. Bu sırada kullanıcılarınız