Gemma ile kişisel bir yapay zeka kodlama asistanı oluşturma

Yapay zeka (AI) modellerinden kod yardımı almak çok faydalı olabilir. Peki ya bağlantı, maliyet veya veri güvenliği kısıtlamaları nedeniyle üçüncü taraf, barındırılan üretken yapay zeka modellerini kullanmanız kısıtlanırsa ne olur? Google'ın Gemma model ailesini kendi donanımınızda indirip çalıştırabilirsiniz. Böylece her şeyi yerel tutabilir ve hatta modeli kod tabanınızla daha iyi çalışacak şekilde ayarlayabilirsiniz.

Kendi Gemma veya CodeGemma örneğinizi çalıştırarak düşük gecikme süresi, yüksek kullanılabilirlik, potansiyel olarak daha düşük maliyet ve tüm kodlama verilerinizi kendi ağınızda tutma olanağıyla yapay zeka kodlama yardımı alabilirsiniz. Bu projede, Gemma'yı barındırmak için kendi web hizmetinizi nasıl oluşturacağınız ve kodlama sırasında modeli daha kullanışlı hale getirmek için bu hizmeti bir Microsoft Visual Studio Code uzantısına nasıl bağlayacağınız gösterilmektedir. Bu proje iki alt proje içerir: Gemma'yı ayarlayıp bir web hizmetine sarmalayan bir proje ve web hizmetine bağlanıp bu hizmeti kullanan bir VS Code uzantısı için ikinci bir proje.

Bu projenin ve geliştiricilerden gelen analizler de dahil olmak üzere nasıl genişletileceğine dair genel bir bakış için Google Yapay Zeka ile Geliştirilen İşletme E-postaları İçin Yapay Zeka Asistanı videosuna göz atın. Bu projenin kodunu Gemma Cookbook kod deposunda da inceleyebilirsiniz. Aksi takdirde, aşağıdaki talimatları uygulayarak projeyi genişletmeye başlayabilirsiniz.

Genel Bakış

