Cloud Functions برای Firebase دارای یک متد onCallGenkit
است که به شما امکان می دهد یک تابع قابل فراخوانی با یک کنش Genkit (یک جریان) ایجاد کنید. این توابع را می توان با genkit/beta/client
یا SDK های کلاینت Cloud Functions فراخوانی کرد که به طور خودکار اطلاعات احراز هویت را اضافه می کند.
قبل از شروع
- شما باید با مفهوم جنکیت از جریان ها و نحوه نوشتن آنها آشنا باشید. دستورالعملهای این صفحه فرض میکنند که شما قبلاً جریانهایی را تعریف کردهاید که میخواهید اجرا کنید.
- اگر قبلاً از Cloud Functions برای Firebase استفاده کرده اید، مفید است، اما لازم نیست.
یک پروژه Firebase راه اندازی کنید
یک پروژه Firebase جدید با استفاده از کنسول Firebase ایجاد کنید، یا یک پروژه موجود را انتخاب کنید.
پروژه را به طرح Blaze ارتقا دهید، که برای استقرار تولید توابع ابری لازم است.
Firebase CLI را نصب کنید.
با Firebase CLI وارد شوید:
firebase login
firebase login --reauth # alternative, if necessary
firebase login --no-localhost # if running in a remote shell
یک فهرست پروژه جدید ایجاد کنید:
export PROJECT_ROOT=~/tmp/genkit-firebase-project1
mkdir -p $PROJECT_ROOT
یک پروژه Firebase را در فهرست راه اندازی کنید:
cd $PROJECT_ROOT
firebase init functions
بقیه این صفحه فرض می کند که شما انتخاب کرده اید که توابع خود را در جاوا اسکریپت بنویسید.
جریان را در onCallGenkit
بپیچید
پس از راهاندازی یک پروژه Firebase با توابع Cloud، میتوانید تعاریف جریان را در فهرست functions
پروژه کپی یا بنویسید. در اینجا یک جریان مثال برای نشان دادن این وجود دارد:
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;
},
);
برای استقرار جریانی مانند این، آن را با onCallGenkit
بپیچید که در firebase-functions/https
موجود است. این روش کمکی تمام ویژگیهای توابع قابل فراخوانی را دارد و به طور خودکار از پاسخهای جریان و JSON پشتیبانی میکند.
const {onCallGenkit} = require("firebase-functions/v2/https");
exports.tellJoke = onCallGenkit({
// Bind the Gemini API key secret parameter to the function.
secrets: [apiKey],
},
// Pass in the genkit flow.
jokeTeller,
);
اعتبارنامه های API را برای جریان های مستقر در دسترس قرار دهید
پس از استقرار، جریان های شما به راهی برای احراز هویت با هر سرویس راه دوری که به آن تکیه می کنند نیاز دارد. حداقل، بیشتر جریانها برای دسترسی به سرویس API مدلی که استفاده میکنند، به اعتبار نیاز دارند.
برای این مثال، بسته به ارائه دهنده مدلی که انتخاب کرده اید، یکی از موارد زیر را انجام دهید:
جمینی (گوگل هوش مصنوعی)
مطمئن شوید که Google AI در منطقه شما در دسترس است.
با استفاده از Google AI Studio یک کلید API برای Gemini API ایجاد کنید .
کلید API خود را در Cloud Secret Manager ذخیره کنید:
firebase functions:secrets:set GOOGLE_GENAI_API_KEY
این مرحله برای جلوگیری از نشت تصادفی کلید API شما که امکان دسترسی به یک سرویس بالقوه اندازهگیری شده را میدهد، مهم است.
برای اطلاعات بیشتر در مورد مدیریت اسرار، به ذخیره و دسترسی به اطلاعات پیکربندی حساس مراجعه کنید.
src/index.js
را ویرایش کنید و موارد زیر را بعد از واردات موجود اضافه کنید:const {defineSecret} = require("firebase-functions/params"); // Store the Gemini API key in Cloud Secret Manager. const apiKey = defineSecret("GOOGLE_GENAI_API_KEY");
سپس، در تعریف تابع قابل فراخوانی، اعلام کنید که تابع نیاز به دسترسی به این مقدار مخفی دارد:
// Bind the Gemini API key secret parameter to the function. secrets: [apiKey],
اکنون، هنگامی که این تابع را اجرا می کنید، کلید API شما در Cloud Secret Manager ذخیره می شود و از محیط Cloud Functions در دسترس است.
Gemini (Vertex AI)
در کنسول Cloud، Vertex AI API را برای پروژه Firebase خود فعال کنید .
در صفحه IAM ، اطمینان حاصل کنید که به حساب پیشفرض خدمات محاسباتی نقش Vertex AI User اعطا شده است.
تنها رازی که باید برای این آموزش راه اندازی کنید، مربوط به ارائه دهنده مدل است، اما به طور کلی، باید برای هر سرویسی که جریان شما استفاده می کند، کاری مشابه انجام دهید.
(اختیاری) افزودن اجرای بررسی برنامه
Firebase App Check از گواهی بومی برای تأیید اینکه API شما فقط توسط برنامه شما فراخوانی می شود استفاده می کند. onCallGenkit
از اجرای App Check به صورت اعلامی پشتیبانی می کند.
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 (اشتراک گذاری منابع متقابل)
از گزینه cors
برای کنترل اینکه کدام مبدا می تواند به عملکرد شما دسترسی داشته باشد استفاده کنید.
به طور پیشفرض، توابع قابل فراخوانی CORS را برای اجازه دادن به درخواستها از همه مبدا پیکربندی کردهاند. برای اجازه دادن به برخی از درخواستهای متقاطع، اما نه همه، فهرستی از دامنههای خاص یا عبارات معمولی را که باید مجاز باشند، ارسال کنید. به عنوان مثال:
export const tellJoke = onCallGenkit({
cors: 'mydomain.com',
}, jokeTeller);
مثال کامل
پس از انجام تمام تغییرات توضیح داده شده در بالا، جریان قابل استقرار شما چیزی شبیه به مثال زیر خواهد بود:
const {onCallGenkit} = require("firebase-functions/v2/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,
);
استقرار جریان ها به Firebase
پس از اینکه جریان ها را با استفاده از onCallGenkit
تعریف کردید، می توانید آنها را مانند سایر توابع مستقر کنید:
cd $PROJECT_ROOT
firebase deploy --only functions