Yalnızca yapay zeka kullanarak 'Angry Birds' klonlamak
(twitter.com/javilopen)- Javi Lopez, GPT-4 ile kodu oluşturup Midjourney ve DALL·E 3 ile grafikleri üreterek Angry Birds tarzı 2D fizik oyunu Angry Pumpkins’i geliştirdi
- Ortaya çıkan oyun web’de oynanabiliyor ancak mobilde çalışmıyor; oyun ekranının altındaki açıklamaları izleyerek kendi seviyelerinizi de oluşturabilirsiniz
- Grafiklerin çoğu yapay zeka ile görüntü üretimiyle hazırlandı; bazı sprite’lar ise Photoshop/Photopea ile arka plan temizleme ve kırpma işlemlerinden geçirilerek oyuna uygun hale getirildi
- Kod, matter.js ve p5.js temelinde başladı; fırlatma yöntemi, çarpışmalar, parçacıklar, canavar biçimleri ve dolaylı darbe tespiti GPT-4 ile tekrar tekrar düzeltilip genişletildi
- Tüm kod yaklaşık 600 satır; doğrudan kod yazılmamış olsa da tek bir prompt’la tamamlanmış bir oyun elde etmekten çok, hataları açıklayıp düzeltmeye dayalı yinelemeli bir süreç gerekti
Angry Pumpkins sonucu
- Angry Pumpkins, Angry Birds’e benzer yapıda bir 2D fizik oyunu; GPT-4, Midjourney ve DALL·E 3 kullanılarak geliştirildi
- Oynanabilir oyuna Angry Pumpkins üzerinden erişilebilir
- Şu anda mobilde çalışmıyor
- Oyun ekranının altındaki açıklamaları okursanız kendi seviyenizi nasıl oluşturup oynayabileceğinizi görebilirsiniz
- Javi Lopez, yalnızca doğal dille bir şeyler üretmeye yönelik yeni bir çalışma biçiminin mümkün hale geldiğini ve bunu “tarihî bir an” olarak gördüğünü söylüyor
Grafik ve kod üretim akışı
-
Görüntü üretimi ve sprite çalışması
- DALL·E 3, Halloween atmosferli ana ekranı, “Angry Pumpkins” logosunu ve Play düğmesi bulunan başlık ekranını üretmek için kullanıldı
- Midjourney, mezarlık arka planı, 2D zemin, balkabağı karakteri, yeşil canavar, ahşap kutu, kemik, taş ve tahta kalas gibi oyun nesnelerini oluşturmak için kullanıldı
- Nesneler “sprite stylesheets” biçiminde üretildikten sonra Photoshop/Photopea ile kırpıldı ve arka planları temizlendi
- Küçük ayrıntılar Midjourney’in inpainting özelliğiyle tamamlandı
-
GPT-4 ile yapılan oyun mantığı
- Tüm kaynak kod sketch.js üzerinde yayımlanmış durumda
- Oyun kodu yaklaşık 600 satır ve Javi Lopez, doğrudan kendisinin yazdığı bir kod olmadığını belirtiyor
- Başlangıç prompt’u, matter.js ve p5.js kullanarak fareyle açı ve güç ayarlanıp top fırlatılan, 2D fizikle üst üste dizilmiş kutuların vurulduğu basit bir oyun yapmaya yönelikti
- Daha sonra Angry Birds tarzı fareyle fırlatma yöntemi,
Uncaught ReferenceError: Constraint is not definedhatasının düzeltilmesi, meşale parçacık efekti, dairesel canavar işleme ve dolaylı darbe tespiti gibi konular tekrar tekrar istendi
Tek prompt’tan daha önemli olan yinelemeli düzeltme
- Esas nokta, tamamlanmış oyunu tek seferde istemek değil; basit bir davranış temelinden başlayıp sürekli genişletme ve düzeltme akışı izlemek
- Her sorun çıktığında hata net biçimde açıklanarak GPT-4’ün düzeltmesi sağlandı
- Mevcut GPT-4, tek bir prompt’la bütün bir oyunu üretecek aşamada değil; ancak ileride yalnızca isteklerle AAA seviyesinde video oyunları yapılabileceğine dair bir beklenti de var
1 yorum
Hacker News görüşleri
Angry Birds'te PM olarak çalıştım; bu gerçekten harika bir demo
Orijinali Box2D ve Lua scripting kullanıyordu, ayrıca düşmanları ve seviyeleri de elbette elle yapmak gerekiyordu
Mevcut teknoloji durumuyla hit bir oyun yapılmasını beklemiyorum; kişinin kendi becerisinden çok teknolojinin sınırlarına takılması muhtemel
Yine de hızlı fikir doğrulama, prototipler ve game jam'ler için oyunun kurallarını değiştiren bir araç ve çocukların fikirleriyle oynayabileceği bir Scratch alternatifi olarak da iyi görünüyor
Kısa süre önce çok da bilmediğim iki framework ile temel bir REST API ve CRUD frontend oluşturmak zorunda kaldım; benzer bir deneme yapıp tüm kodu GPT-4'e ürettirdim
Büyük olasılıkla sadece dokümantasyona bakıp kendim yazmaktan daha yavaştı; o framework'lere aşina biri muhtemelen çok daha hızlı olurdu
Karmaşık kısımlar için çok spesifik ve uzun prompt'lar gerekiyordu, tüm uygulamayı yapmak yaklaşık 5 saat sürdü ve bunun hatırı sayılır bir kısmı yavaş ChatGPT çıktısını beklemekle geçti
Aşina olduğum framework'ler olsaydı muhtemelen 2 saat içinde biterdi
Bir şeyi doğru şekilde yapıp yapmadığımı kontrol etmekte kesinlikle faydalıydı; sanki sorular sorabileceğim bir uzman hazır bekliyormuş gibiydi
Formatı düzgün boilerplate kod üretmekte de iyiydi, ama günlük geliştirmede şu ankinden daha fazla kullanacağımı sanmıyorum
Çoğu durumda framework'ü iyice öğrenip kendin yazmak daha hızlı
Sık sık "{foo} platform projesi için iyi bir dizin yapısı nedir?" ya da "{language y} içinde {x} işlemi idiomatik olarak nasıl yapılır?" gibi sorular soruyorum
Pek çok dilde çok sayıda proje görmüş olmasının avantajı var; bu yüzden bazı sorular için tek başına oldukça iyi cevaplar verebiliyor
Hâlâ programlamayı anlamanız gerekiyor; sadece kodu doğal İngilizceyle yazdırmış oluyorsunuz
GPT-4'e 3 saat boyunca gözetim altında kod yazdırsanız bile, o gün sizin hâlâ “harcanmamış” en yüksek kodlama verimliliğine sahip 3 saatiniz kalmış olabilir
API ise genelde hangi araçla eriştiğini de merak ediyorum
Sonuç şaşırtıcı olabilir
“ChatGPT ile 30 dakikada iOS uygulaması yaptım!” türü yazı selinden daha ilgi çekici olan bu
Öyle yazılar bazen sadece basit bir Hello World yapmış olabiliyor, bu yüzden çok da anlamlı olmuyor; ama bu en azından ortaya tamamlanmış bir şey koyuyor ve gerçekten oldukça etkileyici
Yine de bilinmesi gereken ayrıntılar harcanan süre, prompt sayısı, gereken yön düzeltme sayısı ve yapan kişinin ilgili teknolojilere ne kadar hakim olduğudur
Kişisel olarak ChatGPT’nin çeşitli durumlarda çok yardımcı olduğunu düşündüm, ama kod üretimi bunlardan biri değildi
İçerik olarak “oyun sadece 600 satır ve ben tek satır bile yazmadım ama [oyun kodlama] en zor kısımdı” deniyor
Hello World değil ama bunu bir alışveriş listesinden çok daha zor görmek de pek mümkün değil
Yine de 600 satır ve birkaç kütüphane ile Angry Birds yapılabiliyor olması en etkileyici nokta
Çalışan kod yaklaşık 5 bin satır ve hepsi çalışıyor. Trafik yüksek değil ama yine de üretim ortamında
Sınırlarını bilmek, daha iyi prompt yazmak, halüsinasyon ihtimalini fark etmek ve riskleri sormak çok büyük etkenler
Özellikle çok iyi bilmediğim teknolojilerde en faydalı oldu. Android geliştiricisiyim ve yaklaşık 15 yıldır doğrudan yapmadığım web sitesi geliştirme işinde kullanıyorum
En havalı kısmı sistem yönetimi ve sunucu operasyonlarında yardımcı olmasıydı; gunicorn hatalarını ayıklamada da iyi
Proje büyüyüp bağlamı kaybettiğinde üretilen kodu düzenlemek gerekiyor ama daha büyük projelerde en büyük engel bağlam uzunluğu sınırı ve yakında hafifleyecek gibi görünüyor
Yakın zamanda yaptığım site, kodun yaklaşık %95’inin ChatGPT tarafından yazıldığı https://cosmictrip.space/ ve GPT-4 ile prompt üretip ardından DALL-E ile uzay görselleri oluşturdum
Basit bir site ama şu anda yine GPT+DALL-E tabanlı, açık uçlu görsel+metin yapay zeka macera oyunu da yapıyorum
DALL-E 3 API çıktığında 6 Kasım’dan önce yayınlamayı umuyorum ve bu macera oyununda da kodun %95’inden fazlasını ChatGPT yazıyor
Kod üretimi o kadar iyi ki, bizzat yaptığım ajanda GPT-4 API kullanıyorum
Fonksiyon çağırma ile yapılandırılmış alt görevler oluşturuyorum, ajanın bu kodu yazmasını sağlıyorum; ayrıca dosyaları bağlam olarak ekleme ya da kodla sohbet etme özellikleri de ekledim
Henüz yayımlanacak seviyede değil ama GPT-4’ün kod üretme yeteneği gerçekten müthiş; sadece prompt deneyimi gerekiyor
İlk yazdığınız prompt’un iyi olma ihtimali düşük, bu yüzden yaptığım ajanın o kısmı iyi çözmesini umuyorum
Fikir, Jira/kanban tarzı bir pano üzerinde AI coder’ları görevlere atamak; insanın onaylayıp düzenlemesi; AI’nın işi kontrol etmesi ve biletlerin sütunlar arasında otomatik hareket etmesi
Mevcut onlarca şablonu olmayan yeni bir oyun programlamak daha iyi bir turnusol testi olurdu
GPT-4 bu tür işlerde iyi olsa da, benim deneyimime göre tekrarlı iyileştirme konusunda iyi değil
Konuşma uzadıkça önceki bağlamı kaybediyor ve üretilen kod önceki davranıştan sapıyor
Örneğin “şu hatayı düzelt” demek kolayca başka bir özelliği bozan bir çözüme dönüşebiliyor
Başlıktaki kodun (1) nihai sonuçta (2) bulunduğu görülüyor; kodun en üstünde yer alması, ChatGPT’ye 600 satırdan fazla bloklar halinde tekrar tekrar üretim yaptırılmış olabileceği anlamına gelebilir
Bu oldukça şüpheli
500. satırda tanımlanıp 20. satırda yeni bir Slingshot oluşturulması, özellikle öyle yapması söylenmedikçe çok düşük bir ihtimal
loadImage('stone2.png');için de doğru dosya adını ve sprite boyutunu tesadüfen doğru seçti mi? Bunların hepsi prompt’ta verilmiş ve kod buna göre mi yazıldı? Gerçekte kullanılan prompt’lar gösterilmeliÇok daha makul senaryo, sınıf nesnelerinin nispeten bağımsız biçimde üretilip sonra insan tarafından büyük bir dosyada birleştirilmesi, ardından tamamının girdiye kopyalanıp “şöyle bir fonksiyon yaz” gibi kod prompt’ları oluşturulması
İddiaya göre sadece prompt kullanılmış olması imkansız değil ama beğeni ve itibar için “kodlamanın tamamını yaptırdım” kısmının ciddi biçimde abartıldığı hissi veriyor
Bir miktar kodun elle yazılıp veya birleştirilip girdiye eklenmesinden sonra “bunu da yap” şeklinde prompt verilmiş olması daha olası görünüyor
Bu yüzden çıktı “%100 üretildi” olabilir ama insanların varsaydığı şekilde olmayabilir
Bu yaklaşım GPT-4’e mevcut kodu yeniden yazdırır ama kodun tamamına niyeti açıklayan yorumlar özellikle istenmez veya eklenmezse zamanla önceki işlevden uzaklaşır
Test paketi yoksa bu tür ince sapmalar fark edilmez ve işlevler bozulur
Yazarın bunu yaptığına dair de bir ifade yok
Üstelik bu kişinin AI eğitim materyalleri satma gibi bir çıkar ilişkisi (4) var; bu alanda uzman gibi görünmesi kendi yararına ve X’te soru aldığında da ek ayrıntılar, adım adım Git geçmişi ya da gerçekten kullandığı prompt’ları sunmadı
Ayrıntı eksikliği ve inanması güç sonuçlar düşünüldüğünde, bu örnekte şüpheci olmak makul
CodeLlama 34B ya da GPT-3.5 gibi modellerle bu tür bir sonuç üretilebilir ama anlatıldığı şekilde olmaz
GPT-4 ile bile mümkün mü emin değilim. Prompt’lar gerçek olamayacak kadar özensiz görünüyor (5)
Yine de daha fazla ayrıntıyla buna karşı çıkılmasını isterim; ayrıca GPT-4’ün iyi bir araç olduğu da doğru
[1] - https://nitter.net/pic/orig/media%2FF9xoI8mXgAAn7v9.jpg
[2] - https://bestaiprompts.art/angry-pumpkins/sketch.js
[3] - https://nitter.net/javilopen/status/1719363669685916095#m
[4] - https://javilopen.substack.com/
[5] - “Şimdi canavarları dairesel yap ve çok dikkatli ol: ölçeklendirme ve çarpışma alanı konusunda dikdörtgen olanlar için zaten mevcut olan tekniğin aynısını uygula ve bunu da önceki gibi berbat etme.”
Oğlumun yükleme spinner'ına sinirliymiş gibi durmadan dokunduğunu görünce, sakin bir pazar öğleden sonrasında ben ve GPT bu oyunu kodladık
https://spinner.franzai.com/
Etkileşimli yükleme spinner'ı oyununun ilginç bir UX kalıbı olabileceğini düşünüyorum
Bir şeyi beklerken bile kullanıcının davranışının etkisi olduğuna dair geri bildirim verebilir
Tabii AAA oyunlardan değil, indie oyunlardan bahsediyorum
Eskiden bu patentin süresinin dolduğuna dair bir haber gördüğümü net hatırlıyorum ama bakınca o “eskiden”in üzerinden çoktan 8 yıl geçtiğini fark ettim
https://www.eff.org/deeplinks/2015/12/loading-screen-game-pa...
Bildiğim kadarıyla Namco'ya aitti ve Ridge Racer'da görülebilir
https://psycnet.apa.org/record/2014-37068-023
Yapay zekanın geliştirmeyi değiştirdiği artık şüphe götürmez
Sadece geçen hafta iki orta ölçekli servis geliştirebildim; bunlar binlerce satır Python koduydu ve Python, 10 yıldan uzun süredir kullanmadığım bir dildi
Gerçekten etkileyici olan, çoğunlukla benim yazacağım koddan daha iyi olması
Güzel bir README.md gerekiyorsa, route'lar, CLI argümanları vb. içeren kaynak kodu verdiğinizde onu oluşturuyor
İsterseniz testleri de yazıyor. Geliştirici olmak hiç bu kadar kolay olmamıştı
Kod üretiminde GPT-4, GPT-3.5'i eziyor
GPT-3.5'e çok ayrıntılı örnekler verirseniz kopyalamayı fena yapmıyor ama GPT-4 bir ölçüde “düşünüyor” gibi hissettiriyor
Deneyimime göre GPT-4 32k bağlamı oldukça sık başarısız oluyor
Örneğin 10 bin token'dan fazla, kabaca 30 bin karakterden uzun bir şey üretiyorsanız birkaç kez yeniden denemeniz gerekebilir
Ayrıca ChatGPT, önemsiz olmayan işler için ideal bir arayüz değil
API'yi doğrudan kullanmak ya da 32k bağlam kullanabilen Azure OpenAI Chat Playground gibi bir şey kullanmak daha iyi
Hazır yeri gelmişken, prompt üretimindeki tekrar eden angaryayı otomatikleştiren bir açık kaynak uygulama yaptım: https://github.com/codespin-ai/codespin-cli
Son 10 yılda no-code araçlarına muazzam yatırım yapıldı, ama artık ChatGPT kodu o kadar iyi yazıyor ki teknik sezgisi olan ama kod yazmayan biri için muhtemelen daha hızlı, daha esnek ve kullanılabilirlik açısından da benzer bir seviyeye yaklaşıyor olması ilginç
Kısa süre önce Mendix ile REST servislerini tüketen ve yayımlayan bir demo uygulama yapmak zorundaydım; ayrıntıları çözmem günler sürdü
Aynı işi ChatGPT ile herhangi bir dilde, örneğin bash ile, yapsaydım muhtemelen dakikalar sürerdi
Dağıtım ve sürüm yönetimi, PaaS/IaaS ile yüksek teknik beceri gerektirmeden çözülebiliyor; özellikle de kurumsal no-code platformlarının maliyetiyle kıyaslandığında
Kişisel bir önyargı olabilir ama ciddi işler yapmak için no-code platformları bana hep daha zahmetli geldiği için onlardan hiç hoşlanmadım; benzer nedenlerle ActiveRecord ORM'yi de sevmiyorum
Yine de no-code yakında epey demode kalacak gibi görünüyor
Sadece sorup kopyala-yapıştır yapacaksanız, kim sürükle-bırakla uğraşmak ister ki?
No-code kolay ama katı; kod yazmak ise esnek ama sıkıcı ve hataya açık
İstediğinizi sözlü olarak anlatıp hızlıca kod alırsınız ve kod temiz olduğu sürece gerektiğinde üzerinde oynayacak esnekliğiniz olur
Bazı durumlarda, bu örnekte olduğu gibi, ayarlama bile gerekmeyebilir
Gelecek için heyecanlıyım
Çok uzun süreceğini sanmıyorum
Bu, istatistiksel intihal aklama ve oldukça etkileyici
Şahsen HAL'i durduruyormuş gibi yapıp bugünün büyük kazma satıcılarına piyasada hendek kazmaktan ziyade, bu aklama altına hücumu engellemenin hukuken daha acil bir öncelik olduğunu düşünüyorum
GPT-4 ve yapay zeka araçlarını gerçekten iyi kullanarak üretkenliğini 100 kat artırmış serbest çalışanlar ya da uzaktan çalışanlar mutlaka vardır
Böyle harika bir numaranın sadece vakumda var olduğunu düşünmek zor
İki yıl sonra nelerin mümkün olacağını düşününce, cin çoktan şişeden çıktı
ChatGPT ile üretkenliği “100 kat” artırmanın bir yolunu biliyorsanız paylaşmanızı isterim
Açıkçası böyle yazılar gördükçe istihdam edilebilirliğim konusunda giderek daha fazla endişeleniyorum
Yedek planım da yok ve yazılım mühendisliğini öğrenmek için çok fazla zaman harcadım; tablo pek iç açıcı görünmüyor
Başkalarının da dediği gibi, sıradan insanlar LLM'lerin ihtiyaç duyduğu çalışan yazılımı üretecek kadar ayrıntılı ürün spesifikasyonları yazabildiğinde programcılar zor durumda kalır
Ama bu kulağa programlamaya oldukça benziyor
Bence işimiz değişecek. Klavyede kod yazmaya harcadığımız zaman azalacak, ne inşa edeceğimizi düşünmeye ayırdığımız zaman artacak
Hatta daha değerli hâle gelmemiz bile mümkün. Çünkü çok daha fazla işi başarabilir olacağız
Potansiyel bir RPG oyunu için paladinin tepeden görünüşlü animasyon sprite sheet'ini elde etmeyi denedim; başarısızlık süreci burada: https://imgur.com/a/2uJyUT3
Aslında önce tepeden görünüş varyasyonlarını denedim, en son ise merakımdan yandan görünüşü de ekledim
top down bazen doğru çalışıyordu ama çoğu zaman çok tutarsızdı
DALL-E 3 için de benzer yönlendirmelerin gerekip gerekmediğini merak ediyorum