1 puan yazan GN⁺ 2024-01-03 | 1 yorum | WhatsApp'ta paylaş
  • 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_id eklemeyi ö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 ql ve qh iç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

 
GN⁺ 2024-01-03
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.

    • “Başlama eşiği”ni geçtikten sonra bile, ChatGPT ile araştırdığım şeylerin çoğu başlangıçta ilerletmeyi pek düşünmediğim, sadece merak ettiğim konulardı.
      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.
    • Bu LLM rüzgârının epey dışında kalmış gibi hissediyorum.
      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.
    • Yine de LLM gibi yeni ve popüler bir teknolojiyi kullanmanın eğlence etkisi, normalde sıkıcı bir iş için gereken başlangıç enerjisini sağlıyor olabilir diye düşünüyorum.
    • Yakın zamanda gelişmiş bir Java class dosyası analizörü yapma projesi yürüttüm.
      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.
    • ADHD’si olan kişiler arasında, LLM’lerin nörotipik insanlara kıyasla hayatlarını çok daha fazla değiştirdiğini söyleyenlerin çok olduğunu duydum.
      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.

    • Buna karşılık junior geliştiriciler için aynı ölçüde, ama tam ters yönde zararlı.
      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.
    • Geçen ay bilmediğim ve kolayca da bulamadığım şeyler için LLM denedim.
      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.
    • Gerçekten sık istediğim şey, GPT benzeri özelleştirilmiş bir LLM; ama belirli bir dil, framework veya konu için eğitilmiş hâli.
      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.
    • Gevşek ölçütlere dayanarak yazdırılan One Pager ve Six Pager ölçütleri rafine etmeye yardımcı oluyor; bazı durumlarda normalde fark edilmeyecek yöntemleri de ortaya çıkarıyor.
  • 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.

    • Daha kötü durumlar da var.
      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.
    • GPT’nin özü dünyanın en iyi Google kullanıcısı olmasıdır.
      Google’da bulunabilecek bir şeyse, LLM’nin onu daha hızlı ve daha iyi bulup düzenleme olasılığı yüksek.
    • Bugün bunu yapamasa bile yarın kesinlikle yapacak; artık başka bir meslek aramanın zamanı.
      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

    • aider’ı seviyorum.
      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.
    • “Orijinal yazının yazarı kesinlikle deneyimli bir mühendis” mi?
      O, Redis’in yaratıcısı.
    • ChatGPT web arayüzü programlama dışında da çok daha fazla şey için kullanışlı.
      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.
    • aider fikrini gerçekten çok seviyorum, ama denediğimde çalışmadı.
      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.
    • Aider’ı yaptığın için teşekkür etmek istiyorum.
      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.

    • Bu, junior ya da kötü bir geliştiricinin kaynak dosya içindeki fonksiyon sırasını değiştirerek hatayı en azından bir süreliğine ortadan kaldırmasına oldukça benziyor.
      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

    • LLM benden daha iyi Torch kodu yazıyorsa, model tanımımı LLM’e yazdırmak iyi bir fikir
      Çü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
    • LLM’in ilginç yanı, benimsemek için acele etmeye gerek olmaması
      Ş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
    • Bence bu yazıyı fazlasıyla aleyhte yorumlamışsınız
      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
    • LLM’e sormak yerine, uzmanlık alanım dışındaki rastgele bir kodlama işini yaptıracak birini Fiverr ya da Upwork’te aramaya zaman harcamam mı gerektiğini söylüyorsunuz?
      Bunu ayda 20 doların altında yapabilir miyim?
    • Hangi kısmın şaşırtıcı olduğunu anlamıyorum
  • 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

    • Eskiden acaba çok mu derine iniyordum?
      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

    • Programlamada doğru cevabı doğrulamak çoğu zaman önemsiz derecede kolay olduğu için LLM’e iyi uyduğunu mu söylüyorsunuz?
      O yüzden yazılımlarda hiç bug yok mu?
    • Evet, tam olarak bu
      Çö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
    • Bir iş uzun zaman alıyor, pek önemli değil ve doğruluğu da umursanmıyorsa doğru cevap onu yapmamak olabilir
      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

    • Copilot otomatik tamamlama konusunda aynı deneyimi yaşadım
      İş 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
    • VS Code veya JetBrains IDE kullanıyorsanız Continue, Ollama ile iyi çalışıyor ve başlaması da gerçekten kolay
      [0] https://continue.dev/
      [1] https://ollama.ai/
    • Bu arada, bugünlerde kod sohbetinde 3.5-turbo'ya denk yerel modeller de var
      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”