Firebase için Cloud Functions ile Genkit

Firebase Genkit, akışlarınızı Firebase'e dağıtmanıza yardımcı olan bir eklenti içerir Cloud Functions. Örnek olarak bu sayfa size, Google Yapay Zeka'nın örnek akışını Firebase'e dağıtıyoruz.

Bir akışı Cloud Functions işlevi olarak dağıtma

  1. Gerekli araçları yükleyin:

    1. Node.js sürüm 20 veya üstünü kullandığınızdan emin olun (node --version onay işareti) kaldırın.

    2. Firebase CLI'ı yükleyin.

  2. Firebase konsolunu kullanarak yeni bir Firebase projesi oluşturun veya mevcut bir projeyi seçin.

    Projeyi, Cloud dağıtımı için gerekli olan Blaze planına yükseltin İşlevler.

  3. Firebase CLI ile giriş yapın:

    firebase login
    firebase login --reauth # alternative, if necessary
    firebase login --no-localhost # if running in a remote shell
    
  4. Yeni bir proje dizini oluşturun:

    export PROJECT_ROOT=~/tmp/genkit-firebase-project1
    mkdir -p $PROJECT_ROOT
    
  5. Klasördeki Genkit ile bir Firebase projesi başlatın:

    cd $PROJECT_ROOT
    firebase init genkit
    
    • Daha önce oluşturduğunuz projeyi seçin.
    • Kullanmak istediğiniz model sağlayıcıyı seçin.

    Kalan istemler için varsayılanları kabul edin. genkit aracı, kendi AI akışlarınızı geliştirmeye başlamanıza yardımcı olacak birkaç örnek kaynak dosyası ekleyebilirsiniz. Ancak bu eğiticinin geri kalanında yalnızca örnek akışı dağıtacaksınız.

  6. API kimlik bilgilerini Cloud Functions işlevinizde kullanılabilir hale getirin. Aşağıdakilerden birini yapın: seçtiğiniz model sağlayıcıya bağlı olarak aşağıdaki adımları uygulayın:

    Gemini (Google Yapay Zeka)

    1. Google Yapay Zeka'nın bölgenizde kullanılabildiğinden emin olun.

    2. Şu öğe için bir API anahtarı oluşturun: Gemini API, Google AI Studio'yu kullanıyor.

    3. API anahtarınızı Cloud Secret Manager'da depolayın:

      firebase functions:secrets:set GOOGLE_GENAI_API_KEY
      

      Bu adım, API anahtarınızın yanlışlıkla sızdırılmasını önlemek için önemlidir. Bu izin, sayaçlı olabilecek bir hizmete erişim izni verir.

      Hassas yapılandırma bilgilerini depolama ve bunlara erişme başlıklı makaleyi inceleyin. inceleyin.

    4. src/index.ts dosyasını düzenleyin ve mevcut içe aktarma işlemlerinden sonra aşağıdakileri ekleyin:

      import {defineSecret} from "firebase-functions/params";
      const googleAIapiKey = defineSecret("GOOGLE_GENAI_API_KEY");
      

      Ardından, akış tanımında, Cloud Functions işlevinin şu gizli anahtar değerine erişin:

      export const menuSuggestionFlow = onFlow(
        {
          name: "menuSuggestionFlow",
          // ...
          httpsOptions: {
            secrets: [googleAIapiKey],  // Add this line.
          },
        },
        async (subject) => {
          // ...
        }
      );
      

    Artık bu işlevi dağıttığınızda API anahtarınız Cloud Secret Manager'da mevcuttur ve Cloud Functions üzerinden kullanılabilir. bahsedeceğim.

    Gemini (Vertex AI)

    1. Cloud Console'da Vertex AI API'yi etkinleştirme .

    2. IAM'de sayfasında, Varsayılan Compute hizmet hesabına Vertex AI Kullanıcısı rolüne sahip olmanız gerekir.

    Bu eğitim için ayarlamanız gereken tek sır model içindir ancak genel olarak her hizmet için benzer bir işlem yapmanız gerekir. size yardımcı olur.

  7. Akışınıza bir web uygulamasından erişecekseniz (bunu sonraki bölümde) httpsOptions parametresinde bir CORS politikası ayarlayın:

    export const menuSuggestionFlow = onFlow(
      {
        name: "menuSuggestionFlow",
        // ...
        httpsOptions: {
          cors: true,  // Add this line.
        },
      },
      async (subject) => {
        // ...
      }
    );
    

    Üretim uygulamaları için muhtemelen daha kısıtlayıcı bir politika isteyebilirsiniz ancak sağlayacağız.

  8. İsteğe bağlı: Geliştirici kullanıcı arayüzündeki adımlarınızı deneyin:

    1. API kimlik bilgilerini yerel olarak kullanılabilir hale getirin. Aşağıdakilerden birini yapın: seçtiğiniz model sağlayıcıya bağlı olarak:

      Gemini (Google Yapay Zeka)

      GOOGLE_GENAI_API_KEY ortam değişkenini anahtarınıza ayarlayın:

      export GOOGLE_GENAI_API_KEY=<your API key>
      

      Gemini (Vertex AI)

      Bazı ek ortam değişkenleri ayarlayın ve Kurulum için gcloud aracı uygulama varsayılan kimlik bilgileri yerel olarak:

      export GCLOUD_PROJECT=<your project ID>
      export GCLOUD_LOCATION=us-central1
      gcloud auth application-default login
      
    2. Kullanıcı arayüzünü başlatın:

      cd $PROJECT_ROOT/functions
      genkit start
      
    3. Geliştiricinin kullanıcı arayüzünde (http://localhost:4000/) akışı çalıştırın:

      1. menuSuggestionFlow'u tıklayın.

      2. Input JSON sekmesinde model için bir konu sağlayın:

        "AI app developers"
        
      3. Auth JSON sekmesinde, simüle edilmiş bir kimlik doğrulama nesnesi sağlayın:

        {
          "uid": 0,
          "email_verified": true
        }
        
      4. Çalıştır'ı tıklayın.

  9. Şimdiye kadar her şey beklendiği gibi çalışıyorsa akışı dağıtabilirsiniz:

    cd $PROJECT_ROOT
    firebase deploy --only functions
    

Akışı bir Cloud Functions işlevi olarak dağıttınız. Ancak bu işlemi akış nedeniyle dağıtıldığı uç noktanıza curl veya benzeri bir izin verilmez. Güvenli bir şekilde nasıl yapabileceklerinizi öğrenmek için sonraki bölüme geçin. akışa erişebilirsiniz.

Dağıtılan akışı deneyin

Dağıttığınız her akışın bir yetkilendirme politikası belirlemesi son derece önemlidir. Yok: Birincisi, pahalı olabilecek üretken yapay zeka akışlarınızı herkes.

Varsayılan örnek akışı, aşağıdaki gibi bir yetkilendirme politikasına sahiptir:

firebaseAuth((user) => {
  if (!user.email_verified) {
    throw new Error('Verified email required to run flow');
  }
});

Bu politika, firebaseAuth() yardımcısını kullanarak yalnızca kayıtlı kullanıcılara erişim izni verir uygulamanızın kullanıcıları doğrulanmış e-posta adresleriyle İstemci tarafında ise Authorization: Bearer başlığını, uygun bir Firebase kimliği jetonuna ayarlayın. politikanızı ihlal eder. Cloud Functions istemci SDK'ları çağrılabilir işlev birçok yöntem var.

Akış uç noktanızı denemek için aşağıdaki minimum örnek web'i dağıtabilirsiniz uygulama:

  1. Proje ayarları bölümünde, yeni bir web uygulaması ekleyin. Hosting'i de ayarladınız.

  2. Kimlik Doğrulama bölümünde "Google" sağlayıcısını etkinleştirin. inceleyeceğiz.

  3. Proje dizininizde, dağıtacağınız Firebase Hosting'i ayarlayın örnek uygulama:

    cd $PROJECT_ROOT
    firebase init hosting
    

    Tüm istemler için varsayılanları kabul edin.

  4. public/index.html değerini şununla değiştirin:

    <!doctype html>
    <html>
      <head>
        <title>Genkit demo</title>
      </head>
      <body>
        <div id="signin" hidden>
          <button id="signinBtn">Sign in with Google</button>
        </div>
        <div id="callGenkit" hidden>
          Subject: <input type="text" id="subject" />
          <button id="suggestMenuItem">Suggest a menu theme</button>
          <p id="menuItem"></p>
        </div>
        <script type="module">
          import { initializeApp } from 'https://www.gstatic.com/firebasejs/10.10.0/firebase-app.js';
          import {
            getAuth,
            onAuthStateChanged,
            GoogleAuthProvider,
            signInWithPopup,
          } from 'https://www.gstatic.com/firebasejs/10.10.0/firebase-auth.js';
          import {
            getFunctions,
            httpsCallable,
          } from 'https://www.gstatic.com/firebasejs/10.10.0/firebase-functions.js';
    
          const firebaseConfig = await fetch('/__/firebase/init.json');
          initializeApp(await firebaseConfig.json());
    
          async function generateMenuItem() {
            const menuSuggestionFlow = httpsCallable(
              getFunctions(),
              'menuSuggestionFlow'
            );
            const subject = document.querySelector('#subject').value;
            const response = await menuSuggestionFlow(subject);
            document.querySelector('#menuItem').innerText = response.data;
          }
    
          function signIn() {
            signInWithPopup(getAuth(), new GoogleAuthProvider());
          }
    
          document
            .querySelector('#signinBtn')
            .addEventListener('click', signIn);
          document
            .querySelector('#suggestMenuItem')
            .addEventListener('click', generateMenuItem);
    
          const signinEl = document.querySelector('#signin');
          const genkitEl = document.querySelector('#callGenkit');
    
          onAuthStateChanged(getAuth(), (user) => {
            if (!user) {
              signinEl.hidden = false;
              genkitEl.hidden = true;
            } else {
              signinEl.hidden = true;
              genkitEl.hidden = false;
            }
          });
        </script>
      </body>
    </html>
    
  5. Web uygulamasını ve Cloud Functions işlevini dağıtın:

    cd $PROJECT_ROOT
    firebase deploy
    

deploy komutuyla yazdırılan URL'yi ziyaret ederek web uygulamasını açın. Uygulama bir Google hesabıyla oturum açmanızı gerektirir. Bu işlemin ardından uç nokta istekleri.

Firebase Local Emulator Suite kullanarak geliştirme

Firebase, yerel geliştirme için bir emülatör paketi sunar. Bu paketi Genkit ile kullanabilirsiniz.

Genkit'i Firebase Emulator Suite ile kullanmak için Firebase emülatörlerini şu şekilde başlatın:

GENKIT_ENV=dev firebase emulators:start --inspect-functions

Bu işlem, kodunuzu emülatörde çalıştırır ve Genkit çerçevesini geliştirme modunda çalıştırır. Bu durumda, Genkit yansıma API'si başlatılır ve kullanıma sunulur (ancak geliştirici kullanıcı arayüzü gösterilmez).

Ardından, Firebase Emulator'da çalışan kodunuza bağlamak için --attach seçeneğiyle Genkit Dev kullanıcı arayüzünü başlatın:

genkit start --attach http://localhost:3100 --port 4001

Yeni geliştirilenler arayüzünde Firestore'daki izleri görmek için Denetle sekmesine gidip "Dev/Prod" seçeneğini açık duruma getirebilirsiniz anahtarı. "Üretim" seçeneğine ayarlandığında firestore'dan izler yükleyecek.