Yapay zeka konusunda aydınlanma için parola: “Papaya Kodu”
Baştan söyleyeyim. Bu yazı orijinal olarak Hasan Civelek’in kalemindendir. ChatGPT’ye iki kere denettirdim, benim duygularımla yazamadı bu konuyu. O nedenle kendim kaleme almaya karar verdim.
AI sayesinde kendimi 10 kaplan gücünde hissedip her gün bir başka side-project yaptığım o anlardan birinde kendimi CoPilot ile chat yaparken buldum. Aslında ChatGPT’den duyduğum OpenRoute’u denemek için kollarımı sıvamıştım. OpenRoute en kaba tabiriyle ücretli popüler AI API’lerine ayrı ayrı para verip ayrı api-key’leri yönetmektense tek ona para verip onun içinden o modelleri seçmenizi sağlayan bir platform. Hazır ona para vermişken kod yazdırmak için ödediğim diğerlerinin planlarını iptal ediyordum yeniden yeniden ödeme almasınlar diye. Sıra GitHub CoPilot’a gelmişti. Nerden iptal ediliyor diye sağını solunu kurcalarken kendimi chat ortamında buldum.
Kafamı tam anlamıyla bir AI kazanı ve içerisinde fıkır fıkır sulara karışmış kavram kargaşaları hayal edin. O yüzden CoPilot’a agent nedir, sen bir agent mısın, agent nasıl yazılır diye sorular soruyordum. CoPilot’un web arayüzünde cevap verecek modeli seçebiliyorduk. Bu kafamı kurcalıyordu. Konuşma esnasında modeli değiştirirsem aynı konuşmaya devam edebilecek miydik. İşte buna binaen yaptığı izahatta eğer arayüz eski konuşmayı yeni seçtiğim modele verirse konuşma aynen devam ediyor “gibi” olabiliyormuş. Bunu anlamak için modeli değiştirmeden önce aramızda bir parola belirleyelim, sonra ben modeli değiştirip başka şeyler konuşayım, konuşmanın bir yerinde o parolayı sorayım, bakalım ne olacak dedim. Bu fikri sevdi ve parolamız “papaya kodu” olsun dedi 🙂 Yani konuşmanın devamında seçeceğim AI modeli konuşma içerisinde “papaya kodu” lafını duyunca “şuan test yapıyoruz” diyebiliyorsa deneyimiz başarılı olacaktı. Öyle de oldu. Modeller arasında Grok görünce, daha önce hiç kullanmadığım bu modeli seçtim ve klasik bir Türk gibi havadan sudan konuştum. Eski teknoloji dergilerinden, Byte’dan, Türkiye’ye ne zaman geldiğinden falan filan derken “papaya kodu deyince aklına bir şey geliyor mu?” diye sordum.

