Yerel LLM ile Tam Bir Uygulama Geliştirme: İnternetsiz ve Bulut API’siz Kod İncelemesi

Yerel LLM ile Tam Bir Uygulama Geliştirme: İnternetsiz ve Bulut API’siz Kod İncelemesi

Yerel LLM ile Tam Bir Uygulama Geliştirme: İnternetsiz ve Bulut API’siz Kod İncelemesi

Yerel LLM ile Tam Bir Uygulama Geliştirme: İnternetsiz ve Bulut API’siz Kod İncelemesi

Teknoloji dünyasında yapay zeka uygulamaları ve bulut tabanlı servisler artık standart hale gelmiş durumda. Ancak, daha küçük boyutlu ve yerel olarak çalışan büyük dil modellerinin (LLM) potansiyeli genellikle hafife alınıyor. Bu modelleri yetersiz görenler olsa da, bu tür bir teknolojiyle de güçlü ve işlevsel uygulamalar geliştirmek mümkün. Ben de bu düşünceyle, tamamen yerel LLM’ler kullanarak, internet bağlantısı veya harici API’lere ihtiyaç duymayan tam teşekküllü bir uygulama geliştirdim.

Geliştirdiğim bu uygulama, kod parçacıklarını inceleyip hatalar, güvenlik açıkları, performans optimizasyonları ve güvenlik denetimleri gibi konularda profesyonel geri bildirimler sunuyor. Temelinde Python ile yazılmış bir backend, React ile hazırlanan bir frontend bulunuyor. Uygulamanın beyni ise yerel bir LLM ve iletişim ağı da Model Context Protocol (MCP) adını verdiğim bir sistem üzerine kurulu.

Amaç: Kısıtlamalarla Geliştirmek

Yerel LLM’lerle, özellikle 7 milyar parametreli (7B) daha küçük modellerle çalışmak, benim için bir kısıtlama değil, bilinçli bir tercihti. Asıl hedefim, bu sınırlamaların etrafında nasıl bir uygulama tasarlayıp inşa edebileceğimi görmekti. Modern, hızlı bir backend için FastAPI, frontend için ise React ve Vite kullandım. Hedefim sadece temel kodlarla değil, üretim ortamına hazır, modern bir yapı kurmaktı.

Uygulamanın zeka çekirdeği olarak LM Studio’nun OpenAI uyumlu uç noktaları üzerinden erişilebilen Mistral 7B Instruct modelini tercih ettim. Bu yerel model, beklentilerim ve mevcut donanımım göz önüne alındığında en uygun seçimdi. İstatistiksel olarak Mistral 7B Instruct, belirli senaryolarda 13B sınıfı modelleri bile geride bırakabiliyor.

Yerel modelin ham zekasını ve örüntülerini barındırdığı bu yapıda, MCP ise uygulamanın sinir sistemini oluşturarak yerel model ile kod tabanı arasındaki köprüyü kurdu. Bulut modelleri devasa işlem gücü ve bağlam pencerelerine dayanırken, benim uygulamam sınırlı işlem gücüyle daha iyi akıl yürütme elde etmek için MCP’yi kullandı. Tüm bu sistem, kendi yerel bilgisayarımda çalışarak tamamen çevrimdışı bir deneyim sunarken, ciddi kod analizleri yapabilecek kadar güçlüydü.

Bağlam Penceresi Yanıltmasın

Birçok kullanıcı, LLM’lerde daha fazla bağlam penceresi ile daha iyi akıl yürütme elde edileceğini düşünüyor. Bu konuyu kendi uygulamamla test ettiğimde, beklentilerimin tam tersi sonuçlar elde ettim. Daha büyük bir bağlam penceresi, modelin daha fazlasını görmesini sağlasa da, bu durum akıl yürütme yeteneğini otomatik olarak artırmıyor.

Farklı boyutlardaki kod tabanlarını detaylıca inceledim. 500 satırlık bir dosyayı incelediğimde, yaklaşık 1500 token kullanılarak güçlü içgörüler elde edebildim. Ancak, daha büyük bir dosyada (yaklaşık 1200 satır) girdi kodu, yapılandırılmış istem ve çıktı dahil toplam token sayısı 5000’i aştığında, tek seferlik (single-pass) incelemelerde elde edilen geri bildirimler belirgin şekilde daha genel ve sıradan hale geldi.

Yapısal İyileştirme, Ölçeklendirme Değil

Geri bildirimler kalitesini kaybetmeye başladığında ilk aklıma gelen şey modeli yükseltmek oldu. Ancak bu, benim durumumda iki nedenden dolayı mantıklı değildi. Birincisi, mevcut donanımım daha büyük modeller için sınırdaydı. İkincisi ise, uygulama için 13B veya 30B gibi daha büyük bir model seçmek, gereğinden fazla güçlü olacaktı. Bu yüzden modeli ölçeklendirmek yerine, mimariyi basitleştirerek yapısal bir iyileştirme yaptım.

