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

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

Gemma veya CodeGemma'nın kendi örneğini çalıştırmak; düşük gecikme, yüksek kullanılabilirlik, muhtemelen daha düşük maliyet ve tüm kodlama verilerinizi kendi ağınızda tutma olanağıyla yapay zeka kodlama yardımı almanızı sağlayabilir. Bu proje, Gemma'yı barındırmak için kendi web hizmetinizi nasıl ayarlayacağınızı ve kod yazarken modeli daha rahat kullanmak için bu hizmeti Microsoft Visual Studio Code uzantısına nasıl bağlayacağınızı gösterir. Bu proje iki alt proje içerir: Gemma'yı bir web hizmetine ayarlayıp sarmalamak için bir proje ve web hizmetine bağlanıp onu kullanan bir VS Code uzantısı için ikinci bir proje.

Bu proje ve geliştiricilerin görüşleri de dahil olmak üzere nasıl genişletileceği hakkında video özeti için Personal AI Code Assistant Build with Google AI videosunu izleyin. 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, iki projeyi nasıl ayarlayacağınız ve genişleteceğiniz gösterilmektedir: Gemma için bir web hizmeti ve bu hizmeti kullanmak üzere bir VS Code uzantısı. 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ı, Şekil 1'de gösterildiği gibi bir kod düzenleme penceresinde kodu, metni veya yorumları seçerek Gemma web hizmetine istekte bulunmanıza olanak tanıyan komutları Komut Paleti'ne ekler.

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ğlanı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 sürecinde size yol gösterir. Genel kurulum adımları arasında ön koşul yazılımlarının yüklenmesi, projenin kod deposundan klonlanması, birkaç ortam değişkeninin ayarlanması, Python ve Node.js kitaplıklarının yüklenmesi ve web uygulamasının test edilmesi yer alır.

Gerekli yazılımı yükleme

Bu proje, paketleri yönetmek ve iki projeyi çalıştırmak için Python 3, sanal ortamlar (venv), Node.js ve Node Paket Yöneticisi (npm) kullanır.

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

  • Python 3'ü, Python için sanal ortam (venv) paketini, Node.js'yi 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 kontrol 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 kod deponuzu, yalnızca projeye ait dosyaları içerecek şekilde seyrek ödeme kullanacak şekilde yapılandırın:

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

Gemma web hizmeti projesi

