MeReKGs67

Üstün
Katılım
7 Eylül 2024
Mesajlar
838
Beğeniler
422


Selamlar herkese,

Son dönemde kod yazarken, analiz yaparken ya da uzun soluklu bir proje geliştirirken Claude, ChatGPT veya Gemini’ı yanına “yardımcı pilot” olarak alıp saç baş yolan kaç kişiyiz?

İlk 15-20 mesajda harikalar yaratan, dahi gibi çalışan o model; sohbet uzadıkça bir anda dün söylediğiniz kuralı çiğneyen, sormadığınız işleri kafasına göre yapan, hatta en sinir bozucusu: “Hallettim, kod hazır, canlıya aldım!” deyip arkada tek bir satırı bile değiştirmeyen bir yalancıya dönüşüyor.

Geçtiğimiz günlerde tam da bu konuyu aylarca tek bir projede kayıt altına alarak inceleyen muazzam bir vaka analizine denk geldim. Karşılaşılan arızaları rastgele "AI işte, saçmalıyor" diye geçiştirmek yerine çetelesini tutmuşlar: Toplam 299 kayıtlı vaka.

Ortaya çıkan tablo o kadar tanıdık ve hepimizin yaşadığı dertleri öyle güzel modelliyor ki, hem bu vakaların detaylarını hem de arkasında yatan teknik mekanizmayı (ve asıl önemlisi bu bataklıktan nasıl çıkacağımızı) foruma uzun uzun, detaylarıyla dökmek istedim.


O meşhur 299 Vaka: Yapay Zekâ Bizi En Çok Nasıl Kandırıyor?​

Aylarca süren projede modelin verdiği hatalı tepkiler 6 ana kalıpta toplanmış. Sayılar ve dağılım gerçekten ibretlik:

#1 | Bayat / Eski Sayıyı Güncel Diye Satmak (137 Vaka - Açık ara birinci)
Konuşmanın en başında bir rakam veriyorsunuz (örneğin "Elimizde 50 veri var"). İlerleyen saatlerde o sayı 80 oluyor, değişiyor, güncelleniyor. Fakat model, sohbetin ortasında veya sonunda ısrarla o en baştaki eski 50 sayısını sanki güncelmiş gibi önünüze koymaya devam ediyor.


#2 | Sahte Tamamlama / "Yaptım, bitti" İllüzyonu (97 Vaka)
En tehlikelisi bu. "Dosyayı güncelledim", "Fonksiyonu bağladım", "İşlem tamam" diyor. Gidip dosyaya bakıyorsunuz, hiçbir şey yapılmamış. Model kendi kafasında kurduğu planı ve yazdığı niyeti, sanki eyleme dökülmüş bir kanıt gibi algılıyor.


#3 | Hiç Bakmadan "Yok / Bulunamadı" Demek (35 Vaka)
"Falanca dosya ya da kayıt nerede?" diyorsunuz. Saniyesinde "Arşivde böyle bir kayıt yok" cevabı yapıştırıyor. "Emin misin, bir daha bak" diye ısrar edip zorladığınızda ise gidip tık diye bulup getiriyor. Yani aslında ilk seferde bakmaya üşeniyor.


#4 | Söylenen Kuralı Unutmak / Çiğnemek (14 Vaka)
Sohbetin başında büyük harflerle "Şu kurala asla dokunma" dediğiniz şeyi, sohbet uzayınca sanki hiç konuşulmamış gibi ihlal ediyor.


#5 | İzinsiz İş Yapmak (10 Vaka)
Yetki vermediğiniz, "bana sormadan dokunma" dediğiniz dosyalara veya alanlara kafasına göre girip değişiklik yapması.


#6 | Onaylanmış Şeyi Tekrar Tekrar Sormak (6 Vaka)
Zaten iki saat önce mutabık kaldığınız, "tamam bu böyle olsun" dediğiniz bir kararı unutup tekrar onay istemesi.


Peki Neden? Bellek Sandığımız Şey Aslında Ne?​

Birçoğumuz modellerin "hafızası" olduğunu sanıyoruz. Oysa yapay zekânın hafızası yoktur.

Bizim Context Window (Bağlam Penceresi) dediğimiz şey bir bellek değil; modelin her mesaj ürettiğinde önüne açtığı çalışma masasıdır. Siz 100. mesajı attığınızda model sadece o mesajı okumaz; masanın üzerindeki ilk mesajdan son mesaja kadar olan bütün sohbeti en baştan tek tek okur.

Masa büyüdükçe (yani token sayısı arttıkça), modelin o masadaki şeyleri okuma ve doğru ilişkilendirme kalitesi çakılmaya başlar. Pazarlamada firmalar "1 Milyon token penceremiz var!", "2 Milyon token destekliyoruz!" diye hava atıyor ama akademik çalışmalar durumun hiç de öyle olmadığını söylüyor:

Chroma — "Context Rot" (Bağlam Çürümesi) Araştırması
18 model üzerinde yapılan testte modellerin bağlamı baştan sona eşit bir dikkatle okuyamadığı görüldü. Girdi uzadıkça modelin güvenilirliği pencere dolmadan çok önce sert bir düşüş yaşıyor.


Adobe — NoLiMa Çalışması
128K ve üzeri pencereye sahip olduğunu iddia eden 13 büyük model test edildi. Modellerin 11 tanesi, bağlam daha 32.000 token’a geldiğinde başarı oranlarının yarısını kaybediyor. Hatta GPT-4 bile kısa bağlamdaki %99,3'lük başarısından 32k'da %69,7'ye çakılıyor.


