Firebase Genkit, akışlarınızı Firebase Cloud Functions'a dağıtmanıza yardımcı olan bir eklenti içerir. Örnek olarak bu sayfada, varsayılan örnek akışını Firebase'e dağıtma süreci açıklanmaktadır.
Bir akışı Cloud Functions işlevi olarak dağıtma
Gerekli araçları yükleyin:
Node.js 20 veya sonraki bir sürümü kullandığınızdan emin olun (kontrol etmek için
node --version
komutunu çalıştırın).Firebase CLI'ı yükleyin.
Firebase konsolunu kullanarak yeni bir Firebase projesi oluşturun veya mevcut bir projeyi seçin.
Projeyi, Cloud Functions işlevlerini dağıtmak için gerekli olan Blaze planına yükseltin.
Firebase CLI ile giriş yapın:
firebase login
firebase login --reauth # alternative, if necessary
firebase login --no-localhost # if running in a remote shell
Yeni bir proje dizini oluşturun:
export PROJECT_ROOT=~/tmp/genkit-firebase-project1
mkdir -p $PROJECT_ROOT
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ız için bazı örnek kaynak dosyaları oluşturur. Ancak bu eğiticinin geri kalanında yalnızca örnek akışı dağıtacaksınız.API kimlik bilgilerini Cloud Functions işlevinizde kullanılabilir hale getirin. Seçtiğiniz model sağlayıcıya bağlı olarak aşağıdakilerden birini yapın:
Gemini (Google Yapay Zeka)
Google Yapay Zeka'nın bölgenizde kullanılabildiğinden emin olun.
Google AI Studio'yu kullanarak Gemini API için API anahtarı oluşturun.
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. Böylece, sayaçlı olabilecek bir hizmete erişim izni verilir.
Gizli anahtarları yönetme hakkında daha fazla bilgi için Hassas yapılandırma bilgilerini depolama ve bunlara erişme bölümüne bakın.
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, bulut işlevinin şu gizli anahtar değerine erişmesi gerektiğini belirtin:
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 depolanır ve Cloud Functions ortamından kullanılabilir.
Gemini (Vertex AI)
Cloud konsolunda Firebase projeniz için Vertex AI API'yi etkinleştirin.
IAM sayfasında, Varsayılan işlem hizmeti hesabına Vertex AI Kullanıcısı rolünün verildiğinden emin olun.
Bu eğitim için ayarlamanız gereken tek sır model sağlayıcı içindir ancak genel olarak akışınızın kullandığı her hizmet için benzer bir işlem yapmanız gerekir.
Akışınıza bir web uygulamasından erişecekseniz (sonraki bölümde bunu yapacaksınız)
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 bu, eğitimde geçerli olacaktır.
İsteğe bağlı: Geliştirici kullanıcı arayüzündeki adımlarınızı deneyin:
API kimlik bilgilerini yerel olarak kullanılabilir hale getirin. Seçtiğiniz model sağlayıcısına bağlı olarak aşağıdakilerden birini yapın:
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şkenlerini ayarlayın ve uygulama varsayılan kimlik bilgilerini yerel olarak ayarlamak için
gcloud
aracını kullanın:export GCLOUD_PROJECT=<your project ID>
export GCLOUD_LOCATION=us-central1
gcloud auth application-default login
Kullanıcı arayüzünü başlatın:
cd $PROJECT_ROOT/functions
genkit start
Geliştiricinin kullanıcı arayüzünde (http://localhost:4000/) akışı çalıştırın:
menuSuggestionFlow'u tıklayın.
Input JSON sekmesinde model için bir konu sağlayın:
"AI app developers"
Auth JSON sekmesinde, simüle edilmiş bir kimlik doğrulama nesnesi sağlayın:
{ "uid": 0, "email_verified": true }
Çalıştır'ı tıklayın.
Ş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 akışın yetkilendirme politikası nedeniyle, dağıtılan uç noktanıza curl
veya benzeri bir araçla erişemezsiniz. Akışa güvenli bir şekilde nasıl erişebileceğinizi öğrenmek için sonraki bölüme geçin.
Dağıtılan akışı deneyin
Dağıttığınız her akışın bir yetkilendirme politikası belirlemesi son derece önemlidir. Yapay zeka olmasaydı, pahalı olabilecek üretken yapay zeka akışlarınız herkese hitap ederdi.
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, uygulamanızın yalnızca doğrulanmış e-posta adresleri olan kayıtlı kullanıcılarına erişim izni vermek için firebaseAuth()
yardımcısını kullanır. İstemci tarafında Authorization: Bearer
başlığını, politikanıza uygun bir Firebase kimliği jetonuna ayarlamanız gerekir. Cloud Functions istemci SDK'ları, bu işlemi otomatikleştiren çağrılanabilir işlev yöntemleri sunar.
Akış uç noktanızı denemek için aşağıdaki minimum örnek web uygulamasını dağıtabilirsiniz:
Firebase konsolunun Proje ayarları bölümünde yeni bir web uygulaması ekleyin ve Hosting'i de ayarlama seçeneğini belirleyin.
Firebase konsolunun Kimlik Doğrulama bölümünde, bu örnekte kullanacağınız Google sağlayıcısını etkinleştirin.
Proje dizininizde, örnek uygulamayı dağıtacağınız Firebase Hosting'i kurun:
cd $PROJECT_ROOT
firebase init hosting
Tüm istemler için varsayılanları kabul edin.
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>
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ı ile oturum açmanızı gerektirir. Bunun ardından uç nokta istekleri başlatabilirsiniz.
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" anahtarını açıp kapatabilirsiniz. "Üretim" olarak ayarlandığında firestore'daki izler yüklenir.