Cloud Functions for Firebase'de, Genkit işlemi (Akış) içeren bir çağrılabilir işlev oluşturmanıza olanak tanıyan bir onCallGenkit yöntemi bulunur. Bu işlevler, genkit/beta/client veya kimlik doğrulama bilgilerini otomatik olarak ekleyen Cloud Functions istemci SDK'ları ile çağrılabilir.
Başlamadan önce
- Genkit'in akışlar kavramı ve bunların nasıl yazılacağı hakkında bilgi sahibi olmalısınız. Bu sayfadaki talimatlarda, dağıtmak istediğiniz bazı akışları zaten tanımladığınız varsayılır.
- Daha önce Cloud Functions for Firebase'i kullandıysanız bu bilgiler faydalı olur ancak gerekli değildir.
Firebase projesi oluşturma
Firebase konsolunu kullanarak yeni bir Firebase projesi oluşturun veya mevcut bir projeyi seçin.
Cloud Functions üretim dağıtımı için gerekli olan Blaze planına projeyi yükseltin.
Firebase CLI'yı yükleyin.
Firebase CLI ile oturum açın:
firebase loginfirebase login --reauth # alternative, if necessaryfirebase login --no-localhost # if running in a remote shellYeni bir proje dizini oluşturun:
export PROJECT_ROOT=~/tmp/genkit-firebase-project1mkdir -p $PROJECT_ROOTDizinde bir Firebase projesi başlatın:
cd $PROJECT_ROOTfirebase init functions
Bu sayfanın geri kalanında, işlevlerinizi JavaScript ile yazmayı tercih ettiğiniz varsayılır.
Akışı onCallGenkit içine alın.
Cloud Functions ile bir Firebase projesi oluşturduktan sonra, projenin functions dizinindeki akış tanımlarını kopyalayabilir veya yazabilirsiniz. Bunu gösteren örnek bir akış aşağıda verilmiştir:
const ai = genkit({ plugins: [googleAI()], model: gemini15Flash, }); const jokeTeller = ai.defineFlow({ name: "jokeTeller", inputSchema: z.string().nullable(), outputSchema: z.string(), streamSchema: z.string(), }, async (jokeType = "knock-knock", {sendChunk}) => { const prompt = `Tell me a ${jokeType} joke.`; // Call the `generateStream()` method to // receive the `stream` async iterable. const {stream, response: aiResponse} = ai.generateStream(prompt); // Send new words of the generative AI response // to the client as they are generated. for await (const chunk of stream) { sendChunk(chunk.text); } // Return the full generative AI response // to clients that may not support streaming. return (await aiResponse).text; }, );
Bunun gibi bir akışı dağıtmak için onCallGenkit ile sarmalayın. onCallGenkit, firebase-functions/https içinde kullanılabilir. Bu yardımcı yöntem, çağrılabilir işlevlerin tüm özelliklerine sahiptir ve hem akış hem de JSON yanıtlarını otomatik olarak destekler.
const {onCallGenkit} = require("firebase-functions/https");
exports.tellJoke = onCallGenkit({ // Bind the Gemini API key secret parameter to the function. secrets: [apiKey], }, // Pass in the genkit flow. jokeTeller, );
API kimlik bilgilerini dağıtılan akışlarda kullanılabilir hale getirme
Dağıtıldıktan sonra akışlarınızın, bağlı oldukları tüm uzak hizmetlerde kimlik doğrulaması yapması gerekir. Çoğu akışın, kullandıkları model API hizmetine erişmek için kimlik bilgilerine ihtiyacı vardır.
Bu örnekte, 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_KEYBu adım, API anahtarınızın yanlışlıkla sızdırılmasını önlemek için önemlidir. API anahtarınız, ücretli olabilecek bir hizmete erişim sağlar.
Gizli dizileri yönetme hakkında daha fazla bilgi için Hassas yapılandırma bilgilerini depolama ve bunlara erişme başlıklı makaleyi inceleyin.
src/index.jsdosyasını düzenleyin ve mevcut içe aktarma işlemlerinden sonra aşağıdakileri ekleyin:const {defineSecret} = require("firebase-functions/params");
// Store the Gemini API key in Cloud Secret Manager. const apiKey = defineSecret("GOOGLE_GENAI_API_KEY");
Ardından, çağrılabilir işlev tanımında işlevin bu gizli değere erişmesi gerektiğini beyan edin:
// Bind the Gemini API key secret parameter to the function. secrets: [apiKey],
Artık bu işlevi dağıttığınızda API anahtarınız Cloud Secret Manager'da depolanacak ve Cloud Functions ortamından kullanılabilir olacaktır.
Gemini (Vertex AI)
Cloud Console'da Firebase projeniz için Vertex AI API'yi etkinleştirin.
IAM sayfasında, Varsayılan Compute hizmet 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ıya aittir. Ancak genel olarak, akışınızın kullandığı her hizmet için benzer bir işlem yapmanız gerekir.
(İsteğe bağlı) Uygulama Doğrulama'yı zorunlu kılma
Firebase Uygulama Kontrolü, API'nizin yalnızca uygulamanız tarafından çağrıldığını doğrulamak için yerel onaylama özelliğini kullanır.
onCallGenkit, App Check yaptırımını bildirimsel olarak destekler.
export const generatePoem = onCallGenkit({
enforceAppCheck: true,
// Optional. Makes App Check tokens only usable once. This adds extra security
// at the expense of slowing down your app to generate a token for every API
// call
consumeAppCheckToken: true,
}, generatePoemFlow);
CORS'u (Merkezler Arası Kaynak Paylaşımı) yapılandırma
Hangi kaynakların işlevinize erişebileceğini kontrol etmek için cors seçeneğini kullanın.
Varsayılan olarak, çağrılabilir işlevlerde CORS, tüm kaynaklardan gelen isteklere izin verecek şekilde yapılandırılır. Tüm kaynaklar arası isteklere değil, yalnızca bazılarına izin vermek için izin verilmesi gereken belirli alan adlarının veya normal ifadelerin listesini iletin. Örneğin:
export const tellJoke = onCallGenkit({
cors: 'mydomain.com',
}, jokeTeller);
Eksiksiz örnek
Yukarıda açıklanan tüm değişiklikleri yaptıktan sonra dağıtılabilir akışınız aşağıdaki örneğe benzer:
const {onCallGenkit} = require("firebase-functions/https"); const {defineSecret} = require("firebase-functions/params"); // Dependencies for Genkit. const {gemini15Flash, googleAI} = require("@genkit-ai/googleai"); const {genkit, z} = require("genkit"); // Store the Gemini API key in Cloud Secret Manager. const apiKey = defineSecret("GOOGLE_GENAI_API_KEY"); const ai = genkit({ plugins: [googleAI()], model: gemini15Flash, }); const jokeTeller = ai.defineFlow({ name: "jokeTeller", inputSchema: z.string().nullable(), outputSchema: z.string(), streamSchema: z.string(), }, async (jokeType = "knock-knock", {sendChunk}) => { const prompt = `Tell me a ${jokeType} joke.`; // Call the `generateStream()` method to // receive the `stream` async iterable. const {stream, response: aiResponse} = ai.generateStream(prompt); // Send new words of the generative AI response // to the client as they are generated. for await (const chunk of stream) { sendChunk(chunk.text); } // Return the full generative AI response // to clients that may not support streaming. return (await aiResponse).text; }, ); exports.tellJoke = onCallGenkit({ // Bind the Gemini API key secret parameter to the function. secrets: [apiKey], }, // Pass in the genkit flow. jokeTeller, );
Akışları Firebase'e dağıtma
onCallGenkit kullanarak akışları tanımladıktan sonra, diğer işlevleri dağıtırken yaptığınız gibi dağıtabilirsiniz:
cd $PROJECT_ROOTfirebase deploy --only functions