Üretken Yapay Zeka Araçları Kullanarak Uygulama Geliştiriyorum 2- İş Mantığının Yönetilmesi/GitHub Copilot, ChatGPT, FumeAI

Eyüp Özmen
7 min readMay 29, 2024

--

İlk yazımızda Vercel tarafından geliştirilen yapay zeka kullanarak UI oluşturmamıza yardımcı olan v0.dev’i nasıl çalıştığına, kullanımına ve örneklenmesine değinmiştik.

Bu yazımızda üretken yapay zeka araçlarının iş mantıklarının(business logic) yönetilmesinde nasıl etkili kullanılabileceğini inceleyeceğiz.

Öncelikle araçları tanımayı, etkili kullanma yöntemlerini irdelemeyi, çeşitli kıyaslamalar ile avantaj ve dezavantajlarını öne sürmeyi hedeflemekteyim. Sonrasında uygulama geliştirmede nasıl kullandığımı örnekler ile açıklayacağım. Hazırsanız başlayalım.

GitHub Copilot Nedir?

Artık yalnız uçmanıza gerek kalmadı, şimdi yanınızda GitHub Copilot var!

Yazılımcılar için AI yardımcı programcı olarak tasarlanan bu araç, Microsoft tarafından desteklenerek OpenAI ve GitHub tarafından ortaklaşa hazırlanmıştır.

Bireysel, İş ve Kurumsal olmak üzere üç farklı kategoride özellik ve fiyatlama sunmaktadır.

Arka planda nasıl çalışır?

OpenAI tarafından geliştirilen Codex isimli AI sistemi ana omurgasını oluşturmaktadır. GPT tabanlı bir modelden türetilmiş bu yapı yalnızca metinsel çıktılar üretmekle kalmıyor kod üretimi de sağlıyor.

OpenAI Codex Model’i milyarca satır herkese açık GitHub reposundan, Stackoverflow’dan ve muhtelif kod barındıran kaynaklardan yardım alınılarak eğitilmiştir.

Doğal Dil İşleme(NLP) ve Makine Öğrenmesi(ML) modellerinin kombinasyonunu kullanarak çıktı üretmeye çalışır. Bu işlemi yaparken 4 aşamalı bir yöntem izler.

Çalışma Mekanizması
  1. Girdilerin İncelenmesi — Sağlanan kod parçası, hata mesajı, metinsel bir girdi vb. öncelikle bir incelemeden geçirilir, dil modeli analizi için hazırlanır.
  2. Dil Modeli Analizi — İncelenen girdiler dil modeli tarafından analiz edilir.
  3. Cevap Üretimi — Analiz sonucu oluşturulabilecek en optimum sonuç ortaya koyulur.
  4. Çıktının Formatlanması — Sağlanan çıktı, kullanıcının anlayabileceği en doğru formatta aktarılmaya çalışırılır.

Ayrıca girdiler ve çıktılar içerik filtrelerinden geçirilerek zararlı, ofansif ve konu dışı çıktıların ortaya çıkması engellenmeye çalışırılır.

Kullanım yeri ve biçimleri nedir?

Visual Studio, Visual Studio Code, Vim/Neovim, Azure ve JetBrains grubundaki birçok destekli entegre geliştirme ortamına resmi desteği vardır.

Ayrıca GitHub mobil’de chat arayüzü olarak, GitHub CLI ve kurumsal paket için GitHub.com üzerinden erişim sağlanabilmektedir.

Desteklenen IDE’ler

Birçok dil ve framework desteği sağlamakla birlikte özellikle Python, JavaScript, TypeScript, Ruby, Go, C# ve C++ dillerinde daha iyi sonuçlar üretebilmektedir.

Desteklenen bir IDE üzerinde yalnızca yazılım geliştirme sürecine odaklanan bir AI yardımcı programcınızın olması oldukça güçlü bir silah bunu kabul etmek gerekir. Ancak bir silah ne kadar güçlü olursa olsun doğru kullanılabildiğinde fayda elde edilebilir, aksi durumda zararlı durumlarla karşılaşmakta olasıdır. Genel tanıtıma ve arka plandaki yapıya değindiğimize göre şimdi ne için ve nasıl kullanabilirizin yanıtını aramaya çalışalım.

Dil modeli, kodlamaya dayalı çıktılar üretmeye yönelik olduğu için bu aracı bu amaçla kullanmalıyız, kodlamaya yönelik olmayan sorular için başka araçlar daha faydalı olacaktır. Model için temel desteklenen dil İngilizce’dir. Girdiler bu dil ile yapıldığında daha iyi sonuçlar bekleyebiliriz.

IDE üzerinden satıriçinde kod tamamlama ve kod tavsiye etme özelliği sayesinde kod yazma sürecini hızlandırabilir ve kod kalitesini artırabilirsiniz.