Bu eğitimde, Gemma için bir web hizmeti ve bu hizmette kullanılacak bir VS Code uzantısı oluşturma ve genişletme gösterilmektedir. Web hizmeti, Gemma modelini sunmak ve istekleri işlemek için Python, Keras, JAX ve FastAPI kitaplıklarını kullanır. Pipet adlı VS Code uzantısı, Komut Paletine bir kod düzenleme penceresinde kod, metin veya yorum seçerek Gemma web hizmetine istek göndermenize olanak tanıyan komutlar ekler (Şekil 1'de gösterilmiştir).

VS Code uzantısı kullanıcı arayüzünün ekran görüntüsü

Şekil 1. Visual Studio Code'daki Pipet uzantısı için proje komutu kullanıcı arayüzü

Her iki projenin de kaynak kodunun tamamı Gemma Cookbook kod deposunda sağlanmıştır. Her iki projeyi de ihtiyaçlarınıza ve tercih ettiğiniz iş akışına uyacak şekilde genişletebilirsiniz.

Proje ayarlama

Bu talimatlar, projeyi geliştirme ve test için hazırlama konusunda size yol gösterir. Genel kurulum adımları arasında ön koşul yazılımını yükleme, projeyi kod deposundan klonlama, birkaç ortam değişkeni belirleme, Python ve Node.js kitaplıklarını yükleme ve web uygulamasını test etme yer alır.

Gerekli yazılımı yükleyin

Bu projede, paketleri yönetmek ve iki projeyi çalıştırmak için Python 3, Sanal Ortamlar (venv), Node.js ve Düğüm Paketi Yöneticisi (npm) kullanılmaktadır.

Gerekli yazılımı yüklemek için:

  • Python 3'ü, Python için sanal ortam (venv) paketini, Node.js'i ve Node.js paket yöneticisini (npm) yükleyin:

    sudo apt update
    sudo apt install git pip python3-venv nodejs npm
    

Projeyi klonlama

Proje kodunu geliştirme bilgisayarınıza indirin. Proje kaynak kodunu almak için git kaynak denetimi yazılımına ihtiyacınız vardır.

Proje kodunu indirmek için:

  1. Aşağıdaki komutu kullanarak git deposunu klonlayın:

    git clone https://github.com/google-gemini/gemma-cookbook.git
    
  2. İsteğe bağlı: Yerel git deponuzu, yalnızca proje dosyalarını içeren seyrek kontrol kullanacak şekilde yapılandırın:

    cd gemma-cookbook/
    git sparse-checkout set Gemma/personal-code-assistant/
    git sparse-checkout init --cone
    

Gemma web hizmeti projesi

Bu projenin web hizmeti bölümü (gemma-web-service), oluşturma isteklerini ve yanıtlarını işlemek için temel bir web hizmetiyle sarmalanmış bağımsız olarak barındırılan bir Gemma 2 2B örneği oluşturur. Bu eğitimde daha sonra ele alınacak VS Code uzantısı, kod yardım isteklerini işlemek için bu hizmete bağlanır.

Bu talimatlar, projeyi geliştirme ve test için hazırlama konusunda size yol gösterir. Genel kurulum adımları arasında ön koşul yazılımını yükleme, projeyi kod deposundan klonlama, birkaç ortam değişkeni belirleme, Python kitaplıklarını yükleme ve web hizmetini test etme yer alır.

Donanım gereksinimleri

Gemma web hizmeti projesini, grafik işlem birimi (GPU) veya Tensor işleme birimi (TPU) bulunan ve modeli tutmaya yetecek miktarda GPU ya da TPU belleğine sahip bir bilgisayarda çalıştırın. Bu web hizmeti projesinde Gemma 2 2B yapılandırmasını çalıştırmak için yaklaşık 16 GB GPU belleğine, yaklaşık olarak aynı miktarda normal RAM'e ve en az 20 GB disk alanına ihtiyacınız vardır.

Gemma web hizmeti projesini bir Google Cloud sanal makine örneğinde dağıtıyorsanız örneği aşağıdaki gereksinimlere göre yapılandırın:

  • GPU donanımı: Bu projeyi çalıştırmak için NVIDIA T4 gerekir (NVIDIA L4 veya daha yeni sürümler önerilir)
  • İşletim Sistemi: Linux'da Derin Öğrenme seçeneğini, özellikle de önceden yüklenmiş GPU yazılım sürücülerine sahip CUDA 12.3 M124 ile Derin Öğrenme Sanal Makinesi'ni seçin.
  • Önyükleme diski boyutu: Verileriniz, modeliniz ve destek yazılımınız için en az 20 GB disk alanı sağlayın.

Projeyi yapılandırma

Bu projede, paketleri yönetmek ve web hizmetini çalıştırmak için Python 3 ve Sanal Ortamlar (venv) kullanılır. Python paketlerini ve bağımlılıklarını yönetmek için etkinleştirilen venv Python sanal ortamıyla Python kitaplıklarını yükleyin. Python kitaplıklarını setup_python komut dosyasıyla veya pip yükleyicisiyle yüklemeden önce Python sanal ortamını etkinleştirdiğinizden emin olun. Python sanal ortamlarını kullanma hakkında daha fazla bilgi için Python venv dokümanlarına göz atın.

Python kitaplıklarını yüklemek için:

  1. Terminal penceresinde gemma-web-service dizinine gidin:

    cd Gemma/personal-code-assistant/gemma-web-service/
    
  2. Bu proje için bir Python sanal ortamı (venv) yapılandırın ve etkinleştirin:

    python3 -m venv venv
    source venv/bin/activate
    
  3. setup_python komut dosyasını kullanarak bu proje için gerekli Python kitaplıklarını yükleyin:

    ./setup_python.sh
    

Ortam değişkenlerini ayarlama

Bu projenin çalıştırılması için Kaggle kullanıcı adı ve Kaggle API jetonu da dahil olmak üzere birkaç ortam değişkeni gerekir. Gemma modellerini indirebilmek için bir Kaggle hesabınız olmalı ve Gemma modellerine erişim isteğinde bulunmanız gerekir. Bu proje için Kaggle Kullanıcı Adınızı ve Kaggle API jetonunuzu bir .env dosyasına eklemelisiniz. Bu dosya, modeli indirmek için web hizmeti programı tarafından kullanılır.

Ortam değişkenlerini ayarlamak için:

  1. Kaggle belgelerindeki talimatları uygulayarak Kaggle kullanıcı adınızı ve API jetonunuzu edinin.
  2. Gemma Kurulumu sayfasındaki Gemma'ya erişme talimatlarını uygulayarak Gemma modeline erişin.
  3. Projenin kopyasındaki şu konumda bir .env metin dosyası oluşturarak proje için bir ortam değişkeni dosyası oluşturun:

    personal-code-assistant/gemma-web-service/.env
    
  4. .env metin dosyasını oluşturduktan sonra dosyaya aşağıdaki ayarları ekleyin:

    KAGGLE_USERNAME=<YOUR_KAGGLE_USERNAME_HERE>
    KAGGLE_KEY=<YOUR_KAGGLE_KEY_HERE>
    

Web hizmetini çalıştırma ve test etme

Projenin yüklemesini ve yapılandırmasını tamamladıktan sonra web uygulamasını çalıştırarak doğru şekilde yapılandırdığınızı onaylayın. Projeyi kendi kullanımınız için düzenlemeden önce temel kontrol olarak bunu yapmanız gerekir.

Projeyi çalıştırmak ve test etmek için:

  1. Bir terminal penceresinde gemma-web-service dizinine gidin:

    cd personal-code-assistant/gemma-web-service/
    
  2. run_service komut dosyasını kullanarak uygulamayı çalıştırın:

    ./run_service.sh
    
  3. Web hizmetini başlattıktan sonra program kodunda hizmete erişebileceğiniz bir URL listelenir. Bu adres genellikle şu şekildedir:

    http://localhost:8000/
    
  4. test_post komut dosyasını çalıştırarak hizmeti test edin:

    ./test/test_post.sh
    

Hizmeti bu komut dosyasıyla başarıyla çalıştırıp test ettiğinizde, bu eğitimdeki sonraki bölümde VS Code uzantısını kullanarak hizmete bağlanmaya hazır olursunuz.

VS Code uzantı projesi

Bu projenin VS Code uzantısı (pipet-code-agent-2), Microsoft Visual Studio Code uygulamasının yeni yapay zeka kodlama komutları eklemek için tasarlanmış bir yazılım uzantısı oluşturur. Bu uzantı, bu eğitimde daha önce açıklanan Gemma web hizmeti ile iletişim kurar. Uzantı, JSON biçimli mesajlar kullanarak http üzerinden web hizmetleriyle iletişim kurar.

Projeyi yapılandırma

Bu talimatlar, Pipet Code Agent v2 projesinin geliştirme ve test için ayarlanmasında size yol gösterir. Genel adımlar; gerekli yazılımları yükleme, yapılandırma yüklemesini çalıştırma, bir uzantı ayarını yapılandırma ve uzantıyı test etmedir.

Gerekli yazılımı yükleyin

Pipet Code Agent projesi, Microsoft Visual Studio Code'un bir uzantısı olarak çalışır ve paketleri yönetmek ve uygulamayı çalıştırmak için Node.js ile Node Package Manager (npm) aracını kullanır.

Gerekli yazılımı yüklemek için:

  1. Platformunuz için Visual Studio Code'u indirip yükleyin.
  2. Platformunuza yönelik kurulum talimatlarını uygulayarak Node.js'in yüklü olduğundan emin olun.

Proje kitaplıklarını yapılandırma

Gerekli bağımlılıkları indirmek ve projeyi yapılandırmak için npm komut satırı aracını kullanın.

Proje kodunu yapılandırmak için:

  1. Pipet Code Agent proje kök dizinine gidin.

    cd Gemma/personal-code-assistant/pipet-code-agent-2/
    
  2. Bağımlılıkları indirmek ve projeyi yapılandırmak için yükleme komutunu çalıştırın:

    npm install
    

Uzantıyı yapılandırma

Artık cihazınızda Pipet Code Agent'ı VS Code içinde bir geliştirme uzantısı olarak çalıştırarak yüklemenizi test edebilmeniz gerekir. Test, yeni uzantının bulunduğu ayrı bir VS Code Extension Development Host penceresi açar. Bu yeni pencerede, uzantının kişisel Gemma web hizmetinize erişmek için kullandığı ayarları yapılandırırsınız.

Uzantı Geliştirme Ana Makinesi penceresinde çalışan Pipet Code Agent Şekil 2. Pipet uzantısı ayarlarını içeren VS Code uzantı geliştirme ana makine penceresi.

Kurulumunuzu yapılandırmak ve test etmek için:

  1. VS Code uygulamasını başlatın.
  2. VS Code'da, File > New Window'u (Dosya > Yeni Pencere) seçerek yeni bir pencere oluşturun.
  3. Dosya > Klasör Aç'ı ve personal-code-assistant/pipet-code-agent-2/ klasörünü seçerek Pipet Code Agent projesini açın.
  4. pipet-code-agent-2/src/extension.ts dosyasını açın.
  5. Çalıştır > Hata Ayıklamayı Başlat'ı ve gerekirse VS Code Uzantısı Geliştirme Ana Makinesi seçeneğini belirleyerek uzantıyı hata ayıklama modunda çalıştırın. Bu adımda ayrı bir Uzantı Geliştirme Ana Makinesi penceresi açılır.
  6. Yeni VS Code penceresinde Kod > Ayarlar > Ayarlar'ı seçerek VS Code ayarlarını açın.
  7. Gemma web hizmeti sunucunuzun ana makine adresini yapılandırma ayarı olarak ayarlayın. Arama Ayarları alanına Gemma yazın, Kullanıcı sekmesini seçin ve Gemma > Hizmet: Ana Makine ayarındaki settings.json'da düzenle bağlantısını tıklayın. Ardından 127.0.0.1, localhost veya my-server.my-local-domain.com gibi bir ana makine adresi ekleyin:

    "gemma.service.host": "your-host-address-here"
    
  8. Değişiklikleri settings.json dosyasına kaydedin ve ayar sekmelerini kapatın.

Uzantıyı test etme

Artık cihazınızdaki VS Code'ta Pipet Code Agent'ı geliştirme uzantısı olarak çalıştırarak yüklemenizi test edebilirsiniz. Test, yeni uzantının bulunduğu ayrı bir VS Code Extension Development Host penceresi açar.

Uzantı komutlarını test etmek için:

  1. VS Code Extension Development Host (Uzantı Geliştirme Ana Makinesi) penceresinde, düzenleyici penceresindeki herhangi bir kodu seçin.
  2. Görünüm > Komut Paleti'ni seçerek komut paletini açın.
  3. Komut Paleti'nde Pipet yazıp bu ön ekteki komutlardan birini seçin.

Mevcut komutları değiştirme

Pipet Code Agent'ta sağlanan komutları değiştirmek, uzantının davranışını ve özelliklerini değiştirmenin en basit yoludur. Bu istem bağlam bilgisi, Gemma'nın üretken modeli, yanıt oluşturma konusunda yol gösterir. Mevcut Pipet komutlarındaki istem talimatlarını değiştirerek komutların her birinin davranışını değiştirebilirsiniz.

Bu talimat grubunda, komutun istem metnini değiştirerek review.ts komutunun nasıl değiştirileceği açıklanmaktadır.

review.ts komutunu düzenlemeye hazırlanmak için:

  1. VS Code uygulamasını başlatın.
  2. VS Code'da Dosya > Yeni Pencere'yi seçerek yeni bir pencere oluşturun.
  3. Dosya > Klasörü Aç'ı ve pipet-code-agent/ klasörünü seçerek Pipet Code Agent projesini açın.
  4. pipet-code-agent/src/review.ts dosyasını açın.

review.ts komutunun davranışını değiştirmek için:

  1. review.ts dosyasında, PROMPT_INSTRUCTIONS sabitinin sondan ikinci satırını Also note potential performance improvements eklemek için değiştirin.

    const PROMPT_INSTRUCTIONS = `
    Reviewing code involves finding bugs and increasing code quality. Examples of
    bugs are syntax errors or typos, out of memory errors, and boundary value
    errors. Increasing code quality entails reducing complexity of code, eliminating
    duplicate code, and ensuring other developers are able to understand the code.
    Also note potential performance improvements.
    
    Write a review of the following code:
    `;
    
  2. Değişiklikleri review.ts dosyasına kaydedin.

Değiştirilen komutu test etmek için:

  1. VS Code Pipet uzantı proje pencerenizde, src/extension.ts dosyasını açın.
  2. Terminal > Derleme Görevini Çalıştır...'ı ve ardından npm: compile seçeneğini belirleyerek güncellenmiş kodu derleyin.
  3. Çalıştır > Hata Ayıklamayı Yeniden Başlat'ı seçerek hata ayıklayıcıyı yeniden başlatın.
  4. VS Code Extension Development Host (Uzantı Geliştirme Ana Makinesi) penceresinde, düzenleyici penceresindeki herhangi bir kodu seçin.
  5. Görünüm > Komut Paleti'ni seçerek komut paletini açın.
  6. Komut Paleti'ne Pipet yazın ve Pipet: Review the selected code (Pipet: Seçili kodu gözden geçirin) komutunu seçin.

Yeni komutlar oluşturma

Gemma modeliyle tamamen yeni görevler gerçekleştiren yeni komutlar oluşturarak Pipet'i genişletebilirsiniz. comment.ts veya review.ts gibi her komut dosyası çoğunlukla kendi kendine yeten bir yapıya sahiptir ve etkin düzenleyiciden metin toplama, istem oluşturma, Gemma web hizmetine bağlanma, istem gönderme ve yanıtı işleme kodları içerir.

Bu talimatlar grubunda, mevcut bir komutun (question.ts) kodunu şablon olarak kullanarak yeni bir komutun nasıl oluşturulacağı açıklanmaktadır.

İşlevler için ad önerisinde bulunan bir komut oluşturmak üzere:

  1. src/ dizininde new-service.ts adlı pipet-code-agent-2/src/question.ts dosyasının bir kopyasını oluşturun.
  2. VS Code'da src/new-service.ts dosyasını açın.
  3. PROMPT_INSTRUCTIONS değerini düzenleyerek yeni dosyadaki istem talimatlarını değiştirin.

    // Provide instructions for the AI model
    const PROMPT_INSTRUCTIONS = `
    Build a Python web API service using FastAPI and uvicorn.
    - Just output the code, DO NOT include any explanations.
    - Do not include an 'if __name__ == "__main__":' statement.
    - Do not include a '@app.get("/")' statement
    - Do not include a '@app.get("/info")' statement
    `;
    
  4. Yeni bir BOILERPLATE_CODE sabit değeri oluşturarak hizmet şablonunu ekleyin.

    const BOILERPLATE_CODE = `
    # the following code for testing and diagnosis:
    @app.get("/")
    async def root():
        return "Server: OK"
    
    @app.get("/info")
    async def info():
        return "Service using FastAPI version: " + fastapi.__version__
    
    # Run the service
    if __name__ == "__main__":
        # host setting makes service available to other devices
        uvicorn.run(app, host="0.0.0.0", port=8000)
    `;
    
  5. Komut işlevinin adını newService() olarak değiştirin ve bilgi mesajını güncelleyin.

    export async function newService() {
      vscode.window.showInformationMessage('Building new service from template...');
    ...
    
  6. İstem derleme kodunu, düzenleyicide seçilen metni ve PROMPT_INSTRUCTIONS değerini içerecek şekilde güncelleyin.

    // Build the full prompt using the template.
      const promptText = `${selectedCode}${PROMPT_INSTRUCTIONS}`;
    
  7. Yanıt ekleme kodunu, yanıtı ve şablon kodunu içerecek şekilde değiştirin.

    // Insert answer after selection.
    editor.edit((editBuilder) => {
        editBuilder.insert(selection.end, "\n\n" + responseText);
        editBuilder.insert(selection.end, "\n" + BOILERPLATE_CODE);
    });
    
  8. new-service.ts dosyasındaki değişiklikleri kaydedin.

Yeni komutu entegre edin

Yeni komutun kodunu tamamladıktan sonra, komutu uzantının geri kalanıyla entegre etmeniz gerekir. extension.ts ve package.json dosyalarını uzantının yeni komut parçası haline getirmek için güncelleyin ve VS Code'un yeni komutu çağırmasını etkinleştirin.

new-service komutunu uzantı koduyla entegre etmek için:

  1. VS Code'da pipet-code-agent-2/src/extension.ts dosyasını açın.
  2. Yeni bir içe aktarma ifadesi ekleyerek yeni kod dosyasını uzantıya ekleyin.

    import { newService } from './new-service';
    
  3. activate() işlevine aşağıdaki kodu ekleyerek yeni komutu kaydedin.

    export function activate(context: vscode.ExtensionContext) {
        ...
        vscode.commands.registerCommand('pipet-code-agent.newService', newService);
    }
    
  4. Değişiklikleri extension.ts dosyasına kaydedin.

name komutunu uzantı paketiyle entegre etmek için:

  1. VS Code'da pipet-code-agent/package.json dosyasını açın.
  2. Yeni komutu paket dosyasının commands bölümüne ekleyin.

    "contributes": {
      "commands": [
        ...
        {
          "command": "pipet-code-agent.newService",
          "title": "Pipet: Generate a FastAPI service."
        }
      ],
    
  3. package.json dosyasındaki değişiklikleri kaydedin.

Yeni komutu test etme

Komutu kodlayıp uzantı ile entegre ettikten sonra test edebilirsiniz. Yeni komutunuz yalnızca VS Code Extension Development Host (Uzatma Geliştirme Ana Makinesi) penceresinde kullanılabilir. Uzantının kodunu düzenlediğiniz VS Code penceresinde kullanılamaz.

Değiştirilen komutu test etmek için:

  1. VS Code Pipet uzantı proje pencerenizde, src/extension.ts dosyasını açın.
  2. Terminal > Derleme Görevini Çalıştır... öğesini ve ardından npm: Derleme seçeneğini belirleyerek güncellenmiş kodu derleyin.
  3. VS Code Pipet uzantısı proje pencerenizde Çalıştır > Hata Ayıklamayı Yeniden Başlat'ı seçerek hata ayıklayıcıyı yeniden başlatın. Bu işlem, ayrı bir Uzantı Geliştirme Ana Makinesi penceresini yeniden başlatır.
  4. VS Code Uzantı Geliştirme Ana Makinesi penceresinde, düzenleyici penceresinden bazı kodları seçin.
  5. Görünüm > Komut Paleti'ni seçerek komut paletini açın.
  6. Komut Paleti'nde Pipet yazın ve Pipet: FastAPI hizmeti oluştur komutunu seçin.

Artık Gemma yapay zeka modeliyle çalışan bir VS Code uzantısı komutu oluşturdunuz. Size en uygun yapay zeka destekli kod geliştirme iş akışını oluşturmak için farklı komut ve talimatlarla denemeler yapmayı deneyin.

Uzantıyı paketleme ve yükleme

VS Code örneğinizde yerel olarak yüklemek için uzantınızı .vsix dosyası olarak paketleyebilirsiniz. Uzantısı projenizden .vsix paket dosyası oluşturmak için vsce komut satırı aracını kullanın. Bu dosyayı daha sonra VS Code örneğinize yükleyebilirsiniz. Uzantınızı paketlemeyle ilgili ayrıntılar için VS Code Uzantıları Yayınlama dokümanlarına bakın. Uzantı paketleme işlemini VSIX dosyası olarak tamamladığınızda VS Code'a manuel olarak yükleyebilirsiniz.

VSIX paket uzantısını yüklemek için:

  1. VS Code örneğinizde Dosya > Uzantıları'nı seçerek Uzantılar panelini açın.
  2. Uzantılar panelinde, sağ üstteki üç nokta menüsünü ve ardından VSIX'ten yükle'yi seçin.
  3. Uzantıyı yüklemek için uzantı projenizden oluşturduğunuz .vsix paket dosyasını açın.

Ek kaynaklar

Bu projenin kodu hakkında daha fazla bilgi için Gemma Cookbook kod deposunu inceleyin. Uygulamayı geliştirme konusunda yardıma ihtiyacınız varsa veya diğer geliştiricilerle ortak çalışmak istiyorsanız Google Developers Community Discord sunucusuna göz atın. Build with Google AI ile oluşturulan daha fazla proje için video oynatma listesine göz atın.