Bu projenin web hizmeti kısmı (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ğitimin ilerleyen bölümlerinde ele alınacak olan 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 sürecinde size yol gösterir. Genel kurulum adımları arasında ön koşul yazılımlarının yüklenmesi, projenin kod deposundan klonlanması, birkaç ortam değişkeninin ayarlanması, Python kitaplıklarının yüklenmesi ve web hizmetinin test edilmesi yer alır.

Donanım gereksinimleri

Gemma web hizmeti projesini, grafik işleme birimi (GPU) veya Tensor işleme birimi (TPU) olan ve modeli tutmak için yeterli GPU veya 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ği, yaklaşık aynı miktarda normal RAM ve en az 20 GB disk alanı gerekir.

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

  • GPU donanımı: Bu projenin çalıştırılması için NVIDIA T4 gereklidir (NVIDIA L4 veya daha yüksek bir sürüm önerilir).
  • İşletim Sistemi: Linux'ta Derin Öğrenme seçeneğini belirleyin. Özellikle önceden yüklenmiş GPU yazılım sürücülerine sahip CUDA 12.3 M124 ile Derin Öğrenme VM'si'ni seçin.
  • Önyükleme diski boyutu: Verileriniz, modeliniz ve destekleyici yazılımlarınız için en az 20 GB disk alanı sağlayın.

Projeyi yapılandırma

Bu proje, paketleri yönetmek ve web hizmetini çalıştırmak için Python 3 ve sanal ortamları (venv) kullanır. Python paketlerini ve bağımlılıklarını yönetmek için venv Python sanal ortamı etkinleştirilmişken Python kitaplıklarını yükleyin. Python kitaplıklarını setup_python komut dosyası veya pip yükleyici ile 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 bakın.

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

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

    cd Demos/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ışması 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 Kaggle hesabınızın olması ve bu modellere erişim isteğinde bulunmanız gerekir. Bu proje için, Kaggle kullanıcı adınızı ve Kaggle API jetonunuzu .env dosyasına eklersiniz. 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 alın.
  2. Gemma Kurulumu sayfasındaki Gemma'ya erişme talimatlarını uygulayarak Gemma modeline erişin.
  3. Projenin klonunda ş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 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 kurulumunu ve yapılandırmasını tamamladıktan sonra, doğru yapılandırdığınızı onaylamak için web uygulamasını çalıştırın. Bu işlemi, projeyi kendi kullanımınız için düzenlemeden önce temel bir kontrol olarak 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 hizmeti başlatıldıktan sonra program kodu, hizmete erişebileceğiniz bir URL'yi listeler. Bu adres genellikle şöyledir:

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

    ./test/test_post.sh
    

Bu komut dosyasıyla hizmeti başarıyla çalıştırıp test ettiğinizde, bu eğitimin sonraki bölümünde VS Code uzantısıyla hizmete bağlanmaya hazır olursunuz.

VS Code uzantısı projesi

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

Projeyi yapılandırma

Bu talimatlar, Pipet Code Agent v2 projesini geliştirme ve test için ayarlama konusunda size yol gösterir. Genel adımlar arasında gerekli yazılımı yükleme, yapılandırma yüklemesini çalıştırma, uzantı ayarını yapılandırma ve uzantıyı test etme yer alır.

Gerekli yazılımı yükleme

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. Platformunuz için kurulum talimatlarını uygulayarak Node.js'nin yüklendiğinden 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 projesinin kök dizinine gidin.

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

    npm install
    

Uzantıyı yapılandırma

Artık Pipet Code Agent'ı cihazınızdaki VS Code'da geliştirme uzantısı olarak çalıştırarak yüklemenizi test edebilirsiniz. Test, yeni uzantının kullanılabildiği 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ırabilirsiniz.

Uzantı geliştirme ana makinesi penceresinde çalışan Pipet Code Agent Şekil 2. VS Code uzantı geliştirme ana makinesi penceresi ve Pipet uzantısı ayarları.

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. File > Open Folder'ı (Dosya > Klasör Aç) seçip personal-code-assistant/pipet-code-agent-2/ klasörünü belirleyerek Pipet Code Agent projesini açın.
  4. pipet-code-agent-2/src/extension.ts dosyasını açın.
  5. Run > Start Debugging (Çalıştır > Hata Ayıklamayı Başlat) seçeneğini belirleyerek uzantıyı hata ayıklama modunda çalıştırın ve gerekirse VS Code Extension Development Host (VS Code Uzantı Geliştirme Ana Makinesi) seçeneğini belirleyin. Bu adımda ayrı bir Extension Development Host penceresi açılır.
  6. Yeni VS Code penceresinde Code > Settings > Settings'i (Kod > Ayarlar > Ayarlar) seçerek VS Code ayarlarını açın.
  7. Gemma web hizmeti sunucunuzun ana makine adresini yapılandırma ayarı olarak belirleyin. Search Settings (Arama Ayarları) alanına Gemma yazın, User (Kullanıcı) sekmesini seçin ve Gemma > Service: Host (Gemma > Hizmet: Ana Makine) ayarında Edit in settings.json (settings.json dosyasında düzenle) bağlantısını tıklayın ve ana makine adresini (ör. 127.0.0.1, localhost veya my-server.my-local-domain.com) ekleyin:

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

Uzantıyı test etme

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

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

  1. VS Code Extension Development Host (Eklenti 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 paletinde Pipet yazıp bu öneke sahip 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ı bilgileri, Gemma üretken modeline yanıt oluşturma konusunda yol gösterir. Mevcut Pipet komutlarındaki istem talimatlarını değiştirerek komutların davranışını değiştirebilirsiniz.

Bu talimatlar, komutun istem metnini değiştirerek review.ts komutunun nasıl değiştirileceğini açıklar.

review.ts komutunu düzenlemeye hazırlanmak 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. File > Open Folder'ı (Dosya > Klasör Aç) seçip pipet-code-agent/ klasörünü belirleyerek 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ı değiştirerek Also note potential performance improvements ekleyin.

    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. review.ts dosyasındaki değişiklikleri kaydedin.

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

  1. VS Code Pipet uzantısı proje pencerenizde src/extension.ts dosyasını açın.
  2. Terminal > Run Build Task... (Terminal > Derleme Görevini Çalıştır...) ve ardından npm: compile (npm: derle) seçeneğini belirleyerek güncellenmiş kodu oluşturun.
  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 (Eklenti 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 paletine Pipet yazıp Pipet: Review the selected code 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ı, büyük ölçüde bağımsızdır ve etkin düzenleyiciden metin toplama, istem oluşturma, Gemma web hizmetine bağlanma, istem gönderme ve yanıtı işleme için kod içerir.

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

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

  1. src/ dizininde pipet-code-agent-2/src/question.ts dosyasının new-service.ts adlı 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 sabiti oluşturarak hizmet standart metnini 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 oluşturma kodunu, düzenleyicide seçilen metni ve PROMPT_INSTRUCTIONS karakterini 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 standart metin 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, bu kodu uzantının geri kalanıyla entegre etmeniz gerekir. Yeni komutu uzantının bir parçası haline getirmek ve VS Code'un yeni komutu çağırmasını sağlamak için extension.ts ve package.json dosyalarını güncelleyin.

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. Aşağıdaki kodu activate() işlevine ekleyerek yeni komutu kaydedin.

    export function activate(context: vscode.ExtensionContext) {
        ...
        vscode.commands.registerCommand('pipet-code-agent.newService', newService);
    }
    
  4. extension.ts dosyasındaki değişiklikleri 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

Komutun kodlamasını ve uzantıyla entegrasyonunu tamamladıktan sonra komutu test edebilirsiniz. Yeni komutunuz yalnızca VS Code Extension Development Host (Uzantı 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ısı proje pencerenizde src/extension.ts dosyasını açın.
  2. Terminal > Run Build Task... (Terminal > Derleme Görevini Çalıştır...) ve ardından npm: compile (npm: derle) seçeneğini belirleyerek güncellenmiş kodu oluşturun.
  3. VS Code Pipet uzantısı proje pencerenizde Run > Restart Debugging'i (Ç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 Extension Development Host (Uzantı Geliştirme Ana Makinesi) penceresini yeniden başlatır.
  4. VS Code Extension Development Host (Eklenti Geliştirme Ana Makinesi) penceresinde, düzenleyici penceresinde bir kod seçin.
  5. Görünüm > Komut Paleti'ni seçerek komut paletini açın.
  6. Komut paletinde Pipet yazıp Pipet: Generate a FastAPI service komutunu seçin.

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

Uzantıyı paketleme ve yükleme

Uzantınızı, VS Code örneğinize yerel olarak yüklemek için .vsix dosyası olarak paketleyebilirsiniz. Uzantı 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ı paketleme hakkında ayrıntılı bilgi için VS Code Publishing Extensions (Uzantıları Yayınlama) dokümanlarına bakın. Uzantınızı VSIX dosyası olarak paketleme işlemini tamamladığınızda, VS Code'a manuel olarak yükleyebilirsiniz.

VSIX paketli uzantıyı yüklemek için:

  1. VS Code örneğinizde File > Extensions'ı (Dosya > Uzantılar) seçerek Extensions (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ı projenizden oluşturduğunuz .vsix paket dosyasını açarak yükleyin.

Ek kaynaklar

Bu projenin kodu hakkında daha fazla bilgi için Gemma Cookbook kod deposunu inceleyin. Uygulama oluşturma konusunda yardıma ihtiyacınız varsa veya diğer geliştiricilerle iş birliği yapmak istiyorsanız Google Developers Community Discord sunucusuna göz atın. Google Yapay Zeka ile Geliştirme projeleri hakkında daha fazla bilgi için video oynatma listesine göz atın.