LLM’ler ve 2024 Başlarında Programlama Eğilimleri
(antirez.com)- ChatGPT ve yerel LLM’ler, deneyimli programcılar için kod yazmanın kendisinden çok belge arama, karmaşık API’leri öğrenme, atılacak programlar yazma gibi tüketici işleri azaltan araçlara dönüştü
- LLM’ler doğaüstü zekâlar değil; eğitim verisi uzayı içinde sınırlı biçimde enterpolasyon yaparlar, ancak programlama gibi kaliteli verinin bol olduğu alanlarda “çok şey bilen aptal” gibi büyük ölçüde işe yararlar
- PyTorch tensör dönüştürme, macOS Objective-C BLE istemcisi, ONNX model girdi/çıktı yorumlama, CSV analiz betikleri gibi sonucu doğrulanabilir sorunlarda GPT-4 çalışma süresini ciddi biçimde kısaltır
- C tabanlı sistem programlama ve algoritma uygulama gibi karmaşık akıl yürütme gerektiren işlerde, Bloom filter hash tasarımı ve llama.cpp Q6_K kuantizasyon formatını yorumlama örneklerinde sınırlar ortaya çıkar
- Programlamanın büyük kısmı mevcut kalıpları biraz değiştirerek yinelemekten ibaretse, LLM’i iyi kullanma ve problemi açıkça anlatma becerisi daha önemli hale gelir
Deneyimli programcılar neden LLM kullanıyor?
- LLM kullanımının amacı yalnızca daha hızlı kod yazmakla sınırlı değildir
- Alışılmadık belgeleri aramak
- Aşırı karmaşık API’leri öğrenmek
- Birkaç saat sonra atılacak programlar yazmak
- Zihinsel açıdan ilginç olmayan ayrıntılarla uğraşmak
- Google spam’in yoğun olduğu bir arama alanına dönüştükçe, LLM gerekli bilgiye hızla ulaşmak için alternatif bir yol haline geldi
- Python gibi üst seviye kodlarda LLM kullanımı arttı, ancak C kodunda çok daha az kullanılıyor
- Kritik fark, LLM’in ne zaman hız kazandırdığını ve ne zaman aksine yavaşlattığını ayırt edebilmekte yatıyor
- LLM’ler, Wikipedia veya YouTube dersleri gibi iradesi, becerisi ve disiplini olan kişilere büyük fayda sağlar; geride kalan kişiler içinse sınırlı kalabilir
LLM ne her şeyi bilir ne de basit bir papağandır
- Sinir ağlarının ve LLM’lerin iç işleyişi hâlâ oldukça opak
- Bazı yapay zeka uzmanları LLM’leri gelişmiş Markov chain’ler ya da eğitim verisinin varyasyonlarını tekrar eden sistemler olarak küçümsedi, ancak bu “papağan” bakışı kanıtlar karşısında büyük ölçüde geri çekildi
- Tersine, LLM’lere gerçeklikte olmayan doğaüstü yetenekler atfetmek de doğru değildir
- LLM, eğitim sırasında gördüğü verilerin oluşturduğu uzay içinde sınırlı olarak enterpolasyon yapabilir
- Tam olarak hiç görmediği programları da yazabilir
- Eğitim verisinde sık geçen birden fazla fikri karıştırabilir
- İnce akıl yürütme gerektiğinde ciddi biçimde başarısız olabilir
- Bu sınırlara rağmen LLM’ler, yapay zeka tarihinin en büyük başarısı olarak görülebilir
“Çok şey bilen aptal” olarak programlama yardımcısı
- LLM’ler temel ve çoğu zaman hatalı akıl yürütme, halüsinasyon ve var olmayan gerçekler üretme sorunlarına yol açabilir
- Aynı zamanda programlama gibi kaliteli verinin bol olduğu alanlarda, engin bilgiye sahip bir savant gibi çalışır
- Birlikte pair programming yapılacak bir meslektaş olarak yetersiz kalabilir, ancak kullanıcının soru sorduğu ve yanıtı doğruladığı bir yapıda faydalıdır
- Geçmişte birkaç dil, klasik algoritmalar ve temel kütüphaneleri bilmek birçok işi yapmak için yeterliydi
- Günümüzde framework, dil ve kütüphanelerin patlamasıyla karmaşıklık büyük ölçüde arttı; bu ortamda “her şeyi bilen aptal” kullanışlı bir çalışma arkadaşı haline geliyor
Üst seviye kod ve veri yorumlamada başarı örnekleri
- Keras’tan PyTorch’a geçerken LLM, PyTorch belgelerini baştan sona çalışmadan model yapısı için gereken kodu yazmaya yardımcı oldu
- Kullanıcı embedding veya residual network gibi kavramları zaten biliyordu
- Gerekli model yapısını ve soruları açıkça sunmak etkili oldu
- GPT-4, PyTorch modelini ve batch formatını görerek, tensörü sinir ağı girdisine uyacak şekilde reshape eden kodu yazdı
- Kullanıcı Python CLI’da tensör boyutlarıyla veri batch’inin uyumlu olup olmadığını kontrol etti
- ESP32 tabanlı cihaz için BLE istemcisi yaparken, macOS native API’sini kullanmak üzere Objective-C kodu hızla yazıldı
- Çok platformlu Bluetooth binding’lerinin genel olarak kullanılamaz olduğuna karar verildi
- Objective-C BLE API’si ve uzun zaman önce kullanılmış Objective-C ayrıntılarıyla yeniden uğraşmak gerekiyordu
- Nihai kod SerialBTE.m içinde yer alıyor
- Kodun büyük bölümünü LLM doğrudan yazmadı, ancak sorunun nedenini ve çözüm yolunu açıklayarak yazma hızını ciddi biçimde artırdı
- Bu yardımcı programın emek-getiri oranı düşük olduğundan, ChatGPT olmasaydı muhtemelen hiç denenmezdi
ONNX modelini yorumlama ve atılacak programlar yazma
- Belgeleri yetersiz bir ONNX formatlı convnet kullanılırken LLM, girdi/çıktı metadata’sı ve test görüntüsünün raw output değerlerine dayanarak çalışma biçimini yorumladı
- Başta girdi görüntüsünün formatı ve boyutu bilinmiyordu
- Çıktı basit bir ikili sınıflandırma değil, yüzlerce değerden oluşuyordu
- ChatGPT, çıktının görüntü içindeki olası kusur bölgelerini gösteren normalized box’lar ve kusur olasılığı olabileceğini varsaydı
- Birkaç görüşmeden sonra Python inference betiği ve girdi tensörü dönüştürme kodu oluşturuldu
- “Atılacak programlar” için LLM’in tüm kodu yazmasına izin verilen durumlar vardır
- Küçük bir sinir ağı eğitilirken loss curve’ü görselleştirmek için GPT-4, CSV formatını görerek plot.py dosyasını üretti
- Komut satırına birden fazla CSV dosyası verildiğinde her deneyin validation loss curve’ünü karşılaştırması istendi
- Tüm iş 30 saniye sürdü
- AirBnB CSV raporunu okuyup daire bazında ay ve yıla göre gruplayan, temizlik ücreti ve konaklama günü sayısını dikkate alarak aylık ortalama kira gelirini hesaplayan pandas programı da ilk denemede çalıştı
- Bu tür programların yazımı sıkıcı ve pek ilgi çekici olmadığı için, LLM bunu üstlendiğinde kullanıcı önemli işlere odaklanabilir
C ve sistem programlamada ortaya çıkan sınırlar
- C programı yazarken LLM neredeyse her zaman yalnızca daha kullanışlı bir belge biçimi olarak kullanılır
- Sistem programlamada karmaşık akıl yürütme gerekir ve mevcut LLM’ler bu noktada sıkça başarısız olur
- Bloom filter uygulaması istendiğinde GPT-4’e 100.000 öğe ve en fazla %5 false positive probability koşulu verildi, ancak iyi bir uygulama çıkaramadı
- Yalnızca birbirine benzeyen iki hash function kullandı
- Aynı string’den K adet yeterince decorrelated hash üretmeye yönelik soyutlama eksikti
- Açıkça N adet decorrelated output üretmesi istendiğinde daha iyi bir hash function önerdi
- GPT-4 küçük alt problemlere bölündüğünde daha uygun hash fonksiyonları yazabildi, ancak Bloom filter’ın genel tasarımında bu fikri kendiliğinden uygulayamadı
- Bu sonuç, zayıf akıl yürütme yeteneği, konuya özel kaynak eksikliği ve düşük kaliteli kaynakların karışık etkisi olarak görülebilir
Yerel modeller ile büyük modeller arasındaki fark
- Sistem programlama problemlerinde küçük modellerle büyük modeller arasındaki fark belirgindir
- Mixtral, aynı hash_id probleminde hash sonucunun sonuna
hash_ideklemeyi önerdi; bu, çok kötü bir çözüm olarak değerlendirildi - deepseek-coder 34B’nin 4-bit kuantize edilip MacBook M1 Max üzerinde çalıştırılması daha iyi sonuç verdi
- Kullanıcı, hash_id’yi sona eklemenin dağılımı bozduğuna dair ipucu verdi
- Model, basit toplamanın sorunun nedeni olabileceğini tespit etti
hash_id’yi karıştırmak için XOR gibi bitwise operation alternatifleri önerdi
- Bu örnek, yalnızca belgelerden veya Google aramasından elde edilmesi zor olan türde bir sorun nedeni belirleme ve çözüm önerisine yakındır
- Yine de deneyimli bir sistem programcısı için LLM genel olarak hâlâ pek tatmin edici çözümler sunamıyor
llama.cpp Q6_K formatını yorumlama örneği
- ggufflib projesi, llama.cpp’nin kuantize modelleri yüklerken kullandığı GGUF formatındaki dosyaları okuyup yazan bir kütüphanedir
- Kuantizasyon encoding’i, hız nedeniyle her quant’ın bit’leri karmaşık bir şekilde saklanacak biçimdedir
- Başta encoding’i ChatGPT ile anlamaya çalışıldı, ancak llama.cpp kodunu doğrudan reverse engineering yapmak çok daha hızlıydı
- Fonksiyon GPT-4’ün context’ine sığacak kadar küçük olmasına rağmen, struct bildirimine ve decoding function’a bakıp veri formatı dokümantasyonunu yeniden oluşturma sonucu işe yaramazdı
- Q6_K formatı açıklaması istendiğinde de lower/upper bit’lerin weight konumuna göre
qlveqhiçinde nasıl saklandığını net biçimde açıklayamadı- Daha basit bir saklama biçimi açıklayan fonksiyon istendiğinde de indeksler hatalıydı
- 6-bit’ten 8-bit’e sign extension işlemi de yanlıştı
- Bu iş sonunda kâğıt ve kalem, kod okuma ve decoder’ın çıkardığı bit’leri takip etme yöntemiyle çözüldü
- Bu tür işlerin de bir atılım olmadan, yalnızca bir miktar scaling ile birkaç ay içinde mümkün hale gelebilecek kapsamda olduğu tahmin ediliyor
Programlama işlerinin doğası ve LLM kullanma becerisi
- Günümüzde programlamanın önemli bir kısmı aynı şeyi biraz farklı biçimde tekrarlamaktan ibarettir ve çoğu zaman yüksek düzeyde akıl yürütme gerektirmez
- LLM’ler bu tür tekrarlı programlamada oldukça güçlüdür, ancak context boyutu sınırı hâlâ büyük bir kısıttır
- LLM’in kısmen yapabildiği türde programlar yazmanın 5 veya 10 yıl sonra da iyi bir konum olup olmayacağını düşünmek gerekir
- LLM’in akıl yürütme yeteneği zayıf ve kusurludur, ancak gözlemlenen sonuçları yalnızca basit kelime tekrarıyla açıklamak zordur
- Sonraki token’ı tahmin etme öğrenme hedefi, bir tür soyut model oluşturmayı zorunlu kılar; bu model zayıf, delikli ve kusurludur
Neden şimdi LLM kullanmalı?
- Programlamada LLM kullanmamak için güçlü bir neden yok
- LLM’e doğru soruları sorabilme becerisi önemli bir yetenek haline geliyor
- Problemi açıkça anlatma becerisi yalnızca LLM için değil, insanlarla iletişimde de faydalıdır
- Birçok programcı belirli alanlarda çok iyi olsa da iletişim konusunda eksik kalabilir
- Google’ın kullanımı zorlaştıkça, LLM sıkıştırılmış doküman gibi kullanmak için de iyidir
- Belirsiz iletişim protokolleri veya karmaşık kütüphane ayrıntıları gibi “junk knowledge”ı doğrudan daha az öğrenmek zorunda bırakması, LLM’in pratik değeridir
1 yorum
Hacker News yorumları
Esas nokta şu kısım: “Bunu ChatGPT olmadan yapabilir miydim? Elbette mümkün olurdu, ama daha uzun sürecek olması en ilginç tarafı değil. Asıl mesele, buna değmeyeceği için muhtemelen hiç denemeyecek olmamdı.”
Kod yardımında LLM’lerin gerçek potansiyeli, yeni bir işe başlama eşiğini düşürüp, gelecekteki projeler yığınında süresiz kalacak şeyleri gerçekten ele alıp bitirmeyi sağlamasında yatıyor.
İnternet ve açık kaynak da benzer bir etki yaratmıştı; ilgi duyulan ama bizzat yapılmayan projelerde de zamanla birileri benzer sorunları yeterince çözdükçe, yeniden kullanılabilen veya uyarlanabilen kullanışlı uygulama ve kütüphanelerin sayısı patladı.
Yazarın, LLM’lerin tek başına o kadar yetkin olmadığı ama temel beceriye ve motivasyona sahip kişiler için bir yükseltici olduğu görüşüne katılıyorum.
Sonra bunların beklediğimden çok daha az çabayla yapılabileceğini fark ettim.
Uygun biriyle fikir alışverişi yaparak da benzer bir etki elde edilebilir, ama problem alanını tamamen bilmesi gerekmese de anlamlı girdi verebilecek birinin 7/24 tek tıkla hazır beklediği bir durum yok.
Bazı konularda yardımcı oldu, ama genellikle ne yaptığımı bilmediğim bir noktaya geldiğimde model de benden daha iyi bilmiyor.
Onun dışında, doğrudan kod yazmaktan daha hızlı şekilde prompt hazırlamak zor geliyor.
Bu araçları kullanmayı ben mi beceremiyorum, merak ediyorum.
ow2 asm kütüphanesini oldukça iyi biliyordum ama doğru descriptor formatını hatırlamak için arama yaparken harcayacağım çok zamanı kurtardı.
Ayrıca başka statik analiz kütüphanelerinin durumu ele alma biçimleri nedeniyle neden benim için yeterli olmadığını anlamama da yardımcı oldu.
Benim için ChatGPT iki şey yapıyor: ufak StackOverflow aramalarını ve kütüphane kodu içinde gezinmeyi azaltıp belirli sorulara yanıt bulmamı sağlıyor; ayrıca başlamadan önceki proje araştırması aşamasında seçmeyi düşündüğüm yaklaşımın uygulanabilirliğini anlamama yardımcı oluyor.
Ağır ADHD varsa en basit işler en zorları oluyor; çöpü çıkarmak ya da postayı açmak bile neredeyse imkânsız olabiliyor.
Kafanın içindeki diyalog saatlerce sadece o işi yap diye bağırıyor, ama beden dinlemiyor.
Buna yürütücü işlev bozukluğu deniyor, ama benim hayatımın baş belası.
LLM’in sırf o işe başlamayı sağlaması bile muazzam bir şey.
Programlama konusunda tamamen katılıyorum.
LLM kullanımının en verimli noktası, ilgili konu hakkında çıktıyı doğrulayacak kadar bilgi sahibi olduğunuz ve ne istediğinizi ayrıntılı, mümkünse özlü biçimde açıklayabildiğiniz durumlar.
Daha hızlı yapmanızı sağlıyor, normalde yapmayacağınız işleri de yaptırıyor ve atılabilir ama küçük, değerli programlar üretmede ciddi şekilde yardımcı oluyor.
Çok faydalı olduğu bir başka alan da programlama olsun olmasın tamamen yeni bir konuyu keşfetmek.
İyi bilmediğinizi söyleyip, ayrıntıların şart olmadığını ama bu konuda konuşmak ve düşüncelerinizi toparlamak istediğinizi belirtmeniz yeterli.
Duyduklarına dayanarak ek araştırma yapmaya veya daha fazla soru sormaya istekli kişiler için özellikle yararlı.
Pek çok alana giriş kapısı, temel terimleri anlamaktan, insanların hangi ayrımları neden yaptığını duymaktan ve o konunun otoritelerinin kim olduğunu bilmekten geçiyor.
Anlamadıkları bir canavar ortaya çıkana kadar kurcalayıp en sonunda sadece build’in geçmesini sağladıkları bir durum doğuyor.
Öğrenen kişinin yardıma ihtiyacı var, ama Copilot biçimindeki bir LLM’in sunduğu yardım doğru yardım türü değil.
Junior’ın belirsiz veya yanlış tanımlanmış sorusuna bir şekilde kod üretmeye çalışmak yerine, netleştirici sorular soran ve çözümü birlikte belirleyen bir yol arkadaşı olarak tasarlanmış bir Copilot modeli eğitilse ilginç olurdu.
Her seferinde ya ince bir şekilde yanlış ya da tamamen halüsinasyon ürünü bir öncül sundu ve bunun yanlış olduğunu fark edene kadar zaman kaybettirdi.
Yanlış yanıta haksız bir özgüvenle yaklaşması olmasa, bildiklerimi birleştirmemden çok da kötü değil denebilirdi; ama şimdilik rubber duck veya otomatik tamamlama alternatifi olarak fena değil.
Yeni bir dilin web sitesine gidip, dokümantasyon hakkında onunla konuşarak soru sorabileceğim ve anlamama yardımcı olacak bir LLM olsa güzel olurdu.
O dilin ya da framework’ün gerçek kod örnekleriyle eğitilmiş olup, tam o anda yeni bir program veya fonksiyon yazmama yardım etmesi daha da iyi olurdu.
Çevrim içi bir REPL’e bağlanıp satır içinde yardımcı olursa bu daha da büyük bir avantaj olur.
LLM’lerin en az değer verilen yönünün, yazıda değinilmiş olsa da doğrudan ele alınmayan, her şeyi bilen geliştirici gibi bir rol olduğunu düşünüyorum.
Bir programcı ne kadar kıdemli olursa olsun, sonunda neredeyse hiç bilmediği bir teknolojiyle karşılaşır.
Herkes bir alanda junior’dır.
Win32, C++, COM konusunda bir tanrı olsanız bile, yazılımı paketlerken karmaşık NSIS betiklerinde takılabilirsiniz.
25 yıl boyunca web uygulamaları yapmış ve PHP dil kurulunda yer almış olsanız bile, kredi kartı ağlarıyla haberleşen anlaşılması güç bir ISO standardını uygulama işi verildiğinde, kredi kartı ağlarıyla o düzeyde hiç haberleşmemiş olabilirsiniz.
İlk iPhone’dan beri iOS uygulamaları geliştirmiş, ondan önce Mac uygulamaları yapmış, Apple’da birkaç yıl çalışmış, iOS API’lerinin çoğunu ezbere bilmiş ve hatta bazılarını bizzat tasarlamış olsanız bile, uygulamaya CalDAV desteği ekleme işi verildiğinde CalDAV’ın ne olduğunu bile bilmiyor olabilirsiniz.
Bu gibi durumlarda LLM yardımcı olabilir; tüm kodu yazamasa bile en azından sizi doğru yöne yönlendirebilir.
Kafanızı başka teknolojilerle doldurduktan sonra, eskiden öğrenmiş olduğunuz ama yeni teknoloji yüzünden kenara ittiğiniz şeyleri yeniden hatırlayıp tekrar etmeniz gereken zaman geliyor.
Tuhaf bir his.
Doğal olarak çalıştığınız şirketin yaptığı işlerin ortalamasını takip ederken, CSS’e dokunmayalı “biraz olmuş” dediğiniz bir durumda kalıyorsunuz.
Python dataclass hissini yeniden kazanmak için hafta sonu çalışmanız gerekebilir.
Google’da bulunabilecek bir şeyse, LLM’nin onu daha hızlı ve daha iyi bulup düzenleme olasılığı yüksek.
Neyse ki ben o zamana kadar muhtemelen çoktan emekli olmuş olurum.
“Kodun çoğunu ChatGPT’den kesip yapıştırarak yazdım” akımı şaşırtıcı.
Bu kadar acı verici bir iş akışına katlanan bu kadar çok insan olması beni hâlâ şoke ediyor.
Orijinal yazının yazarı, GPT ile kendi bilgisinin ötesinde kod yazan bir acemi değil; kesinlikle deneyimli bir mühendis.
Normalde kodlama iş akışına ve araçların kullanılabilirliğiyle verimliliğine dikkat edecek biri olurdu; buna rağmen birçok kişi GPT ile yerel dosyalar arasında sürekli kod kopyalayıp yapıştırmaya katlanıyor.
Bu can sıkıcı iş akışı, başta aider’ı yapmama neden olan şeydi.
aider, yerel git deposunu GPT ile paylaşarak yeni kodun ve değişikliklerin doğrudan dosyalara uygulanmasını sağlıyor.
İlgili kod bağlamını da GPT ile paylaştığı için projeyle entegre olan kod yazabiliyor.
Böylece yalnızca kopyalayıp yapıştırması kolay, izole kodlar değil; daha incelikli katkılar da mümkün oluyor.
Sonuçta sohbet ederken benim ve GPT’nin dosyaları birlikte düzenlediği akıcı bir pair programming iş akışına dönüşüyor.
https://github.com/paul-gauthier/aider
Peki onu kod hakkında yalnızca konuşmak için kullanmanın bir yolu var mı?
Ben LLM’leri farklı yaklaşımların artılarını ve eksilerini konuşmak ya da bir problemi rubber ducking yapar gibi çözmek için kullanıyorum.
Bunun için kodu kopyalamam gerekiyor; aider ise değişiklikleri uygulamaya odaklı olduğundan bu kullanım için pek uygun gelmedi.
Genelde doğru yaklaşım hakkında birkaç tur gidip geldikten sonra değişikliği uygulayıp uygulamamaya karar veriyorum.
O, Redis’in yaratıcısı.
Zaten abonelik ücreti ödüyorsanız API’ye ek ücret ödemek yerine kopyalayıp yapıştırmak mantıklı.
Üstelik herkesin verimlilik artışının başka birinin projesine bağımlı olmaya değip değmeyeceğine dair eşiği farklıdır; böyle projelerin ücretli hâle gelme ya da terk edilme riski de var.
Gerçek bir dosyayla yaptığım ilk deneme fazla büyük olduğu için patladı; ikinci gerçek dosya da hâlâ fazla büyüktü.
aider’ın büyük dosyaları token sınırına sığacak şekilde bölemiyor görünmesi şaşırtıcıydı.
GPT’nin token sınırı o kadar büyük kaynak dosyalarını alamıyor.
Çalışacağım dosyayı seçip, GPT’nin kusmaması için ameliyat da yapmam gerekiyorsa IDE’deki Copilot’u kullanmaya kıyasla zaman kazandırıyor mu bilmiyorum.
Başta “kod boyutu ≫ token sınırı” sorunuyla uğraşmanın aider’ın temel katkısı olduğunu düşünmüştüm, ama sanırım öyle değilmiş.
Yeniden denemek isterim ama aider, “aider’ın kaldırabileceği kadar basit bir problem ve codebase bulmam gereken” dezavantajlı bir kategoride.
Buna karşılık Copilot ve ChatGPT, gerçek işimdeki gerçek codebase’e, kusurlarıyla birlikte, her gün bulunduğum yere gelip yardım ediyor.
Mevcut özellikleriyle sohbet ve doğrulama kullanım senaryolarını çok iyi kapsadığını düşünüyorum.
Buradaki yorumlar, yazılım kullanıcılarının çoğunun yüksek memnuniyetini yansıtmayabilir.
Aider, antirez’in yazıda bahsettiği kullanım senaryosunu gerçekten hayata geçirmeye yardımcı oluyor.
Özellikle de antirez’in dediği gibi LLM’ye doğru soruları sormayı öğrendikçe.
Son birkaç gündür kapalı kaynak bir Mac uygulamasındaki bir hatayı düzeltmeye çalışıyordum.
Uygulamayı seviyorum ama bu hata yıllardır beni çıldırtıyordu.
Hangi Objective-C metodunun kabaca bu hataya yol açtığından oldukça emindim, ama metodun ne yaptığını bilmiyordum ve decompile edilmiş sürümü akıl almaz bir karmaşaydı.
Duvara çarpmış gibi hissettim.
Sonra decompiler’ın ürettiği gürültüyü GPT-4’e verip temiz bir sürüme çevirmesini denedim.
Sonuç mükemmel değildi ama toparlayabildim; sonra onu uygulamaya swizzling ile yerleştirdim ve hata kaybolmuş gibi görünüyor.
Hiçbir zaman yeniden üretme adımlarını bulamadım ama normalde şimdiye kadar sorun ortaya çıkmış olurdu.
GPT-4 olmasaydı bunu asla yapamazdım.
Elbette bir kod parçasını tamamen yeniden yazarsanız, ne yaptığını anlamadan LLM kullansanız bile özgün uygulamadakiyle aynı hatanın bulunma olasılığı düşüktür.
Ancak başka hatalar doğabilir; sistem kesintisi ya da müşteri maliyeti gibi hatanın sonuçlarının önemli olduğu kodlarda kimsenin bunu bu şekilde yapmamasını umarım.
Bu yazı beni tamamen şaşırttı
Salvatore, bugün aktif olan en yetenekli yazılım mühendislerinden biri
Bu sözde aracın kendi uzmanlık alanında tamamen işe yaramaz olduğunu çok net görebiliyor
Buna rağmen, eğri büğrü ve işe yaramaz bir tornavida gibi bir kenara atmak yerine, bir şekilde işe yarar bir kullanım bulmak gerektiği yönündeki savunucuların öncülünü kabul ediyor
Giriş düzeyi makroekonomi dersinde öğrenildiği gibi, bir ada widget A üretiminde üstünse, diğer adanın B üretme becerisi ne kadar berbat olursa olsun A adasının B adasından yararlandığı bir uzmanlaşma ortaya çıkar
Bu yüzden antirez’in sistem programlamadaki göreli becerisinin LLM’i başka programlama işlerine itmesi doğal
Ama biz yalıtılmış biçimde var olmuyoruz
Çevremizde teknik meydan okumalar ve geçim isteyen pek çok insan var
Bunların çoğu bizimkileri tamamlayan becerilere sahip ya da bu becerileri edinebilir
Birlikte çalışınca işbirliğinin sonucu parçaların toplamını aşabilir
Belki LLM, PyTorch kodunu antirez’den daha iyi yazabilir
Ama garajda eski, eğri bir tornavida var diye onu kullanmak zorunda değiliz
Bugün hırdavatçıya gitmek daha iyi olabilir
Çünkü tam sözdizimi ya da tensör yeniden şekillendirme benim için o kadar önemli değil
Kendi görsellerim için bir convnet oluşturup eğitmek gibi kişisel bir kullanımda, bir Torch uzmanını rahatsız etmeye gerek yok
Convnet’in kendisini yeterince anlayıp Torch sözdizimini veya metotlarını yeterince bilmiyorsam bunu kendim yapabilirim
Alternatif, Torch kılavuzunun ayrıntılarını çalışmak olurdu ve sonuç aynı olurdu
Bu işte önemli olan MLX, Keras, PyTorch ayrıntıları değil, makine öğrenmesi kavramlarını kontrol edebilmek
Şu anda bir ölçüde yararlı ama gerçekten öyle demek zor; kullanmamak insanı “geri bırakmıyor” da
İlgili herkes onu daha yetenekli yapmak için elinden geleni yapıyor, o gün geldiğinde istediğinizi prompt ile yaptırırsınız
Mevcut nesilden zorla bir şeyler çıkarmak için acele etmeye gerek yok; şimdilik çoğu zaman üretkenliği artırmaktan çok düşürüyor
Aynı yazıyı okuyup okumadığımızdan kuşku duyacak kadar
Başkalarının ilginç bulduğu yeni bir araca bakıyor, kendisi için yararlı kullanım yolları buluyor ve aynı zamanda işe yaramadığı noktaları da kabul ediyor
İşe yaramaz olmayan örnekleri de yeterince destekliyor
Bu, geliştiriciler için özellikle devrim niteliğinde bir içgörü değil
Programlama dilleri gibi çeşitli araçları zaten sürekli kullanıyoruz ve her aracın güçlü ve zayıf yanları var
LLM’in neden bu kadar farklı olması gerektiğini anlamıyorum
Hiç güçlü yanı olmadığını iddia etmek aptalca görünüyor
Bunu ayda 20 doların altında yapabilir miyim?
Yeni bir projeye başlarken bir empedans sorunu var
Başta işin %0’ı tamamlanmış oluyor ve ister hello world olsun, ister CMakeLists dosyası, ister Python betiği; bir yerden başlamak gerekiyor, bu da zor
ChatGPT/LLM’den önce bu çabayı kendi içimden parmak uçlarıma çekip çıkarmam gerekiyordu
Artık bunu ChatGPT’ye bırakabiliyorum
Gerçekte “oturup kendim yapsaydım” olandan daha az verimli ve daha az güçlü, ama “oturup kendim yapmaya karar verme” maliyetini ortadan kaldırıyor
Yine de GitHub kod araması, StackOverflow, rastgele blog yazıları, belgeler, Discord vb. yerlerden kopyalanmış parçaları alıp yamamakla aynı şey
Birkaç deneme ve yeniden denemeden sonra projenin %5’lik başlangıç noktası oluşuyor ve nihayet bir şekil alınca gerçekten çalışabiliyorum
Sonuçta ChatGPT’nin çıkardığı sığ ve çöp kavram kanıtlarını kopyala-yapıştırla hızla üretip, yeterli ivme oluşunca bizzat derine inmeye geçiyorum
Bu yüzden daha yavaş ve verimsiz, ayrıca ChatGPT’nin benden daha iyi yaptığı bir şey de değil; ama daha kolay ve derine kazmam gerekmiyor
Nihayetinde projenin gerçekten önemli kısımları olan orta ve son aşamalarda çok daha fazla dayanabiliyorum, başta tükenmiş olmuyorum
En baştan doğru soruları mı soruyordum; sormuyorsam o işi etkili biçimde kurtarabilir miydim?
Batık maliyet 20 dolarlık abonelik ücretinin içinde kayboluyor
“Bir sorun var ve LLM saçmalarsa doğrulayabileceğim şeyleri hızlıca öğrenmem gerekiyor. Böyle durumlarda bilgi edinme hızımı artırmak için LLM kullanıyorum” kısmının temel içgörü olduğunu düşünüyorum
Programlamanın LLM’e özellikle uygun olmasının nedenlerinden biri, doğru cevabı doğrulamanın çoğu zaman önemsiz derecede kolay olması
LLM’in ilgili iş için doğru araç olup olmadığını değerlendirme kavramını deniyorum
“Çıktının doğru olmasının önem derecesi” ile “çıktının doğru olup olmadığını doğrulamanın kolaylığı”nı grafiğe dökmek gibi
ChatGPT ile Emmy kazanmış kadın sanatçıların yer aldığı şarkıların listesini çıkarmak, doğruluğu kontrol etmek zaman alsa da önemi düşük ve bazı hatalar olsa da sorun değil
O yüzden yazılımlarda hiç bug yok mu?
Çözümü düşünmek zor olan, ama olası bir çözümü doğrulaması kolay problemler
Ve bu problem sınıfının ne diye adlandırıldığını herkes biliyor
Dünya zaten alakasız ve hatalı karalamalarla dolu; bunların üretimini hızlandırmak yerine azaltmamız daha iyi
Belirli örnekten değil, genel fikirden söz ediyorum
ChatGPT'yi kod yazarken düşünce ortağı olarak kullanıyorum
Her gün, gün boyu onunla konuşarak işi bitiriyorum
Şirket Copilot'ı onayladı ama Copilot otomatik tamamlama korkunç bir deneyimdi
Şirket, ihtiyacım olan Copilot Chat'i ise onaylamadı
Yine de dizüstü bilgisayarımda kendi kodum üzerinde birim testleri veya kod yorumları vb. üretecek benzer bir araç olsa iyi olurdu
Elbette benim girdim ve yönlendirmem şartıyla
İş arkadaşlarım çok övdüğü için sorun bende mi diye düşündüm ama inanılmaz dikkat dağıtıcıydı ve birkaç gün sonra kapattım
Ben hâlâ konuşurken birinin cümlemi tamamlamaya çalışması gibiydi
Doğru olduğunda bile sinir bozucuydu, akışı bozuyordu ve çok sık yanılıyordu
[0] https://continue.dev/
[1] https://ollama.ai/
Birkaç gün önce Codeninja'yı denedim
Hatırladığım kadarıyla Copilot arka ucunu çalıştıran 4 seviyesinde kesinlikle değil, ama dışarı çıkmaması gereken hassas veriler için fiilen tek seçenek
Ya da OpenAI'den özel bir instance almak da bir yöntem olabilir
Bu yazıdaki en önemli bölüm bu olabilir ve 2024'te olacakları düşünürsek ne kadar tekrarlansa az kalacak kısım da şu
“Öyleyse LLM'lerde bir ölçüde akıl yürütme yeteneği var mı, yoksa hepsi blöf mü? Göstergebilimcilerin dediği gibi, ‘gösteren’ gerçekte var olmayan bir anlam izlenimi verdiği için bazen akıl yürütüyormuş gibi görünüyor olabilir. Ancak LLM'lerle yeterince uğraşmış olanlar, sınırlarını kabul etmekle birlikte bunun tek başına açıklama olamayacağını bilir. Daha önce gördüklerini harmanlama yeteneği, kelimeleri rastgele papağan gibi tekrarlamanın çok ötesine geçer. Eğitimin çoğu ön eğitim sırasında bir sonraki token'ı tahmin etme biçiminde yapılmış olsa da bu hedef, modeli bir tür soyut model oluşturmaya zorlar. Bu model zayıf, delik deşik ve eksiktir; ama gözlemlediğimiz şeyi gözlemliyorsak mutlaka var olmalıdır. Matematiksel kesinlik şüpheliyse ve en iyi uzmanlar bile sık sık karşıt konumlarda yer alıyorsa, kendi gözlerinle gördüğüne inanmak akıllıca görünür”