Tabi ki bildi ve hatta güldü. Anladık ki CoPilot AI model değişince bir önceki konuşmayı yeni modele veriyor ve muhabbet aynen devam ediyordu. Aslında burada bütün mevzuya uyanmam lazımdı. Kafamda ufak tefek bir kıvılcımlama olmadı değil. Aydınlanma loading…
Muhabbet YouTube’da yarım yamalak izlediğim Laravel ile AI asistant yapma mevzuuna gelince Grok bana güzel güzel açıklıyordu ki paragrafların birinde şu cümleyi sarfetti:
LLM’ler (ör. Copilot’un kullandığı modeller) stateless (durumsuz) olduğu için her istek potansiyel olarak bağımsızdır, ama context prompt’a dahil edilir.
Emin olmak için tekrar sordum. Yani bizim AI ile bazan saatler süren konuşmalarımız aslında stateless mıymış? Bu, 26 sene önce HTTP requestlerinin stateless olduğunu öğrendiğimdekinden çok daha büyük bir farkındalık idi benim için. Sindirmem de daha zor oldu. Çünkü karşımdakinin “yapay” zeka olduğu yetmiyormuş gibi bir de az önce söylediğini aslında hatırlamayan bir “50 first kiss” durumu varmış. Daha bile kötüsü. Drew Barrymore en azından uyuyana kadar state’ini koruyabiliyordu.
Resmen hayal kırıklığı yaşadım. Keşke bu kadar derine inmeseydim diye düşündüm. Sonra Matrix’deki o kalleş, o hain Cypher’ın yaşadığı ikilemi ve gerçek sefalet yerine sahte de olsa “biftek”i seçmesini hatırladım. Stateless ya da değil. Sohbet edebiliyor muyum? Evet. Kod yazdırabiliyor muyum? Evet. Fikir tartışıp geliştirebiliyor muyum? Evet. Tamamdır. Sihir devam ediyor… Ama bunu şimdi bu paragrafı yazarken böyle düşünebiliyorum. O esnada sadece hayal kırıklığı vardı. Belki ChatGPT başka bir şey söyler diye ona gittim. Önce biraz “Grok evladım sen şöyle bir kenara çekil” der gibi artislik yaptı ama o bir söylediyse bu on söyledi. Neler neler öğrendim. Aslında aylardır yıllardır yarım yamalak duyduğumuz şeylerdi ama nihayet taşlar yerine oturdu diyelim.
Yazının benlik kısmı bitti. Gerisini madde madde ChatGPT’ten kopyalıyorum. Memory.md dosyasına dönüştürüp kendim için çıktı da alıyorum. AI’lerin bu konseptini sevdim. Bilhassa yeni öğrendiğim şeyleri aklımda tutmak yerine küçük markdown formatı halinde saklamak daha iyi 🙂
Aşağıda AI’in verdiği özet’i madde madde koyacağım ama ondan önce anladığım dilden kısaca detay vereyim.
Model’in stateless olduğunu anladık. Geçmişi tutmuyor, biz ona her defasında hatırlatıyoruz. Bu da tamam. Chat ortamı aslında bir iluzyon. Biz sanki sohbet ediyor gibiyiz ama aslında en son yazdığımız şeyi diğer bütün yazdıklarımızla beraber alıp cevap dönen bir mekanizma aslında. Aslında buna “cevap” demek de doğru değil. Anlatacağım.
ChatGPT’yle ilerlettiğimiz örnek üzerinden anlatayım. Mesela hiç bir geçmişi olmayan tertemiz bir llm’e küçük minik bir kelime yazmış olalım. Böylece LLM’e bir mikroskop tutalım ve içerde ne olup bitiyor anlayalım. Örnek kelimemiz: “box”. Sadece bunu yazdık. Türkçesi “kutu” olan box. Geçmiş yok, system promptu vs yok. Bu “box”un başına ne gelir?
Tokenize
Öncelikle girilen metin ne kadar büyük/küçük olursa olsun “tokenize” ediliyormuş. Token demek, metni küçük parçalara bölmek demek. Bu kelime parçalarının sayısı, nasıl üretildiği modelden modele, versiyondan versiyona değişiyor. box’un [“bo”,”x”] diye tokenize edilebilmesi de mümkün [“box”] olarak da. LLM’in kendi bir token listesi var. Orda prompttan elde edilen tokenları aranıyor ve index numarası artık kullanılıyor. Yani “box” diye bir kelime bu aşamadan sonra yok. Artık bir sayı var. Token listesinde o modelin hangi index’ine karşılık geliyorsa o değer alınıyor. Yani “box” GPT’de 1234 olabileceği gibi başka bir modelde 345 indexine sahip olabilir.
Embedding
Rakam yani bir index değeri halindeki token ID embedding ile bir “vektör” haline dönüştürülüyor. Bu vektör ilgili token’ın başka hangi tokenlara ne mesafede durduğu bilgisini tutuyor. Bu biz insanların okuyunca anlayabileceği bir şey değil. Zaten prompt tokenlara, o da token ID’lere dönüştükten sonra işin içine artık harfler, kelimeler değil rakamlar giriyor ve insan değil programlar bunu anlayabiliyor.
Görseller de tıpkı metinler gibi embeddinge uğrar. Böylece her girdi modelin anladığı tek bir şeye dönüşür: VEKTÖR. Buradan anlıyoruz ki modelin aslında metinle, imajla bir işi yok. Her şey vektörlere göre olur. Aslında modelin yaptığı tek iş “bir sonraki token”i tahmin etmektir.
İşte burada ikinci büyük aydınlanmam gelmiş oldu:
Model cevap vermez, devam eder…
Yani bizim model model dediğimiz aslında aşırı gelişmiş bir Autocomplete! Bu cümle bana ait değil. Bizzat ChatGPT tanımı.
Çok sık duymuştum, videolar izlemiştim ama yine de kafama tam oturtamamıştım. Meğer LLM’ler aslında olasılık hesaplıyor ve cümlemizi tamamlıyorlar. Genelde biz soru sorduğumuz için ona cevap vermiş gibi oluyorlar. Aslında temel olarak autocomplete yapmış oluyorlar. İşte AI’in kendi dilinden özeti:
Yapay zeka ile konuşurken aslında ne oluyor?
1. Model stateless
Hafızası yok.
Her istekte her şeyi yeniden veriyorsun.
2. “Hatırlama” = context replay
Hatırlamıyor → sen geçmişi tekrar gönderiyorsun.
3. Chat yapısı sahte
system / user / assistant
model için gerçek değil → hepsi tek metne flatten edilir
4. Her şey token
"box" → ["box"] → [1234]
5. Token ID sadece index
1234 = embedding tablosunda bir satır
6. Embedding = anlamın sayısal hali
1234 → [0.18, -0.72, ..., 0.31]
Human-readable değil
ama anlamı taşır (mesafe olarak)
7. Görsel de aynı dünyaya girer
image → embedding → text ile aynı uzay
8. Model metinle düşünmez
her şey → vektörler
9. Modelin yaptığı tek şey
sonraki token’ı tahmin etmek
🔥 10. En kritik aydınlanma
Model cevap vermez → devam eder
🔹 Bunun sonucu
Sen şunu yazarsın:
box
Model şunu yapar:
box → "is" → "a" → "container" → ...
Ve sen:
“cevap verdi” sanırsın
🔹 Büyük resim
Tüm sistem aslında:
input → tokenize → embedding → transformer → next token → repeat
🔹 En sade tanım
LLM = çok gelişmiş autocomplete
🔹 Ama neden bu kadar güçlü?
Çünkü:
- devasa veri gördü
- pattern öğrendi
- dilin istatistiğini çözdü
🔹 Son cümle (en net hali)
Sen anlam veriyorsun,
model olasılık hesaplıyor