این راهنما نحوه شروع استفاده از نسل دوم Cloud Functions با سمت سرور Remote Config را برای برقراری تماسهای سمت سرور با Agent Platform Gemini API (formerly Vertex AI) شرح میدهد.
در این آموزش، Remote Config را به عملکردی شبیه به روبات گپ اضافه خواهید کرد که از مدل Gemini برای پاسخ دادن به سؤالات کاربر استفاده میکند. Remote Config ورودیهای Gemini API را مدیریت خواهد کرد (ازجمله پیاموارهای که به پُرسمانهای ورودی کاربر اضافه خواهید کرد)، و میتوانید این ورودیها را بهصورت درخواستی از کنسول Firebase بهروز کنید. همچنین از Firebase Local Emulator Suite برای آزمایش و اشکالزدایی تابع استفاده خواهید کرد و سپس، پساز تأیید عملکرد آن، آن را در Google Cloud مستقر و آزمایش خواهید کرد.
پیشنیازها
این راهنما فرض میکند که با استفاده از جاوا اسکریپت برای توسعه برنامهها آشنا هستید.
راهاندازی پروژه Firebase
اگر ازقبل پروژه Firebase ندارید:
به سیستم کنسول Firebase وارد شوید.
روی ایجاد پروژه کلیک کنید، سپس از یکی از گزینههای زیر استفاده کنید:
- گزینه ۱: با وارد کردن نام پروژه جدید در اولین مرحله از گردش کار «ایجاد پروژه»، پروژه Firebase جدید (و پروژه Google Cloud زیربنایی آن بهطور خودکار) ایجاد کنید.
- گزینه ۲: «افزودن Firebase» به پروژه Google Cloud موجود با انتخاب نام پروژه Google Cloud از منوِ کرکرهای در اولین مرحله از گردش کار «ایجاد پروژه».
وقتی از شما خواسته شد، برای استفاده از این راهحل نیازی به راهاندازی Google Analytics ندارید.
برای ایجاد پروژه، دستورالعملهای روی صفحه را دنبال کنید.
اگر ازقبل پروژه Firebase دارید:
به پیکربندی محیط توسعه نرمافزار بروید.
پیکربندی محیط توسعه نرمافزار
برای نوشتن توابع به محیط Node.js نیاز دارید و برای استقرار توابع در زمان اجرای Cloud Functions به Firebase CLI نیاز دارید.
-
برای نصب Node.js و npm، توصیه میکنیم از Node Version Manager استفاده کنید.
Firebase CLI را بااستفاده از روش ترجیحیتان نصب کنید. برای مثال، برای نصب CLI بااستفاده از npm، این فرمان را اجرا کنید:
npm install -g firebase-tools@latestاین فرمان، فرمان
firebaseرا که بهطور جهانی دردسترس است نصب میکند. اگر این فرمان ناموفق بود، شاید لازم باشد اجازههای npm را تغییر دهید.برای بهروزرسانی به جدیدترین نسخه
firebase-tools، همان فرمان را دوباره اجرا کنید.firebase-functionsوfirebase-adminرا نصب کنید و از--saveبرای ذخیره کردن آنها درpackage.jsonاستفاده کنید:npm install firebase-functions@latest firebase-admin@latest --save
functions پایگاه کدتان بهروز کنید.
اکنون آمادهاید تا به مرحله پیادهسازی این راهکار بروید.
پیادهسازی
برای ایجاد، آزمایش، و استقرار نسل دوم Cloud Functions با Remote Config و Agent Platform، این مراحل را دنبال کنید:
- Agent Platform میانای برنامهسازی کاربردی توصیهشده را در Google Cloud کنسول فعال کنید.
- پروژهتان را مقداردهی اولیه کنید و وابستگیهای Node را نصب کنید.
- اجازههای IAM را برای حساب سرویس Admin SDK پیکربندی کنید و کلیدتان را ذخیره کنید.
- تابع را ایجاد کنید.
- الگوی Remote Config مختص سرور ایجاد کنید.
- تابع خود را مستقر کنید و آن را در Firebase Local Emulator Suite آزمایش کنید.
- تابع خود را در Google Cloud مستقر کنید.
مرحله ۱: فعال کردن Agent Platform میاناهای برنامهسازی کاربردی توصیهشده در کنسول Google Cloud
- کنسول Google Cloud را باز کنید و وقتی درخواست شد، پروژهتان را انتخاب کنید.
- در فیلد جستجو در بالای کنسول، Agent Platform را وارد کنید و منتظر بمانید تا Agent Platform بهعنوان نتیجه ظاهر شود.
- Agent Platform را انتخاب کنید. داشبورد Agent Platform نشان داده میشود.
روی فعال کردن همه میاناهای برنامهسازی کاربردی توصیهشده کلیک کنید.
ممکن است چند لحظه طول بکشد تا فعالسازی API تکمیل شود. تا زمانی که فعالسازی تمام شود، صفحه را فعال و باز نگه دارید.
اگر صورتحساب فعال نباشد، از شما خواسته میشود حساب Cloud Billing را اضافه یا پیوند کنید. پساز فعال کردن حساب صورتحساب، به داشبورد Agent Platform برگردید و بررسی کنید که همه میاناهای برنامهسازی کاربردی توصیهشده فعال باشند.
مرحله ۲: مقداردهی اولیه پروژه و نصب وابستگیهای Node
- پایانهای را در رایانهتان باز کنید و به دایرکتوریای بروید که میخواهید تابع را در آن ایجاد کنید.
وارد سیستم Firebase شوید:
firebase loginفرمان زیر را برای مقداردهی اولیه Cloud Functions for Firebase اجرا کنید:
firebase init functionsاستفاده از پروژه موجود را انتخاب کنید و شناسه پروژهتان را مشخص کنید.
وقتی از شما خواسته شد زبان موردنظر را برای استفاده انتخاب کنید، جاوا اسکریپت را انتخاب کنید و کلید Enter را فشار دهید.
برای همه گزینههای دیگر، پیشفرضها را انتخاب کنید.
فهرست راهنمای
functionsدر فهرست راهنمای فعلی ایجاد میشود. درون آن، فایلindex.jsرا پیدا خواهید کرد که از آن برای ساختن تابع خود استفاده میکنید، فهرست راهنمایnode_modulesکه حاوی وابستگیهای تابع شما است، و فایلpackage.jsonکه حاوی وابستگیهای بسته است.بستههای Admin SDK و Agent Platform را با اجرای فرمانهای زیر اضافه کنید و از
--saveاستفاده کنید تا مطمئن شوید در فایلpackage.jsonشما ذخیره شده است:cd functions npm install firebase-admin@latest @google-cloud/vertexai --save
اکنون فایل functions/package.json شما باید بهصورت زیر باشد و جدیدترین نسخهها در آن مشخص شده باشد:
{
"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 استفاده میکنید، بندی را خواهید دید که شامل آن است. علاوهبراین، مطمئن شوید که نسخه موتور گره با نسخه نصبشده Node.js و نسخهای که درنهایت در Google Cloud اجرا میکنید مطابقت داشته باشد. برای مثال، اگر
بند engines در package.json شما بهعنوان Node نسخه ۱۸ پیکربندی شده است و
از Node.js 20 استفاده میکنید، فایل را بهروز کنید تا از ۲۰ استفاده کند:
"engines": {
"node": "20"
},
مرحله ۳: پیکربندی کردن اجازههای IAM برای حساب سرویس Admin SDK و ذخیره کردن کلید
در این راهحل، از حساب سرویس Firebase Admin SDK برای اجرای تابع خود استفاده خواهید کرد.
- در کنسول Google Cloud،
صفحه IAM و سرپرست را باز کنید،
و حساب سرویس Admin SDK (بهنام
firebase-adminsdk) را پیدا کنید. - حساب را انتخاب کنید و روی ویرایش مدیر کلیک کنید. صفحه «ویرایش دسترسی» نمایان میشود.
- روی افزودن نقشی دیگر کلیک کنید، Remote Config بیننده را انتخاب کنید.
- روی افزودن نقشی دیگر کلیک کنید، توسعهدهنده پلاتفرم هوش مصنوعی را انتخاب کنید.
- روی افزودن نقشی دیگر کلیک کنید، کاربر Agent Platform را انتخاب کنید.
- روی افزودن نقشی دیگر کلیک کنید، فراخواننده Cloud Run را انتخاب کنید.
- روی ذخیره کردن کلیک کنید.
سپس، اعتبارنامههای حساب سرویس Admin SDK را صادر کنید و آنها را در متغیر محیطی GOOGLE_APPLICATION_CREDENTIALS ذخیره کنید.
- در کنسول Google Cloud، صفحه اطلاعات کاربری را باز کنید.
- روی حساب سرویس Admin SDK کلیک کنید تا صفحه جزئیات باز شود.
- روی کلیدها کلیک کنید.
- روی افزودن کلید > ایجاد کلید جدید کلیک کنید.
- مطمئن شوید JSON بهعنوان نوع کلید انتخاب شده باشد، سپس روی ایجاد کلیک کنید.
- کلید را در مکانی امن در رایانهتان بارگیری کنید.
از پایانه خود، کلید را بهعنوان متغیر محیطی صادر کنید:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-key.json"
مرحله ۴: ایجاد تابع
در این مرحله، تابعی خواهید ساخت که ورودی کاربر را مدیریت میکند و پاسخهای تولیدشده با هوش مصنوعی را تولید میکند. چند قطعه کد را ترکیب خواهید کرد تا تابع جامعی بسازید که Admin SDK و Agent Platform Gemini API (formerly Vertex AI) را مقداردهی اولیه میکند، پارامترهای پیشفرض را بااستفاده از Remote Config پیکربندی میکند، جدیدترین پارامترهای Remote Config را واکشی میکند، ورودی کاربر را پردازش میکند، و پاسخ را به کاربر جاریسازی میکند.
- در پایگاه کدتان،
functions/index.jsرا در ویرایشگر نوشتار یا IDE باز کنید. محتوای موجود را حذف کنید و سپس Admin SDK، Remote Config، و کیت توسعه نرمافزار Agent Platform را اضافه کنید و برنامه را با جایگذاری کد زیر در فایل مقداردهی اولیه کنید:
const { onRequest } = require("firebase-functions/https"); const { requiresRole, requiresAPI } = require("firebase-functions"); 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"); requiresRole("roles/aiplatform.user"); requiresRole("roles/cloudconfig.viewer"); requiresAPI("aiplatform.googleapis.com", "Needed to query Vertex AI Gemini models"); requiresAPI("firebaseremoteconfig.googleapis.com", "Needed to fetch server-side Remote Config templates"); // Set and check environment variables. const project = process.env.GCLOUD_PROJECT; // Initialize Firebase. const app = initializeApp();مقادیر پیشفرضی را پیکربندی کنید که اگر تابع نتوانست به سرور Remote Config متصل شود، از آنها استفاده کند. این راهکار
textModel،generationConfig،safetySettings،textPrompt، وlocationرا بهعنوان پارامترهای Remote Config پیکربندی میکند که با پارامترهای Remote Config که در ادامه این راهنما پیکربندی خواهید کرد مطابقت دارند. برای اطلاعات بیشتر درباره این پارامترها، به کارخواه Vertex AI Node.js مراجعه کنید.درصورت تمایل، میتوانید پارامتری را نیز پیکربندی کنید تا کنترل کنید که آیا به Agent Platform Gemini API (formerly Vertex AI) دسترسی دارید یا نه (در این مثال، پارامتری بهنام
vertex_enabled). این راهاندازی میتواند هنگام آزمایش تابع شما مفید باشد. در تکهکدهای زیر، این مقدار رویfalseتنظیم شده است که باعث میشود هنگام آزمایش استقرار تابع پایه، از Agent Platform استفاده نشود. تنظیم آن رویtrue، Agent Platform Gemini API (formerly Vertex AI) را فراخوانی میکند.// Define default (fallback) parameter values for Remote Config. const defaultConfig = { // Default values for Vertex AI. model_name: "gemini-1.5-flash-002", 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 };تابع را ایجاد کنید و سمت سرور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;Agent Platform را راهاندازی کنید و منطق گپ و پاسخ را اضافه کنید:
// 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'); } });فایل را ذخیره کنید و ببندید.
مرحله ۵: ایجاد الگوی Remote Config مختص سرور
سپس، الگوی Remote Config سمت سرور ایجاد کنید و پارامترها و مقادیر را برای استفاده در تابع خود پیکربندی کنید. برای ایجاد کردن الگوی Remote Config مختص سرور:
در کنسول Firebase، به DevOps و تعامل > پیکربندی از راه دور بروید.
از انتخابگر کارخواه/سرور در بالای صفحه، سرور را انتخاب کنید.
- اگر اولینبار است که از Remote Config یا الگوهای سرور استفاده میکنید، روی ایجاد پیکربندی کلیک کنید. ایجاد اولین پارامتر سمت سرور در قاب ظاهر میشود.
- اگر اولینبار نیست که از الگوهای سرور Remote Config استفاده میکنید، روی افزودن پارامتر کلیک کنید.
پارامترهای Remote Config زیر را تعریف کنید:
نام پارامتر شرح تایپ کنید مقدار پیشفرض model_nameنام مدل
برای دریافت فهرستهای بهروز نامهای مدل برای استفاده در کدتان، به نسخهها و چرخههای حیات مدل یا نامهای مدل موجود مراجعه کنید.تار gemini-2.0-flashpromptپیاموارهای که باید به ابتدای پُرسمان کاربر اضافه شود. تار 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پارامترهایی که باید به مدل ارسال شود JSON [{"stopSequences": ["I hope this helps"],"temperature": 0.7,"maxOutputTokens": 512, "topP": 0.1,"topK": 20}]safety_settingsتنظیمات ایمنی برای Agent Platform JSON [{"category": "HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "HarmBlockThreshold.BLOCK_LOW_AND_ABOVE"}]locationمکان اجرای سرویس و مدل Agent Platform تار globalis_vertex_enabledپارامتر اختیاری که کنترل میکند پُرسمانها به Agent Platform ارسال شوند یا نه. بولی trueوقتی افزودن پارامترها را تمام کردید، پارامترها و درست بودن نوع دادههای آنها را دوباره بررسی کنید، سپس روی انتشار تغییرات کلیک کنید.
مرحله ۶: تابع خود را مستقر کنید و آن را در Firebase Local Emulator Suite آزمایش کنید
اکنون آمادهاید تا تابع خود را بهصورت محلی با Firebase Local Emulator Suite مستقر و آزمایش کنید.
مطمئن شوید که
GOOGLE_APPLICATION_CREDENTIALSرا بهعنوان متغیر محیطی تنظیم کردهاید، همانطور که در مرحله ۳: پیکربندی اجازههای IAM برای حساب خدماتی Admin SDK و ذخیره کردن کلید توضیح داده شده است. سپس، از دایرکتوری والد دایرکتوریfunctions، تابع خود را در شبیهساز Firebase مستقر کنید:firebase emulators:start --project PROJECT_ID --only functionsصفحه گزارشهای شبیهساز را باز کنید. این باید نشان دهد که تابع شما بار شده است.
با اجرای فرمان زیر به تابع خود دسترسی پیدا کنید، که در آن PROJECT_ID شناسه پروژه شما است و LOCATION منطقهای است که تابع را در آن مستقر کردهاید (برای مثال،
us-central1):curl http://localhost:5001/PROJECT_ID/LOCATION/generateWithVertexمنتظر پاسخ بمانید، سپس به صفحه گزارشهای Firebase Emulator یا کنسول خود برگردید و هرگونه خطا یا هشدار را بررسی کنید.
ورودی کاربر را ارسال کنید و توجه داشته باشید که چون
is_vertex_enabledدر الگوی سرور Remote Config شما پیکربندی شده است، این ورودی باید ازطریق Agent Platform Gemini API (formerly Vertex AI) به مدل Gemini دسترسی پیدا کند و این ممکن است هزینههایی را بههمراه داشته باشد:curl http://localhost:5001/PROJECT_ID/LOCATION/generateWithVertex?prompt=Tell%20me%20everything%20you%20know%20about%20catsتغییرات را در الگوی سرور Remote Config در کنسول Firebase اعمال کنید، سپس دوباره به تابع خود دسترسی پیدا کنید تا تغییرات را مشاهده کنید.
مرحله ۷: تابع خود را در Google Cloud مستقر کنید
پساز آزمایش و تأیید عملکرد، آماده استقرار در Google Cloud و آزمایش عملکرد زنده هستید.
استقرار تابع
تابع خود را بااستفاده از Firebase CLI مستقر کنید:
firebase deploy --only functions
مسدود کردن دسترسی تأییدنشده به تابع
وقتی توابع بااستفاده از Firebase مستقر میشوند، فراخوانیهای تأییدنشده بهطور پیشفرض مجاز هستند، مگر اینکه خطمشی سازمانتان آن را محدود کند. درطول آزمایش و قبلاز ایمنسازی با App Check، توصیه میکنیم دسترسی تأییدنشده را مسدود کنید.
برای مسدود کردن دسترسی تأییدنشده به تابع:
در کنسول Google Cloud، Cloud Run را باز کنید.
روی
generateWithVertexکلیک کنید، سپس روی برگه امنیت کلیک کنید.درخواست اصالتسنجی را فعال کنید و سپس روی ذخیره کلیک کنید.
حساب کاربریتان را برای استفاده از اعتبارنامههای حساب خدمات Admin SDK پیکربندی کنید
چون حساب سرویس Admin SDK همه نقشها و اجازههای لازم را برای اجرای تابع و تعامل با Remote Config و Agent Platform Gemini API (formerly Vertex AI) دارد، بهتر است از آن برای اجرای تابع خود استفاده کنید. برای انجام این کار، باید بتوانید از حساب کاربریتان برای حساب موردنظر توکن ایجاد کنید.
مراحل زیر نحوه پیکربندی حساب کاربری و عملکرد را برای اجرا با امتیازات حساب سرویس Admin SDK شرح میدهد.
- در کنسول Google Cloud، IAM Service Account Credentials API را فعال کنید.
- نقش ایجادکننده کد حساب سرویس را به حساب کاربریتان بدهید: از کنسول Google Cloud، IAM و سرپرست > IAM را باز کنید، حساب کاربریتان را انتخاب کنید، و سپس روی ویرایش اصلی > افزودن نقش دیگر کلیک کنید.
ایجادکننده کد حساب سرویس را انتخاب کنید، سپس روی ذخیره کلیک کنید.
برای اطلاعات دقیقتر درباره جعل هویت حساب سرویس، به جعل هویت حساب سرویس در اسناد Google Cloud مراجعه کنید.
صفحه کنسول Google CloudCloud Functions را باز کنید و روی تابع generateWithVertex در فهرست توابع کلیک کنید.
راهانداز > ویرایش را انتخاب کنید و تنظیمات زمان اجرا، ساخت، اتصالات، و امنیت را ازهم باز کنید.
از برگه زمان اجرا، حساب سرویس زمان اجرا را به حساب سرپرست SDK تغییر دهید.
روی بعدی، سپس روی استقرار کلیک کنید.
راهاندازی gcloud CLI
برای اجرای ایمن و آزمایش تابع خود از خط فرمان، باید با سرویس Cloud Functions اصالتسنجی کنید و یک توکن اصالتسنجی معتبر دریافت کنید.
برای فعال کردن تولید کردن کد، gcloud CLI را نصب و پیکربندی کنید:
اگر gcloud CLI ازقبل در رایانهتان نصب نشده است، آن را طبق توضیحات ارائهشده در نصب gcloud CLI نصب کنید.
اطلاعات کاربری دسترسی را برای حساب Google Cloud خود دریافت کنید:
gcloud auth loginشناسه پروژهتان را در gcloud تنظیم کنید:
gcloud config set project PROJECT_ID
آزمایش کردن تابع
اکنون آمادهاید تا تابع خود را در Google Cloud آزمایش کنید. برای آزمایش کردن تابع، فرمان زیر را اجرا کنید:
curl -X POST https://LOCATION-PROJECT_ID.cloudfunctions.net/generateWithVertex \
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json"
دوباره با دادههای ارائهشده توسط کاربر امتحان کنید:
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"
اکنون میتوانید در الگوی سرور Remote Config تغییر ایجاد کنید، آن تغییرات را منتشر کنید، و گزینههای مختلف را آزمایش کنید.
مراحل بعدی
- Firebase توصیه میکند از App Check برای ایمن کردن Cloud Functions استفاده کنید. برای کسب اطلاعات بیشتر درباره ایمنسازی تابع با App Check، به فعال کردن اجرای App Check برای Cloud Functions مراجعه کنید.
- یک تابع قابلفراخوانی نمونه را با Remote Config و App Check سمت سرور در فراخوانی Agent Platform Gemini API (formerly Vertex AI) با Remote Config و App Check امتحان کنید.
- درباره Cloud Functions برای Firebase بیشتر بدانید.
- درباره استفاده از Remote Config در محیطهای سرور بیشتر بدانید.