GitHub Copilot Chat kullanarak syntaks, programlama konseptleri, test durumları, debug süreçleri gibi oldukça geniş bir aralıkta kodlamaya yönelik soru sorulabilir.

GitHub Copilot CLI komut satırında öneri alabilir, açıklama talep edebilir, yardım isteyebiliriz.

Yazılımcının kod ürettiği herhangi bir ortamda, sağlanan kontekse uygun tavsiyeler üretmesi, farklı dil ve frameworklere desteği, kodlama stilimize uyum sağlaması, geri bildirimlerimizden beslenebilmesi en öne çıkan özellikleri olarak sıralanabilir.

GitHub Copilot’un performansını artırmak için ne yapaliriz ?

  • Promptlar konu üzerinde odaklanmalı, geniş bir alan bırakmak yerine ısrarla konu üzerinde daraltılmalıdır.
  • Bir yardımcı araç olarak ele alınmalı, işimizin tümünü yapacak bir yazılımcı gibi değerlendirilmemelidir.
  • Kodun ne iş yaptığı ve güvenilirliği her zaman gözden geçirme(review) işlemine tabi tutulmalıdır.
  • Bu araçlar için geri bildirimde bulunmalı ve gelişmelere dair güncel kalınmalıdır.

GitHub Copilot kullanımında kullanılabilecek 3 en iyi pratik

  • Özellikle yeni başlanacak bir iş için en nihai hedefin belirtilmesi.
  • Kısa ve net istekler daha iyi sonuçların ortaya çıkmasını sağlar. Özellikle kompleks bir işin tümden geliştirilmesini talep etmek yerine küçük parçalar oluştururarak bu amaçla ilerlenmelidir.
  • Data manipülasyonu ya da bir metodun yazılması gibi durumlarda girdilerin nasıl çıktılara dönüştürülmesi isteniyorsa buna uygun küçük veri yapıları oluşturulup prompta dahil edilebilir.

GitHub Copilot; limitli kapsama sahip olması, potansiyel sapmalar yaratması, güvenlik riskleri barındırması, herkese açık kodlarla eşleşme durumları, hatalı kod oluşturması ya da kodsal olmayan konularda hatalı cevap üretmesi yönüyle hali hazırda kısıtlı bir kullanım yaratmaktadır.

Copilot Konfigürasyonu

Herkese açık kodlarla eşleşme(matching public code) durumu Copilot ayarlarından izin alınarak açılıp kapatılabilmektedir. Bunun amacı satıriçi kod tamamlama ve tavsiye özelliğinde kodun hangi repodan geldiğini görerek lisans için uygunluğunun kontrolü gibi bilgilere erişim imkanı tanımasıdır.

Ayrıca kodlarınızın GitHub Copilot tarafından kendini geliştirmesi için kullanımına izin verme yetkiside tanımlanmıştır.

ChatGPT vs Copilot

GitHub Copilot’ın kodlama için özelleştirilmiş bir dil modeli olması ve genellikle kodlama görevlerini hızlandırmak için kullanılmasıdır, oysa ChatGPT daha genel amaçlı bir doğal dil modelidir ve metin tabanlı birçok görevde kullanılabilir.

FumeAI vs Copilot

FumeAI için bkz. https://www.fumedev.com/

FumeAI’ın Copilot’tan temel olarak ayrıştığı nokta, tüm codebase’inize erişim sağlayarak şimdilik Jira entegrasyonu bulunmasına rağmen ilerleyen süreçte Gitlab vb. gibi proje yönetim panellerinden task ya da issue bazlı bir AI yardımcı yazılımcı gibi çalışıyor olması.Ürettiğiniz çözümler için PR yapma imkanı da tanıyor.

Tüm projeye hakim olması nedeniyle daha kişiselleştirilmiş ve kod yapınıza uygun çözümler üretebiliyor.

Ayrıca en çok sevdiğim özelliklerinden biri de; Slack entegrasyonu ile birlikte grup halinde ortak bir task üzerinde çalışma yapmanızı mümkün kılması, tabi ki bireysel olarak da kullanabilirsiniz.

FumeAI Slack Entegrasyonu

Yukarıdaki bağlantıdan hesap açarak uygulama üzerinde de kullanım sağlayabilirsiniz.

GitHub Copilot Kullanım İpuçları

Kullanımlarım VSCode IDE’inde ve Windows işletim sisteminde yapılmıştır.

Ayarlar ve Eklenti

Aşağıda görüleceği gibi ayarlamalar için sağ alttaki seçeneği kullanabilirsiniz. Buradan klavye kısayollarınız için kişiselleştirme yapabilirsiniz.

Satır İçi Kullanım

1- Kod tamamlama ve öneri: Copilot eklentisi kurulu ve üyeliğiniz aktifken doğrudan bu yapı çalışmaya başlar. Burada eş zamanlı olarak öneriyi kabul ya da red edebilirsiniz. Ya da öneriler arasında geçiş yapabilir, kelime kelime kod kabulü de yapabilirsiniz.

