Panduan ini menjelaskan cara mulai menggunakan Cloud Functions generasi ke-2 dengan Remote Config sisi server untuk membuat panggilan sisi server ke Vertex AI Gemini API.
Dalam tutorial ini, Anda akan menambahkan Remote Config ke fungsi seperti chatbot yang menggunakan model Gemini untuk menjawab pertanyaan pengguna. Remote Config akan mengelola input Gemini API (termasuk prompt yang akan ditambahkan ke kueri pengguna yang masuk), dan Anda dapat memperbarui input ini sesuai permintaan dari Firebase console. Anda juga akan menggunakan Firebase Local Emulator Suite untuk menguji dan men-debug fungsi, dan setelah memverifikasi bahwa fungsi tersebut berfungsi, Anda akan mengujinya di Google Cloud.
Prasyarat
Panduan ini mengasumsikan bahwa Anda sudah terbiasa menggunakan JavaScript untuk mengembangkan aplikasi.
Menyiapkan project Firebase
Jika Anda belum memiliki project Firebase:
Login ke Firebase console.
Klik Create project, lalu gunakan salah satu opsi berikut:
- Opsi 1: Buat project Firebase baru (dan project Google Cloud yang mendasarinya secara otomatis) dengan memasukkan nama project baru di langkah pertama dalam alur kerja "Create project".
- Opsi 2: "Tambahkan Firebase" ke project Google Cloud yang ada dengan memilih nama project Google Cloud dari menu drop-down di langkah pertama dalam alur kerja "Create project".
Saat diminta, Anda tidak perlu menyiapkan Google Analytics untuk menggunakan solusi ini.
Lanjutkan mengikuti petunjuk di layar untuk membuat project Anda.
Jika Anda sudah memiliki project Firebase:
Lanjutkan ke Mengonfigurasi lingkungan pengembangan Anda.
Mengonfigurasi lingkungan pengembangan Anda
Anda akan memerlukan lingkungan Node.js untuk menulis fungsi, dan Firebase CLI untuk men-deploy fungsi ke runtime Cloud Functions.
-
Untuk menginstal Node.js dan npm, sebaiknya gunakan Node Version Manager.
Instal Firebase CLI menggunakan metode pilihan Anda. Misalnya, untuk menginstal CLI menggunakan npm, jalankan perintah berikut:
npm install -g firebase-tools@latest
Perintah ini akan menginstal perintah
firebase
yang tersedia secara global. Jika perintah gagal, Anda mungkin perlu mengubah izin npm.Untuk mengupdate ke versi terbaru
firebase-tools
, jalankan kembali perintah yang sama.Instal
firebase-functions
danfirebase-admin
, lalu gunakan--save
untuk menyimpan keduanya kepackage.json
:npm install firebase-functions@latest firebase-admin@latest --save
Anda kini siap untuk melanjutkan ke penerapan solusi ini.
Penerapan
Ikuti langkah-langkah berikut untuk membuat, menguji, dan men-deploy Cloud Functions generasi ke-2 dengan Remote Config dan Vertex AI:
- Aktifkan API yang direkomendasikan Vertex AI di Konsol Google Cloud.
- Inisialisasi project Anda dan instal dependensi Node.
- Konfigurasikan izin IAM untuk akun layanan Admin SDK dan simpan kunci Anda.
- Buat fungsi.
- Buat template Remote Config khusus server.
- Deploy fungsi dan uji di Firebase Local Emulator Suite.
- Deploy fungsi Anda ke Google Cloud.
Langkah 1: Aktifkan API yang direkomendasikan Vertex AI di Konsol Google Cloud
- Buka Konsol Google Cloud, dan saat diminta, pilih project Anda.
- Pada kolom Search di bagian atas konsol, masukkan Vertex AI dan tunggu hingga Vertex AI muncul.
- Pilih Vertex AI. Dasbor Vertex AI akan muncul.
Klik Enable All Recommended APIs.
Mungkin perlu waktu beberapa saat hingga pengaktifan API selesai. Biarkan halaman tetap aktif dan terbuka hingga pengaktifan selesai.
Jika penagihan tidak diaktifkan, Anda akan diminta untuk menambahkan atau menautkan Akun Penagihan Cloud. Setelah mengaktifkan akun penagihan, kembali ke dasbor Vertex AI dan pastikan semua API yang direkomendasikan sudah aktif.
Langkah 2: Inisialisasi project Anda dan instal dependensi Node
- Buka terminal di komputer Anda dan arahkan ke direktori tempat Anda berencana untuk membuat fungsi Anda.
Login ke Firebase:
firebase login
Jalankan perintah berikut untuk menginisialisasi Cloud Functions for Firebase:
firebase init functions
Pilih Use an existing project dan tentukan project ID Anda.
Saat diminta memilih bahasa yang akan digunakan, pilih JavaScript dan tekan Enter.
Untuk opsi lainnya, pilih default.
Direktori
functions
dibuat di direktori saat ini. Di dalamnya, Anda akan menemukan fileindex.js
yang akan digunakan untuk membangun fungsi, direktorinode_modules
yang berisi dependensi untuk fungsi Anda, dan filepackage.json
yang berisi dependensi paket.Tambahkan paket Admin SDK dan Vertex AI dengan menjalankan perintah berikut, menggunakan
--save
untuk memastikan bahwa paket tersebut disimpan ke filepackage.json
:cd functions npm install firebase-admin@latest @google-cloud/vertexai --save
File functions/package.json
Anda kini akan terlihat seperti berikut, dengan
versi terbaru yang ditentukan:
{
"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
}
Perlu diperhatikan bahwa jika Anda menggunakan ESLint, Anda akan melihat stanza yang menyertakannya. Selain itu,
pastikan versi engine node cocok dengan versi Node.js yang diinstal
dan versi akhirnya Anda jalankan di Google Cloud. Misalnya, jika
stanza engines
di package.json
Anda dikonfigurasi sebagai Node versi 18 dan
Anda menggunakan Node.js 20, perbarui file untuk menggunakan versi 20:
"engines": {
"node": "20"
},
Langkah 3: Konfigurasikan izin IAM untuk akun layanan Admin SDK dan simpan kunci Anda
Dalam solusi ini, Anda akan menggunakan akun layanan Firebase Admin SDK untuk menjalankan fungsi Anda.
- Di Konsol Google Cloud, buka halaman
IAM & Admin,
lalu cari akun layanan Admin SDK (yang bernama
firebase-adminsdk
). - Pilih akun dan klik Edit principal. Halaman Akses edit akan muncul.
- Klik Add another role, lalu pilih Remote Config Viewer.
- Klik Add another role, lalu pilih AI platform developer.
- Klik Add another role, lalu pilih Vertex AI user.
- Klik Add another role, lalu pilih Cloud Run Invoker.
- Klik Save.
Selanjutnya, ekspor kredensial untuk akun layanan Admin SDK dan simpan
di variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS
Anda.
- Di Konsol Google Cloud, buka halaman Credentials.
- Klik akun layanan Admin SDK untuk membuka halaman Details.
- Klik Kunci.
- Klik Add key > Create new key.
- Pastikan JSON dipilih sebagai Key type, lalu klik Create.
- Download kunci ke tempat yang aman di komputer.
Dari terminal Anda, ekspor kunci sebagai variabel lingkungan:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-key.json"
Langkah 4: Buat fungsi
Pada langkah ini, Anda akan membuat fungsi yang menangani input pengguna dan menghasilkan respons yang didukung teknologi AI. Anda akan menggabungkan beberapa cuplikan kode untuk membangun fungsi komprehensif yang menginisialisasi Admin SDK dan Vertex AI Gemini API, mengonfigurasi parameter default menggunakan Remote Config, mengambil parameter Remote Config terbaru, memproses input pengguna, dan mengalirkan respons kembali ke pengguna.
- Di codebase Anda, buka
functions/index.js
di editor teks atau IDE. Hapus konten yang ada, lalu tambahkan Admin SDK, Remote Config, dan Vertex AI SDK. Kemudian, lakukan inisialisasi kepada aplikasi dengan menempelkan kode berikut ke dalam file:
const { onRequest } = require("firebase-functions/v2/https"); 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"); // Set and check environment variables. const project = process.env.GCLOUD_PROJECT; // Initialize Firebase. const app = initializeApp();
Konfigurasikan nilai default yang akan digunakan fungsi Anda jika tidak dapat terhubung ke server Remote Config. Solusi ini akan mengonfigurasi
textModel
,generationConfig
,safetySettings
,textPrompt
, danlocation
sebagai Parameter Remote Config yang sesuai dengan parameter Remote Config yang akan Anda konfigurasi lebih lanjut dalam panduan ini. Untuk mengetahui informasi selengkapnya tentang parameter ini, lihat Klien Node.js Vertex AI.Secara opsional, Anda juga dapat mengonfigurasi parameter untuk mengontrol apakah Anda mengakses Vertex AI Gemini API atau tidak (dalam contoh ini, parameter yang disebut
vertex_enabled
). Penyiapan ini dapat berguna saat menguji fungsi Anda. Dalam cuplikan kode berikut, nilai ini ditetapkan kefalse
, yang akan melewati penggunaan Vertex AI saat Anda menguji deployment fungsi dasar. Menyetelnya ketrue
akan memanggil Vertex AI Gemini API.// Define default (fallback) parameter values for Remote Config. const defaultConfig = { // Default values for Vertex AI. model_name: "gemini-1.5-flash-preview-0514", 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 };
Membuat fungsi dan menyiapkan Remote Config sisi server:
// 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;
Siapkan Vertex AI dan tambahkan logika chat dan respons:
// 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'); } });
Simpan dan tutup file tersebut.
Langkah 5: Buat template Remote Config khusus server
Selanjutnya, buat template Remote Config sisi server serta konfigurasikan parameter dan nilai untuk digunakan dalam fungsi Anda. Untuk membuat template Remote Config khusus server:
- Buka Firebase console, dan dari menu navigasi, luaskan Run, lalu pilih Remote Config.
Pilih Server dari pemilih Client/Server di bagian atas halaman Remote Config.
- Jika ini pertama kalinya Anda menggunakan template Remote Config atau server, klik Create Configuration. Panel Create your first server-side parameter akan muncul.
- Jika ini bukan pertama kalinya Anda menggunakan template server Remote Config, klik Add parameter.
Tentukan parameter Remote Config berikut:
Nama parameter Deskripsi Type Nilai default model_name
Nama model
Untuk daftar terbaru nama model yang akan digunakan dalam kode Anda, lihat Versi dan siklus proses model atau Nama model yang tersedia.String gemini-1.5-pro-preview-0514
prompt
Prompt untuk menambahkan permintaan pengguna. String 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
Parameter yang akan dikirim ke model. JSON [{"stopSequences": ["I hope this helps"],"temperature": 0.7,"maxOutputTokens": 512, "topP": 0.1,"topK": 20}]
safety_settings
Setelan keamanan untuk Vertex AI. JSON [{"category": "HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "HarmBlockThreshold.BLOCK_LOW_AND_ABOVE"}]
location
Lokasi untuk menjalankan layanan dan model Vertex AI. String us-central1
is_vertex_enabled
Parameter opsional yang mengontrol apakah kueri dikirim ke Vertex AI. Boolean true
Setelah selesai menambahkan parameter, periksa kembali parameter Anda dan pastikan jenis datanya sudah benar, lalu klik Publish changes.
Langkah 6: Deploy fungsi dan uji di Firebase Local Emulator Suite
Anda kini siap untuk men-deploy dan menguji fungsi secara lokal dengan Firebase Local Emulator Suite.
Pastikan Anda telah menetapkan
GOOGLE_APPLICATION_CREDENTIALS
sebagai variabel lingkungan seperti yang dijelaskan di Langkah 3: Konfigurasikan izin IAM untuk akun layanan Admin SDK dan simpan kunci Anda . Kemudian, dari direktori induk direktorifunctions
Anda, deploy fungsi ke emulator Firebase:firebase emulators:start --project PROJECT_ID --only functions
Buka halaman log emulator . Tindakan ini akan menunjukkan bahwa fungsi Anda telah dimuat.
Akses fungsi Anda dengan menjalankan perintah berikut, dengan PROJECT_ID adalah project ID Anda dan LOCATION adalah region tempat Anda men-deploy fungsi tersebut (misalnya,
us-central1
):curl http://localhost:5001/PROJECT_ID/LOCATION/generateWithVertex
Tunggu respons, lalu kembali ke halaman log Firebase Emulator atau konsol Anda dan periksa apakah terdapat error atau peringatan.
Coba kirimkan beberapa input pengguna, yang menandai bahwa karena
is_vertex_enabled
dikonfigurasi di template server Remote Config Anda, ini seharusnya mengakses Gemini melalui Vertex AI Gemini API dan mungkin dikenakan biaya:curl http://localhost:5001/PROJECT_ID/LOCATION/generateWithVertex?prompt=Tell%20me%20everything%20you%20know%20about%20cats
Buat perubahan pada template server Remote Config Anda di Firebase console, lalu akses ulang fungsi Anda untuk mengamati perubahan.
Langkah 7: Deploy fungsi Anda ke Google Cloud
Setelah menguji dan memverifikasi fungsi, Anda kini siap untuk men-deploy ke Google Cloud dan menguji fungsi langsung.
Men-deploy function
Deploy fungsi Anda menggunakan Firebase CLI:
firebase deploy --only functions
Memblokir akses yang tidak diautentikasi ke fungsi
Ketika fungsi di-deploy menggunakan Firebase, pemanggilan yang tidak diautentikasi diperbolehkan secara default jika kebijakan organisasi Anda tidak membatasinya. Selama pengujian dan sebelum mengamankan dengan App Check, sebaiknya blokir akses yang tidak diautentikasi.
Untuk memblokir akses yang tidak diautentikasi ke fungsi:
Di Konsol Google Cloud, buka Cloud Run.
Klik
generateWithVertex
, lalu klik tab Security.Aktifkan Require authentication, lalu klik Save.
Mengonfigurasi akun pengguna Anda untuk menggunakan kredensial akun layanan Admin SDK
Karena akun layanan Admin SDK memiliki semua peran dan izin yang dibutuhkan untuk menjalankan fungsi serta berinteraksi dengan Remote Config dan Vertex AI Gemini API, Anda dapat menggunakannya untuk menjalankan fungsi. Untuk melakukannya, Anda harus dapat membuat token untuk akun tersebut dari akun pengguna Anda.
Langkah-langkah berikut menjelaskan cara mengonfigurasi akun pengguna dan fungsi yang akan dijalankan dengan hak istimewa akun layanan Admin SDK.
- Di Konsol Google Cloud, aktifkan IAM Service Account Credentials API.
- Berikan peran Service Account Token Creator ke akun pengguna Anda: Dari Konsol Google Cloud, buka IAM & Admin > IAM, pilih akun pengguna Anda, lalu klik Edit principal > Add another role.
Pilih Service Account Token Creator, lalu klik Save.
Untuk mengetahui informasi selengkapnya tentang peniruan akun layanan, lihat Peniruan akun layanan dalam dokumentasi Google Cloud.
Buka halaman Cloud Functions Konsol Google Cloud, lalu klik fungsi generateWithVertex dalam daftar Functions.
Pilih Trigger > Edit dan luaskan Runtime, build, connections, and security settings.
Dari tab Runtime, ubah Runtime service account menjadi Admin SDK account.
Klik Next, lalu klik Deploy.
Menyiapkan gcloud CLI
Untuk menjalankan dan menguji fungsi dengan aman dari command line, Anda harus melakukan autentikasi dengan layanan Cloud Functions dan mendapatkan token otentikasi yang valid.
Untuk mengaktifkan pembuatan token, instal dan konfigurasikan gcloud CLI:
Jika belum terinstal di komputer Anda, instal gcloud CLI seperti yang dijelaskan dalam Menginstal gcloud CLI.
Dapatkan kredensial akses untuk akun Google Cloud Anda:
gcloud auth login
Tetapkan project ID Anda di gcloud:
gcloud config set project PROJECT_ID
Menguji fungsi
Anda kini siap menguji fungsi di Google Cloud. Untuk menguji fungsi, jalankan perintah berikut:
curl -X POST https://LOCATION-PROJECT_ID.cloudfunctions.net/generateWithVertex \
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json"
Coba lagi dengan data yang disediakan pengguna:
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"
Anda kini dapat membuat perubahan pada template server Remote Config, memublikasikan perubahan tersebut, dan menguji opsi yang berbeda.
Langkah berikutnya
- Firebase merekomendasikan penggunaan App Check untuk mengamankan Cloud Functions. Lihat Mengaktifkan penerapan App Check untuk Cloud Functions untuk mengetahui informasi lebih lanjut tentang cara mengamankan fungsi Anda dengan App Check
- Coba contoh fungsi callable dengan Remote Config sisi server dan App Check di Memanggil Vertex AI Gemini API dengan Remote Config dan App Check.
- Pelajari Cloud Functions for Firebase lebih lanjut.
- Pelajari lebih lanjut cara menggunakan Remote Config di lingkungan server.