Cloud Functions ve Vertex AI ile sunucu tarafı Remote Config'i kullanma

Bu kılavuzda, 2. nesil kullanıcıları nasıl kullanmaya başlayacağınız açıklanmaktadır. Cloud Functions şununla: sunucu tarafı Remote Config ile Vertex AI Gemini API

Bu eğiticide, chatbot benzeri bir işleve Remote Config'i kullanıcı sorularını yanıtlamak için Gemini modelini kullanıyor. Remote Config, komutlarını kontrol etmek için oluşturduğunuz Gemini API girişlerini ( kullanıcı sorgularının yanı sıra) bu girişleri istek üzerine Firebase konsolu. Ayrıca Firebase Local Emulator Suite'i kullanarak testler ve işlevinde hata ayıklayın ve ardından, çalıştığını doğruladıktan sonra, Google Cloud'da test edebilirsiniz.

Ön koşullar

Bu kılavuzda, uygulama geliştirme ve yayınlama için JavaScript'i izin verir.

Firebase projesi oluşturun

Firebase projeniz yoksa:

  1. Firebase konsolunda oturum açın.

  2. Proje oluştur'u tıklayın ve aşağıdaki seçeneklerden birini kullanın:

    • 1. Seçenek: Yeni bir Firebase projesi (ve temel Google Cloud projesine otomatik olarak) yeni bir proje adı girerek "Proje oluştur"un ilk adımı iş akışını takip edin.
    • 2. Seçenek: "Firebase'i ekle" mevcut bir Google Cloud projesine açılır menüden Google Cloud projenizin adını "Proje oluştur"un ilk adımı iş akışını takip edin.
  3. İstendiğinde, bunu kullanmak için Google Analytics'i ayarlamanız gerekmez çözmüştük.

  4. Projenizi oluşturmak için ekrandaki talimatları uygulamaya devam edin.

Zaten bir Firebase projeniz varsa:

Geliştirme ortamınızı yapılandırma bölümüne geçin.

Geliştirme ortamınızı yapılandırma

İşlev yazmak için Node.js ortamına ihtiyacınız vardır ve işlevleri Cloud Functions'a dağıtmak için Firebase CLI'a ihtiyacınız vardır belirler.

  1. Node.js ve npm'yi yükleyin.

    Node.js ve npm'yi yüklemek için Düğüm Sürüm Yöneticisi.

  2. Firebase CLI'yı yüklemek için tercih edilir. Örneğin, npm kullanarak KSA'yı yüklemek için komut:

    npm install -g firebase-tools@latest
    

    Bu komut, genel olarak kullanılabilir firebase komutunu yükler. Bu komutu başarısız olursa, npm izinlerini değiştirin.

    firebase-tools uygulamasının en son sürümüne güncellemek için aynı komutu yeniden çalıştırın.

  3. firebase-functions ve firebase-admin yükleyin, --save uygulamasını kullanarak tasarruf edin package.json cihazınıza aktarın:

    npm install firebase-functions@latest firebase-admin@latest --save
    
ziyaret edin.

Artık bu ayarı uygulamaya devam etmek için hazırsınız çözümüne geçelim.

Uygulama

2. nesil cihazınızı oluşturmak, test etmek ve dağıtmak için aşağıdaki adımları uygulayın Remote Config ve Vertex AI ile Cloud Functions:

  1. Google Cloud konsolunda Vertex AI tarafından önerilen API'leri etkinleştirin.
  2. Projenizi başlatın ve Düğüm bağımlılıklarını yükleyin.
  3. Yönetici SDK'sı hizmet hesabınız için IAM izinlerini yapılandırın ve Anahtarınızı kaydedin.
  4. İşlevi oluşturun.
  5. Sunucuya özel bir Remote Config şablonu oluşturun.
  6. Fonksiyonunuzu dağıtın ve Firebase Local Emulator Suite.
  7. İşlevinizi Google Cloud'a dağıtın.