2- Yorum Satırı Kullanma: Yorum satırı şeklinde yapmak istediğiniz işlemi belirtebilirsiniz.

3- Öneri Paneli Kullanımı: ‘Ctrl + Enter’ ile sağ panelde öneri ekranında da işlemler yapabilirsiniz.

Chat Alanı Kullanımı

1- Eklenti Penceresinde Kullanım: Eklenti alanından erişimle sağ panelde chat alanının kullanımı mümkündür.

Visual Studio Code’da farklı görevleri gerçekleştirmek için chat katılımcılarını ve komutları kullanabilirsiniz.

Chat Alanı Kullanımı

Chat Katılımcılarını Kullanma

Sohbet katılımcıları belirli konularda uzmanlaşmış yardımlar sağlar:

  1. @workspace: Proje yapısı veya tasarım desenleri hakkında yardım almak için kullanılabilir.
  • Örnek: @workspace Mevcut proje yapısı için bir tasarım deseni önerebilir misin?

2. @vscode: Visual Studio Code komutları ve özellikleri hakkında yardım almak için kullanılabilir.

  • Örnek: @vscode VS Code'da otomatik kaydetme özelliğini nasıl etkinleştirebilirim?

3. @terminal: Terminal komutları hakkında yardım almak için kullanılabilir.

  • Örnek: @terminal Geçerli dizindeki tüm dosyaları listelemek için hangi komutu kullanabilirim?

Komutları Kullanma

Komutlar, yaygın görevleri kolayca gerçekleştirmenizi sağlar:

  1. /tests: Seçilen kod için birim testleri oluşturur.
  • Örnek: /*kod bloğunu seçin*/ /tests

2. /fix: Seçilen koddaki sorunlar için bir düzeltme önerir.

  • Örnek: /*sorunlu kodu seçin*/ /fix

3. /explain: Seçilen kodu açıklar.

  • Örnek: /*kodu seçin*/ /explain

4. /clear: Mevcut bağlamı temizleyerek yeni bir sohbet oturumu başlatır.

  • Örnek: /clear

Sohbet Değişkenlerini Kullanma

Sohbet değişkenleri, belirli bağlamı istemlerinize dahil etmenize yardımcı olur:

  1. #file: Belirli bir dosyayı bağlam olarak ekler. Çoklu dosya seçimine imkan tanır.
  • Örnek: #file Bu dosyanın performansını optimize etmeme yardım edebilir misin?

2. #git: Mevcut Git deposu hakkında bilgi ekler.

  • Örnek: #git Bu projenin commit geçmişini göster.

3. #terminalLastCommand: Terminalde en son çalıştırılan komutu ekler.

  • Örnek: #terminalLastCommand En son çalıştırdığım komut bir hataya neden oldu, yardımcı olabilir misin?

4. #selection: Copilot’un cevap oluştururken seçili alandaki koda odaklanması için kullanılır.

  • Örnek: #selection kodda bir hata var, yardımcı olabilir misin?

5. #editor: editör’de görünür olan bütün kodlara odaklanılması için kullanılır.

  • Örnek: #editör koddaki syntaks hatasını çözebilir misin?

2- Editör İçerisinde Kullanım: ‘CTRL + I’ komutu kullanılarak editör içerisinde chat pencerisi açılarak da kullanım mümkündür.

3- Commit Mesajları İçin Kullanım: Yapılan değişiklikleri göz önüne alarak anlamlı commit mesajları üretmenize yardımcı olur.

Commit mesajı oluşturma

Komut Satırı Kullanımı

  • gh copilot suggest: Öneri almak için kullanılır.
  • gh copilot explain: Açıklama talebi yapılabilir.
  • gh copilot — help gh copilot SUBCOMMAND — help: Bir komut hakkında yardım istenebilir.

Son Düşünceler

GitHub Copilot Workspace Çalışma Akışı
  • Yukarıdaki taslak iş akış diyagramı, yazılım geliştirme ortamında Ürün Yöneticisi — Yazılımcı — Tester üçlüsüne AI yardımcı yazılımcıların nasıl dahil edildiğini ya da edileceğini gözler önüne seriyor.
  • Yakın gelecekte iş yapış biçimlerimizde ve bireysel olarak da geliştirme yöntemlerimizde AI destekli bir değişim yaşayacağımız kaçınılmaz olacak.
  • Şirketler ya da ürün ekipleri, AI yardımcı yazılımcıları, güçlü bir araç olarak olarak görmeli, zaman kazanmak ve kod kalitesini artırmak için kullanmayı teşvik etmelidir.
  • Mükemmelliyetten daha çok gelişim önceliklendirilmelidir(progress over perfection). Doğrudan çok iyi çalışan bir sonuç aramak yerine aşamalı(iterative) olarak ilerleme zihin yapısı ile hareket edilmelidir.

Kaynakça:

--

--