Frontend tarafına bir bölümleme mekanizması ekledim. Uygulama, kod satırlarını sayarak yaklaşık token sayısını hesaplıyor. Eğer token sayısı 1200’ü geçerse, backend’e kodun 1200 token’lık bölümlere ayrılması talimatı veriliyor. Her bölüm ayrı ayrı model tarafından inceleniyor ve sonuçlar daha sonra belirlenmiş bir şekilde tek bir çıktı halinde birleştiriliyor. Bu yaklaşım, ölçülebilir bir iyileşme sağladı. Tek seferlik modda düzleşen geri bildirimler veren 1200 satırlık bir dosya, bu bölümleme yöntemiyle daha odaklanmış ve kararlı içgörüler sunabildi.

Gerçek Performans, Yerel Ölçüm

Kendi bilgisayarımda Ryzen 7 7700X işlemci, 12GB VRAM’e sahip GeForce RTX 4070 Ti ekran kartı ve 32GB DDR5 bellek bulunuyor. Bu donanım, 7B’lik bir yerel model için fazlasıyla yeterli. Model seviyesinde yapılan optimizasyonlarla, uygulamanın kapsamı dahilinde en iyi performansı elde etmek mümkün. Modelin bağlam penceresi 8192 token’a, sıcaklık (temperature) 0.2’ye ayarlı. Çıktı limiti 800 token, top-p sampling 0.9 ve KV cache tamamen GPU belleğine boşaltılmış durumda.

Bu ayarlarla, 500 satırlık bir dosya yaklaşık 6-8 saniyede, bölümleme moduyla 1000 satırdan uzun dosyalar ise yaklaşık 15-20 saniyede incelenebiliyor. En önemli nokta ise, harici API çağrıları, kullanım limitleri veya gizlilik endişeleri olmadan, uygulamayı istediğim kadar çalıştırabiliyor ve herhangi bir kullanıma dayalı faturalandırma derdi yaşamıyorum.

Otomasyon Yerine Analiz

Bir mühendisin doğal eğilimi, “Eğer uygulama kodu inceleyebiliyorsa, neden hataları ve iyileştirmeleri düzeltecek, kullanıcıya daha iyi bir kod sunacak bir özellik eklemeyelim?” sorusunu sormaktır. Bu gösterişli bir özellik olabilirdi, ancak asıl risk burada başlıyor. Bu uygulama, bir kod parçasını veya tek bir dosyayı, bazen 2000-3000 satıra kadar incelemek üzere tasarlandı. Uygulama, verilen dosyayı bağlam olarak alır, başka hiçbir proje bağlamına erişimi yoktur, bağımlılık grafiği veya birden fazla dosyayı anlama yeteneği bulunmaz.

Bağlamı eklesem bile, 7B modeli hayal görme riski taşır. Bu durum, herhangi bir proje için tehlikeli olabilecek, bağlam dışı kod yeniden yazımlarına kapı aralar. Şu anki haliyle uygulama, kesin JSON doğrulaması ile yapılandırılmış analizler sunuyor ve bu da gerçek kod tabanları için daha güvenli bir yaklaşım. Sonuç olarak, bu uygulama otomatik kodlama yerine hassasiyet ve kontrol üzerine kurulu.

Sonuç olarak, gerçek dünya senaryolarında mimarinin ölçekten daha önemli olduğunu öğrendim. Bu deney, 7B modellerin daha büyük modellere göre daha iyi olup olmadığını kanıtlamak için değil, bağlamın, çıktının ve mimarinin doğru yapılandırılıp kısıtlandığında, hatta bir 7B modelin bile tam teşekküllü bir uygulamayı çalıştırabileceğini göstermek içindi.

Siz Ne Düşünüyorsunuz?

Tamamen yerel LLM’ler kullanarak bir uygulama geliştirmek kulağa ilginç geliyor, değil mi? İnternet bağlantısı olmadan, gizlilik endişeleri olmadan kod analizi yapabilmek büyük bir potansiyel taşıyor. Siz bu konuda ne düşünüyorsunuz? Yerel yapay zeka çözümlerinin geleceği hakkında fikirlerinizi duymak isteriz. Teknolojinin sunduğu bu yeni olanakları keşfetmek için siz de teknobirader.com’u ziyaret edebilirsiniz.

BİR YORUM YAZIN

ZİYARETÇİ YORUMLARI - 0 YORUM

Henüz yorum yapılmamış.

©Copyright 2023 teknobirader.com