1. Adım: Google Cloud Console'da Vertex AI tarafından önerilen API'leri etkinleştirin

  1. Şunu açın: Google Cloud Console ve istendiğinde projenizi seçin.
  2. Konsolun üst kısmındaki Arama alanına şunu girin: Vertex AI'ı tıklayın ve sonuç olarak Vertex AI'ın görünmesini bekleyin.
  3. Vertex AI'ı seçin. Vertex AI kontrol paneli gösterilir.
  4. Enable All Recommended APIs'ı (Önerilen Tüm API'leri Etkinleştir) tıklayın.

    API etkinleştirme işleminin tamamlanması birkaç dakika sürebilir. Sayfayı sakla etkin ve etkinleştirme tamamlanana kadar açık kalır.

  5. Faturalandırma etkin değilse bir Cloud Faturalandırma Hesabı'nı seçin. Faturalandırma hesabını etkinleştirdikten sonra Vertex AI kontrol paneline giderek önerilen tüm API'lerin etkinleştirildiğini doğrulayın.

ziyaret edin.

2. Adım: Projenizi başlatın ve Düğüm bağımlılıklarını yükleyin

  1. Bilgisayarınızda bir terminal açın ve kullandığınız dizine gidin. üzerine konuşacağız.
  2. Firebase'e giriş yapın:

    firebase login
    
  3. Cloud Functions for Firebase'i başlatmak için aşağıdaki komutu çalıştırın:

    firebase init functions
    
  4. Mevcut bir projeyi kullan'ı seçin ve proje kimliğinizi belirtin.

  5. Kullanılacak dili seçmeniz istendiğinde JavaScript'i seçin ve Enter'a basın.

  6. Diğer tüm seçenekler için varsayılanları belirleyin.

    Geçerli dizinde bir functions dizini oluşturulur. İç kısımda işlevinizi geliştirmek için kullanacağınız bir index.js dosyası bulun, fonksiyonunuzun bağımlılıklarını içeren bir node_modules dizini, Ayrıca, paket bağımlılıklarını içeren bir package.json dosyası da bulunur.

  7. Şu komutu çalıştırarak Admin SDK ve Vertex AI paketlerini ekleyin: kaydedildiğinden emin olmak için --save kullanarak aşağıdaki komutları uygulayabilirsiniz: package.json dosyası:

    cd functions
    npm install firebase-admin@latest @google-cloud/vertexai --save
    

functions/package.json dosyanız artık aşağıdaki gibi görünecektir: en son sürüm belirtildi:

  {
    "name": "functions",
    "description": "Cloud Functions for Firebase",
    "scripts": {
      "serve": "firebase emulators:start --only functions",
      "shell": "firebase functions:shell",
      "start": "npm run shell",
      "deploy": "firebase deploy --only functions",
      "logs": "firebase functions:log"
    },
    "engines": {
      "node": "20"
    },
    "main": "index.js",
    "dependencies": {
      "@google-cloud/vertexai": "^1.1.0",
      "firebase-admin": "^12.1.0",
      "firebase-functions": "^5.0.0"
    },
    "devDependencies": {
      "firebase-functions-test": "^3.1.0"
    },
    "private": true
  }

ESLint kullanıyorsanız, bu ifadeyi içeren bir dize göreceğinize dikkat edin. İçinde ek olarak, düğüm motoru sürümünün yüklü sürümünüzle eşleştiğinden emin olun. ve Google Cloud'da çalıştırdığınız sürümden biraz daha önemlidir. Örneğin, package.json içindeki engines dize, Düğüm sürüm 18 olarak yapılandırılmış ve Node.js 20 kullanıyorsanız dosyayı 20 kullanacak şekilde güncelleyin:

  "engines": {
    "node": "20"
  },

3. adım: Yönetici SDK'si hizmet hesabınız için IAM izinlerini yapılandırın ve anahtarınızı kaydedin