Nvidia — RULER Testi
32k pencere boyutu iddia eden modellerin yalnızca yarısı bu uzunlukta tatmin edici bir sonuç üretebiliyor.


Stanford — "Lost in the Middle" Fenomeni
Yapay zekâ, bağlam penceresinin en başındaki (ilk talimatlar) ve en sonundaki (son mesajlar) bilgilere çok iyi odaklanır. Ancak sohbet uzadıkça, kritik kurallar veya veriler masanın tam ortasına düşer. Modelin dikkati ortadaki bilgide belirgin şekilde bozulur.


-Yani model bize yalan söylemiyor; devasa masanın ortasında kayboluyor.

Çözüm Ne? Uygulayabileceğimiz 6 Somut Önlem​

Model değiştirmek, daha pahalı bir sürüme geçmek ya da pencere boyutunu büyütmek bu problemi çözmüyor. Çünkü sorun donanım/kapasite sorunu değil, dikkat mimarisi sorunu. Çözüm, çalışma disiplinimizi değiştirmekte:

1. Tek ve Sonsuz Bir Sohbette Yaşlanmayın​

En sık yaptığımız hata bu: Bir projeye başlıyoruz ve 3 hafta boyunca aynı chat ekranında devam ediyoruz. Bu, modeli yavaş yavaş zehirlemektir. Kural çok net: Bir sohbet = Tek bir iş/görev. O iş bitti mi, o sohbet de kapanmalı. Yeni işe temiz bir pencereyle başlanmalı. Bölmek bir zayıflık değil, bağlam sağlığı için bir bakımdır.

2. Hafızayı Chat Akışında Değil, Diskte (Dosyada) Tutun​

Chat akışı uçucudur; birkaç ekran kaydırma sonra kaybolur gider. Projenin durumunu, alınan kararları, güncel rakamları ve biten işleri projenin kök dizininde tutacağınız bir DURUM.md (veya status.txt) dosyasında tutun. Modele her yeni görevde şunu söyleyin:

"Bu projede tek doğruluk kaynağı DURUM.md dosyasıdır. Bana cevap vermeden önce bu dosyayı oku. Bir karar veya durum değişirse önce bu dosyayı güncelle, sonra bana haber ver."
Böylece model "hatırlamaya" çalışmaz, doğrudan dosyayı açıp okur.

3. Sandviç Kuralı: Kritik Kuralı Başa ve Sona Koyun​

Lost in the Middle zaafını lehimize çeviriyoruz. Bir kuralınız varsa ("Ölçüm yapmadan sayı verme", "X kütüphanesini kullanma" vs.), bunu uzun bir prompt'un sadece ortasında bir yere sıkıştırmayın. Prompt'un en başına kuralı yazın, yapacağı işi ortaya anlatın, en alta bir "Hatırlatma:" satırı açıp o kritik kuralı tek cümleyle tekrar edin.

4. Kanıtsız "Bitti" Cevabını Yasaklayın​

Model "Dosyayı düzelttim bitti" dediğinde bunu bitmiş bir iş değil, sadece bir "iddia" sayın. Promptlarınıza şunu açıkça şart koşun:

"Bitti deme. Yaptığın işin çıktısını göster: çalıştırdığın terminal komutunu, diff çıktısını veya dosyanın son değiştirilme zaman damgasını cevabına ekle. Çıktı yoksa iş bitmemiştir."
Model sadece metin üretmekle yırtamayacağını, bir kanıt (çıktı) üretmesi gerektiğini anladığında sahte tamamlama vakaları bıçak gibi kesiliyor.

5. Sayıyı Sohbetten Değil, Kaynaktan Saydırın / Ölçtürün​

Modele "Şu an kaç dosyamız kaldı?" veya "Tabloda kaç satır var?" diye sohbet içinden soru sormayın. Sohbet geçmişine bakarsa en baştaki bayat sayıyı söyler. Ona şunu emredin:

"Bu rakamı sohbetin içinden tahmin etme. Git ilgili klasörü/dosyayı bash veya Python scripti ile say, kullandığın komutu ve sonucunu bana raporla."

6. Devir Paketi (Handover) ile Yeni Sohbete Geçin​

Bir sohbeti kapatıp yenisine geçeceğiniz zaman o ana kadar konuşulan 50.000 token'lık çöpü taşımayın. Sohbeti kapatmadan önce modele son bir görev verin:

"Bu oturumu kapatıyoruz. Yeni sohbet için bir devir paketi hazırla: Ne yapıldı, ne yapılmadı, hangi kararlar geçerli ve sıradaki adım ne? En fazla 200 kelime, maddeler halinde yaz."
Yeni sohbeti açtığınızda sadece bu 200 kelimelik tertemiz özeti verip sıradaki işe geçin. 40 bin token'lık yorgun bir beyin yerine, 200 kelimelik taptaze bir dikkatle devam edersiniz.

Sizde Durumlar Nasıl?​

Ben bu mantığı iş akışıma entegre ettiğimden beri modellerin o "kendi kendine gelin güvey olma" ve lafta iş bitirme hallerinde inanılmaz bir düşüş gördüm.

Siz uzun soluklu projelerde context şişmesini nasıl yönetiyorsunuz? Projeyi tek chat'te götürüp benzer sahte tamamlama (özellikle "hallettim" deyip hiçbir şeyi değiştirmeme) vakalarıyla karşılaşanlar var mı? Kullandığınız farklı taktikler varsa gelin aşağıda tartışalım.