Bu çözümde, Firebase Admin SDK hizmet hesabını kullanarak fonksiyonunuzla ilişkilidir.

  1. Google Cloud konsolunda IAM ve Yönetici sayfasındaki Yönetici SDK'sı hizmet hesabını (firebase-adminsdk adlı) bulun.
  2. Hesabı seçin ve Ana hesabı düzenle'yi tıklayın. Erişimi düzenleme sayfası görünür.
  3. Başka bir rol ekle'yi tıklayın, Remote Config Görüntüleyici'yi seçin.
  4. Başka bir rol ekle'yi tıklayıp AI platformu geliştiricisi'ni seçin.
  5. Başka bir rol ekle'yi tıklayıp Vertex AI kullanıcısı'nı seçin.
  6. Başka bir rol ekle'yi tıklayıp Cloud Run Çağırıcısı'nı seçin.
  7. Kaydet'i tıklayın.

Ardından, Yönetici SDK'sı hizmet hesabının kimlik bilgilerini dışa aktarıp kaydedin GOOGLE_APPLICATION_CREDENTIALS ortam değişkeninizde kullanabilirsiniz.

  1. Google Cloud konsolunda Credentials (Kimlik bilgileri) sayfasını ziyaret edin.
  2. Yönetici SDK'sı hizmet hesabını tıklayarak Ayrıntılar sayfasını açın.
  3. Anahtarlar'ı tıklayın.
  4. Anahtar ekle'yi tıklayın > Yeni anahtar oluşturun.
  5. Anahtar türü olarak JSON'nin seçildiğinden emin olduktan sonra Oluştur'u tıklayın.
  6. Anahtarı, bilgisayarınızda güvenli bir yere indirin.
  7. Terminalinizden anahtarı ortam değişkeni olarak dışa aktarın:

    export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-key.json"
    
ziyaret edin.

4. Adım: İşlevi oluşturun

Bu adımda, kullanıcı girişini işleyen ve yeni oluşturulan Yapay zeka destekli yanıtlar. Birden çok kod snippet'ini birleştirerek ilk kullanıma hazırlayan kapsamlı bir işlevdir. Vertex AI Gemini API, varsayılan parametreleri Remote Config, en son Remote Config parametrelerini getirir ve Kullanıcı girişi yapar ve kullanıcıya yanıt akışı gerçekleştirir.

  1. Kod tabanınızda functions/index.js uygulamasını bir metin düzenleyicide veya IDE'de açın.
  2. Mevcut içeriği silin ve ardından Admin SDK'yı ekleyin. ve Vertex AI SDK'yı yapılandırmalı ve uygulamayı aşağıdaki kodu dosyaya yapıştırın:

    const { onRequest } = require("firebase-functions/v2/https");
    const logger = require("firebase-functions/logger");
    
    const { initializeApp } = require("firebase-admin/app");
    const { VertexAI } = require('@google-cloud/vertexai');
    const { getRemoteConfig } = require("firebase-admin/remote-config");
    
    // Set and check environment variables.
    const project = process.env.GCLOUD_PROJECT;
    
    // Initialize Firebase.
    const app = initializeApp();
    
  3. İşlevinizin bağlanamadığı durumlarda kullanacağı varsayılan değerleri yapılandırın Remote Config sunucusuna atanır. Bu çözüm textModel özelliklerini yapılandırır. generationConfig, safetySettings, textPrompt ve location olarak Remote Config'e karşılık gelen Remote Config parametreleri parametrelerinden bazılarını ele alalım. Daha fazla bu parametrelerle ilgili daha fazla bilgi edinmek için Vertex AI Node.js istemcisi.

    İsteğe bağlı olarak, bir izleme kodu kullanıp kullanmayacağınızı kontrol etmek için Vertex AI Gemini API'sine (bu örnekte vertex_enabled). Bu kurulum, işlevinizi test ederken yararlı olabilir. İçinde aşağıdaki kod snippet'lerinde, bu değer false olarak ayarlanır ve atlanır. Vertex AI'ı kullanarak temel işlev dağıtımını test edebilirsiniz. Şu şekilde ayarlanıyor: true, Vertex AI Gemini API'yi çağırır.

    // Define default (fallback) parameter values for Remote Config.
    const defaultConfig = {
    
      // Default values for Vertex AI.
      model_name: "gemini-1.5-flash-preview-0514",
      generation_config: [{
        "stopSequences": [], "temperature": 0.7,
        "maxOutputTokens": 64, "topP": 0.1, "topK": 20
      }],
      prompt: "I'm a developer who wants to learn about Firebase and you are a \
        helpful assistant who knows everything there is to know about Firebase!",
      safety_settings: [{
        "category":
          "HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT",
        "threshold": "HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE"
      }],
      location: 'us-central1',
    
      // Disable Vertex AI Gemini API access for testing.
      vertex_enabled: false
    };
    
  4. İşlevi oluşturma ve ayarlama sunucu tarafı Remote Config:

    // Export the function.
    exports.generateWithVertex = onRequest(async (request, response) => {
    
      try {
    
        // Set up Remote Config.
        const rc = getRemoteConfig(app);
    
        // Get the Remote Config template and assign default values.
        const template = await rc.getServerTemplate({
          defaultConfig: defaultConfig
        });
    
        // Add the template evaluation to a constant.
        const config = template.evaluate();
    
        // Obtain values from Remote Config.
        const textModel = config.getString("model_name") ||
            defaultConfig.model_name;
        const textPrompt = config.getString("prompt") || defaultConfig.prompt;
        const generationConfig = config.getString("generation_config") ||
            defaultConfig.generation_config;
        const safetySettings = config.getString("safety_settings") ||
            defaultConfig.safety_settings;
        const location = config.getString("location") ||
            defaultConfig.location;
        const vertexEnabled = config.getBoolean("is_vertex_enabled") ||
            defaultConfig.vertex_enabled;
    
  5. Vertex AI'ı kurup sohbet ve yanıt mantığını ekleyin:

      // Allow user input.
      const userInput = request.query.prompt || '';
    
      // Instantiate Vertex AI.
        const vertex_ai = new VertexAI({ project: project, location: location });
        const generativeModel = vertex_ai.getGenerativeModel({
          model: textModel,
          safety_settings: safetySettings,
          generation_config: generationConfig,
        });
    
        // Combine prompt from Remote Config with optional user input.
        const chatInput = textPrompt + " " + userInput;
    
        if (!chatInput) {
          return res.status(400).send('Missing text prompt');
        }
        // If vertexEnabled isn't true, do not send queries to Vertex AI.
        if (vertexEnabled !== true) {
          response.status(200).send({
            message: "Vertex AI call skipped. Vertex is not enabled."
          });
          return;
        }
    
        logger.log("\nRunning with model ", textModel, ", prompt: ", textPrompt,
          ", generationConfig: ", generationConfig, ", safetySettings: ",
          safetySettings, " in ", location, "\n");
    
        const result = await generativeModel.generateContentStream(chatInput); 
        response.writeHead(200, { 'Content-Type': 'text/plain' });
    
        for await (const item of result.stream) {
          const chunk = item.candidates[0].content.parts[0].text;
          logger.log("Received chunk:", chunk);
          response.write(chunk);
        }
    
        response.end();
    
      } catch (error) {
        logger.error(error);
        response.status(500).send('Internal server error');
      }
    });
    
  6. Dosyayı kaydedin ve kapatın.

ziyaret edin.

5. Adım: Sunucuya özel bir Remote Config şablonu oluşturun

Şimdi sunucu tarafı bir Remote Config şablonu oluşturun ve parametreleri yapılandırın değerleri girin. Sunucuya özel bir Remote Config şablonu:

  1. Firebase konsolunu açın ve gezinme menüsünde Çalıştır'ı tıklayıp seçin Remote Config.
  2. Sunucunun üst kısmındaki Client/Server (İstemci/Sunucu) seçicisinden Server'ı (Sunucu) seçin. Remote Config sayfası.

    • Remote Config veya sunucu şablonlarını ilk kez kullanıyorsanız Yapılandırma Oluştur'u tıklayın. İlk sunucu tarafınızı oluşturun parametresi bölmesi görüntülenir.
    • Remote Config sunucu şablonlarını ilk kez kullanmıyorsanız Parametre ekle'yi tıklayın.
  3. Aşağıdaki Remote Config parametrelerini tanımlayın:

    Parametre adı Açıklama Tür Varsayılan değer
    model_name Model adı
    Kodunuzda kullanılacak model adlarının güncel listeleri için bkz. Model sürümler ve yaşam döngüleri veya Kullanılabilir model adlarını inceleyin.
    Dize gemini-1.5-pro-preview-0514
    prompt Kullanıcı sorgusunun başına ekleme istemi. Dize I'm a developer who wants to learn about Firebase and you are a helpful assistant who knows everything there is to know about Firebase!
    generation_config Parametreler anahtar değerleri modele gönderebilirsiniz. JSON [{"stopSequences": ["I hope this helps"],"temperature": 0.7,"maxOutputTokens": 512, "topP": 0.1,"topK": 20}]
    safety_settings Güvenlik ayarları hakkında daha fazla bilgi edinin. JSON [{"category": "HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "HarmBlockThreshold.BLOCK_LOW_AND_ABOVE"}]
    location Konum Vertex AI hizmetini ve modelini çalıştırmak için kullanılabilir. Dize us-central1
    is_vertex_enabled Sorguların gönderilip gönderilmeyeceğini kontrol eden isteğe bağlı parametre Vertex AI. Boole true
  4. Parametre eklemeyi tamamladığınızda, parametrelerinizi bir kez daha kontrol edin ve Ardından Değişiklikleri yayınla'yı tıklayın.

6. Adım: İşlevinizi dağıtın ve Firebase Local Emulator Suite'te test edin

Artık işlevinizi Firebase Local Emulator Suite.

  1. GOOGLE_APPLICATION_CREDENTIALS ortamını ayarladığınızdan emin olun değişkeni 3. Adım: Öğenizin IAM izinlerini yapılandırın ve Yönetici SDK'si hizmet hesabına erişip tuşuna basın. Ardından, functions dizininizin ana dizini üzerinde çalışıyorsanız, işlevinizi Firebase emülatörü:

    firebase emulators:start --project PROJECT_ID --only functions
    
    functions
  2. emülatörün günlükleri öğrenin. Bu, fonksiyonunuzun yüklendiğini göstermelidir.

  3. İşlevinize erişmek için şu komutu çalıştırın: PROJECT_ID proje kimliğinizdir ve LOCATION, dağıttığınız bölgedir işlevi şu şekilde ayarlayın: (örneğin, us-central1):

    curl http://localhost:5001/PROJECT_ID/LOCATION/generateWithVertex
    
  4. Yanıt bekleyin, ardından Firebase Emulator günlükleri sayfasına dönün veya konsolu ve hata veya uyarı olup olmadığını kontrol edin.

  5. Kullanıcı girişi göndermeyi deneyin. Bunu not edin, çünkü is_vertex_enabled Remote Config sunucu şablonunuzda yapılandırılmışsa, Gemini API aracılığıyla e-posta göndererek ve ücretlendirme:

    curl http://localhost:5001/PROJECT_ID/LOCATION/generateWithVertex?prompt=Tell%20me%20everything%20you%20know%20about%20cats
    
  6. Remote Config sunucu şablonunuzda değişiklik yapmak için: sonra değişiklikleri gözlemlemek için işlevinize yeniden erişin.

ziyaret edin.

7. Adım: İşlevinizi Google Cloud'a dağıtın

İşlevinizi test edip doğruladıktan sonra Google Cloud'dan edinip canlı işlevi test edin.

İşlevinizi dağıtma

İşlevinizi Firebase CLI kullanarak dağıtın:

firebase deploy --only functions

İşleve kimliği doğrulanmamış erişimi engelle

İşlevler Firebase kullanılarak dağıtıldığında, kimliği doğrulanmamış çağrılar kuruluşunuzun politikası izin vermiyorsa varsayılan olarak izin verilir. Testler sırasında ve Uygulama Kontrolü ile güvenliği sağlamadan önce kimliği doğrulanmamış erişimi engellemenizi öneririz.

İşleve kimliği doğrulanmamış erişimi engellemek için:

  1. Google Cloud konsolunda Cloud Run.

  2. generateWithVertex simgesini ve ardından Güvenlik sekmesini tıklayın.

  3. Kimlik doğrulaması iste seçeneğini etkinleştirip Kaydet'i tıklayın.

Kullanıcı hesabınızı, Yönetici SDK'sı hizmet hesabı kimlik bilgilerini kullanacak şekilde yapılandırma

Yönetici SDK'si hizmet hesabı, sahip olduğu tüm gerekli rollere ve ve Remote Config ile etkileşime geçme izni verdiğinden Vertex AI Gemini API'yi kullanarak işlevinizi çalıştırabilirsiniz. Yapılacaklar Bunu yapmak için, kullanıcı hesabınızdan hesap için jetonlar oluşturabilmeniz gerekir.

Aşağıdaki adımlarda kullanıcı hesabınızı nasıl yapılandıracağınız ve işlevin nasıl yapılandırılacağı açıklanmaktadır. yönetici SDK'sı hizmet hesabı ayrıcalıklarıyla çalıştırılması gerekir.

  1. Google Cloud konsolunda IAM Hizmet Hesabı Kimlik Bilgileri API'si.
  2. Kullanıcı hesabınıza Hizmet Hesabı Jetonu Oluşturucu rolünü verin: Google Cloud konsolunda IAM ve Yönetici > IAM, kullanıcınızı seçin ve ardından, Ana hesabı düzenle'yi tıklayın > Başka bir rol ekleyin.
  3. Service Account Token Creator'ı (Hizmet Hesabı Jetonu Oluşturucu) seçip Save'i (Kaydet) tıklayın.

    Hizmet hesabının kimliğine bürünme hakkında daha ayrıntılı bilgi için Hizmet hesabı kimliğe bürünme inceleyebilirsiniz.

  4. Google Cloud Console Cloud Functions sayfasını açın. ve İşlevler listesinde generateWithVertex işlevini tıklayın.

  5. Tetikleyici > Çalışma zamanı, derleme, bağlantılar ve güvenlik ayarlarına gidin.

  6. Çalışma zamanı sekmesinde Çalışma zamanı hizmet hesabı değerini Yönetici SDK'sı hesabı.

  7. Next'i (İleri), ardından Deploy'u (Dağıt) tıklayın.

gcloud CLI'ı kurma

İşlevinizi komut satırından güvenli bir şekilde çalıştırıp test etmek için şunları yapmanız gerekir: Cloud Functions hizmetiyle kimlik doğrulamalı ve geçerli bir kimlik doğrulama jetonu.

Jeton oluşturmayı etkinleştirmek için gcloud KSA'yı yükleyin ve yapılandırın:

  1. Bilgisayarınızda yüklü değilse gcloud CLI'yi gcloud'u yükleme KSA.

  2. Google Cloud hesabınız için erişim kimlik bilgilerini edinin:

    gcloud auth login
    
  3. gcloud'da proje kimliğinizi ayarlayın:

    gcloud config set project PROJECT_ID
    

İşlevinizi test etme

Artık Google Cloud'da işlevinizi test etmeye hazırsınız. İşlevi test etmek için aşağıdaki komutu çalıştırın:

curl -X POST https://LOCATION-PROJECT_ID.cloudfunctions.net/generateWithVertex \
  -H "Authorization: bearer $(gcloud auth print-identity-token)" \
  -H "Content-Type: application/json"

Kullanıcı tarafından sağlanan verilerle tekrar deneyin:

curl -X POST https://LOCATION-PROJECT_ID.cloudfunctions.net/generateWithVertex?prompt=Tell%20me%20everything%20you%20know%20about%20dogs \
 -H "Authorization: bearer $(gcloud auth print-identity-token)" \
 -H "Content-Type: application/json"

Artık Remote Config sunucu şablonunuzda değişiklik yapabilir, yayınlayabilirsiniz ve farklı seçenekleri test edebilirsiniz.

Sonraki adımlar