Z tego przewodnika dowiesz się, jak zacząć korzystać z 2 generacji Cloud Functions z Remote Config po stronie serwera, aby zrobić to po stronie serwera połączenia do Vertex AI Gemini API.
W tym samouczku dodasz Remote Config do funkcji przypominającej czatbota, która używa modelu Gemini do odpowiadania na pytania użytkowników. Remote Config będzie zarządzać danymi wejściowymi Gemini API (w tym promptem, który będzie dodawany do przychodzących zapytań użytkowników). Możesz aktualizować te dane według potrzeb w konsoli Firebase. Użyjesz też Firebase Local Emulator Suite do testowania debugować funkcję, a potem, gdy upewnisz się, że działa, wdrożysz przetestuj ją na stronie Google Cloud.
Wymagania wstępne
W tym przewodniku zakładamy, że umiesz już używać JavaScriptu do programowania aplikacji.
Konfigurowanie projektu Firebase
Jeśli nie masz jeszcze projektu Firebase:
Zaloguj się w konsoli Firebase.
Kliknij Utwórz projekt, a potem wybierz jedną z tych opcji:
- Opcja 1. Utwórz nowy projekt Firebase (i jego bazowy projekt). Google Cloud projektu automatycznie), wpisując nazwę nowego projektu w pierwszy krok tworzenia projektu proces.
- Opcja 2. „Dodaj Firebase” w istniejącym projekcie Google Cloud przez wybierz nazwę projektu Google Cloud z menu w pierwszego kroku tworzenia projektu proces.
Gdy pojawi się odpowiedni komunikat, nie musisz konfigurować Google Analytics, aby korzystać i poznam nowe rozwiązanie.
Postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby utworzyć projekt.
Jeśli masz już projekt Firebase:
Przejdź do sekcji Konfigurowanie środowiska programistycznego.
Skonfiguruj środowisko programistyczne
Do pisania funkcji potrzebujesz środowiska Node.js. potrzebujesz interfejsu wiersza poleceń Firebase do wdrażania funkcji w: Cloud Functions w środowisku wykonawczym.
-
Do instalowania Node.js i npm zalecamy użycie Menedżer wersji węzłów.
Zainstaluj interfejs wiersza poleceń Firebase za pomocą preferowanej metody. Aby na przykład zainstalować interfejs wiersza poleceń przy użyciu npm, uruchom to polecenie:
npm install -g firebase-tools@latest
To polecenie instaluje dostępne na całym świecie polecenie
firebase
. Jeśli ta komenda się nie powiedzie, konieczna może być zmiana uprawnień npm.Aby zaktualizować aplikację
firebase-tools
do najnowszej wersji, ponownie uruchom to samo polecenie.Zainstaluj
firebase-functions
ifirebase-admin
, a potem użyj aplikacji--save
, by zaoszczędzić je na urządzeniepackage.json
:npm install firebase-functions@latest firebase-admin@latest --save
Możesz teraz przejść do implementacji tego rozwiązanie.
Implementacja
Aby utworzyć, przetestować i wdrażać model Cloud Functions 2 generacji z użyciem Remote Config i Vertex AI, wykonaj te czynności:
- Włącz zalecane interfejsy API Vertex AI w konsoli Google Cloud.
- Zainicjuj projekt i zainstaluj zależności węzłów.
- Skonfiguruj uprawnienia konta usługi Admin SDK oraz zapisz klucz.
- Utwórz funkcję.
- Utwórz szablon Remote Config dla konkretnego serwera.
- Wdróż funkcję i przetestuj ją Firebase Local Emulator Suite
- Wdróż funkcję do usługi Google Cloud.
Krok 1. Włącz zalecane interfejsy API w konsoli Google Cloud
- Otwórz konsolę Google Cloud i po wyświetleniu odpowiedniego komunikatu wybierz swój projekt.
- W polu Szukaj u góry konsoli wpisz Vertex AI i zaczekaj, aż Vertex AI pojawi się w wynikach.
- Kliknij Vertex AI. Pojawi się panel Vertex AI.
Kliknij Włącz wszystkie zalecane interfejsy API.
Włączenie interfejsu API może potrwać kilka minut. Zachowaj stronę aktywny i otwarty do momentu zakończenia procesu włączania.
Jeśli płatności nie są włączone, pojawi się prośba o dodanie lub połączenie konta Cloud Billing. Po włączeniu konta rozliczeniowego wróć do Vertex AI i sprawdź, czy wszystkie zalecane interfejsy API są włączone.
Krok 2. Zainicjuj projekt i zainstaluj zależności węzłów
- Otwórz terminal na komputerze i przejdź do katalogu, w którym i zaplanuj utworzenie funkcji.
Zaloguj się w Firebase:
firebase login
Uruchom to polecenie, aby zainicjować Cloud Functions for Firebase:
firebase init functions
Kliknij Użyj istniejącego projektu i podaj identyfikator projektu.
Gdy pojawi się prośba o wybranie języka, wybierz JavaScript i naciśnij Wejdź.
W przypadku pozostałych opcji wybierz wartości domyślne.
W bieżącym katalogu zostanie utworzony katalog
functions
. Znajdziesz w nim plikindex.js
, który posłuży Ci do skompilowania funkcji, katalognode_modules
zawierający zależności funkcji oraz plikpackage.json
z zależностями pakietu.Dodaj pakiety Admin SDK i Vertex AI, wykonując te polecenia za pomocą
--save
, aby mieć pewność, że plikpackage.json
zostanie zapisany:cd functions npm install firebase-admin@latest @google-cloud/vertexai --save
Twój plik functions/package.json
powinien teraz wyglądać tak, jak pokazano poniżej, z rozszerzeniem
określone najnowsze wersje:
{
"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
}
Jeśli używasz języka ESLint, zobaczysz strofę z nim. W
również upewnij się, że wersja silnika węzłów jest zgodna z wersją zainstalowaną
środowiska Node.js oraz wersji,
w której działasz (Google Cloud). Na przykład, jeśli
część engines
w package.json
jest skonfigurowana jako Node w wersji 18,
używasz Node.js 20, zaktualizuj plik do 20:
"engines": {
"node": "20"
},
Krok 3. Skonfiguruj uprawnienia konta usługi Admin SDK i zapisz klucz
W tym rozwiązaniu do uruchamiania użyjesz konta usługi Firebase Admin SDK funkcji.
- W konsoli Google Cloud otwórz stronę Administracja i znajdź konto usługi Admin SDK o nazwie
firebase-adminsdk
. - Wybierz konto i kliknij Edytuj osobę główną. Pojawi się strona Edytuj uprawnienia.
- Kliknij Dodaj kolejną rolę i wybierz Przeglądający Remote Config.
- Kliknij Dodaj kolejną rolę i wybierz Deweloper platformy AI.
- Kliknij Dodaj kolejną rolę i wybierz Vertex AI użytkownik.
- Kliknij Dodaj kolejną rolę i wybierz Wywołujący Cloud Run.
- Kliknij Zapisz.
Następnie wyeksportuj i zapisz dane logowania konta usługi Admin SDK
w zmiennej środowiskowej GOOGLE_APPLICATION_CREDENTIALS
.
- W konsoli Google Cloud otwórz stronę Dane logowania.
- Kliknij konto usługi Admin SDK, aby otworzyć stronę Szczegóły.
- Kliknij Klucze.
- Kliknij Dodaj klucz > Utwórz nowy klucz.
- Upewnij się, że w polu Typ klucza wybrana jest opcja JSON, a następnie kliknij Utwórz.
- Pobierz klucz w bezpieczne miejsce na komputerze.
W terminalu wyeksportuj klucz jako zmienną środowiskową:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-key.json"
Krok 4. Utwórz funkcję
W tym kroku utworzysz funkcję, która obsługuje dane wejściowe użytkownika i generuje Odpowiedzi oparte na AI. Po połączeniu kilku fragmentów kodu utworzysz kompleksowa funkcja inicjująca Admin SDK i Vertex AI Gemini API, konfiguruje parametry domyślne za pomocą Remote Config, pobiera najnowsze parametry Remote Config, procesy i przesyła odpowiedź do użytkownika.
- W kodzie otwórz plik
functions/index.js
w edytorze tekstu lub środowisku IDE. Usuń istniejące treści, a następnie dodaj pakiety SDK Admin SDK, Remote Config i Vertex AI oraz zainicjuj aplikację, wklejając w pliku ten kod:
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();
Skonfiguruj wartości domyślne, których funkcja będzie używać, jeśli nie uda jej się połączyć z serwerem Remote Config. To rozwiązanie konfiguruje parametry
textModel
,generationConfig
,safetySettings
,textPrompt
ilocation
jako parametry Remote Config odpowiadające parametrom Remote Config, które skonfigurujesz w dalszej części tego przewodnika. Więcej informacji o tych parametrach znajdziesz w artykule Biblioteka klienta Vertex AI w Node.js.Opcjonalnie możesz też skonfigurować parametr, który steruje dostępem do Vertex AI Gemini API (w tym przykładzie parametr o nazwie
vertex_enabled
). Ta konfiguracja może być przydatna podczas testowania funkcji. W tych fragmentach kodu ta wartość jest ustawiona nafalse
, co spowoduje pominięcie użycia funkcji Vertex AI podczas testowania podstawowego wdrażania funkcji. Ustawiam na Funkcjatrue
wywoła metodę 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 };
Utwórz funkcję i skonfiguruj ją po stronie serwera 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;
Skonfiguruj Vertex AI i dodaj logikę czatu i odpowiedzi:
// 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'); } });
Zapisz i zamknij plik.
Krok 5. Utwórz szablon Remote Config dla konkretnego serwera
Następnie utwórz szablon Remote Config po stronie serwera i skonfiguruj parametry oraz wartości, których chcesz używać w funkcji. Aby utworzyć szablon Remote Configdla konkretnego serwera:
- Otwórz konsolę Firebase i w menu nawigacyjnym rozwiń konsolę Uruchom i wybierz Remote Config
W selektorze Klient/serwer u góry okna przeglądarki wybierz Serwer Remote Config.
- Jeśli po raz pierwszy używasz szablonów Remote Config lub serwerów, kliknij Utwórz konfigurację. Pojawi się panel Tworzenie pierwszego parametru po stronie serwera.
- Jeśli nie korzystasz z szablonów serwera Remote Config po raz pierwszy, kliknij Dodaj parametr.
Określ te parametry (Remote Config):
Nazwa parametru Opis Typ Wartość domyślna model_name
Nazwa modelu
Aktualne listy nazw modeli do użycia w kodzie znajdziesz w artykule Wersje i cykle życia modeli lub Dostępne nazwy modeli.Ciąg znaków gemini-1.5-pro-preview-0514
prompt
Prośba do dodania na początku zapytania użytkownika. Ciąg znaków 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
Parametry do przesłania do modelu. JSON [{"stopSequences": ["I hope this helps"],"temperature": 0.7,"maxOutputTokens": 512, "topP": 0.1,"topK": 20}]
safety_settings
Bezpieczeństwo ustawienia usługi Vertex AI. JSON [{"category": "HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "HarmBlockThreshold.BLOCK_LOW_AND_ABOVE"}]
location
Lokalizacja aby uruchomić usługę i model Vertex AI. Ciąg znaków us-central1
is_vertex_enabled
Opcjonalny parametr określający, czy zapytania są wysyłane do adresu Vertex AI. Wartość logiczna true
Po dodaniu parametrów sprawdź je dokładnie, sprawdź, czy typy danych są prawidłowe, a potem kliknij Opublikuj zmiany.
Krok 6. Wdróż funkcję i przetestuj ją w Firebase Local Emulator Suite
Teraz możesz wdrożyć i przetestować funkcję lokalnie za pomocą funkcji Firebase Local Emulator Suite.
Upewnij się, że zmienna środowiskowa
GOOGLE_APPLICATION_CREDENTIALS
jest ustawiona zgodnie z opisem w kroku 3: skonfiguruj uprawnienia IAM dla konta usługi Admin SDK i zapisz klucz. Następnie z poziomu katalog nadrzędny Twojego katalogufunctions
, wdróż swoją funkcję w Emulator Firebase:firebase emulators:start --project PROJECT_ID --only functions
Otwórz logi emulatora . Powinno to pokazać, że funkcja została wczytana.
Uzyskaj dostęp do funkcji, uruchamiając następujące polecenie, gdzie: PROJECT_ID to identyfikator projektu i LOCATION to region, który został wdrożony funkcję do (na przykład
us-central1
):curl http://localhost:5001/PROJECT_ID/LOCATION/generateWithVertex
Poczekaj na odpowiedź, a potem wróć na stronę z dziennikami emulatora Firebase lub konsoli i sprawdź, czy są jakieś błędy lub ostrzeżenia.
Spróbuj wysłać dane wejściowe użytkownika, zwracając uwagę, że ponieważ
is_vertex_enabled
to skonfigurowany w szablonie serwera Remote Config, powinien on uzyskać dostęp Gemini przez Vertex AI Gemini API i że może to spowodować wiąże się z opłatami:curl http://localhost:5001/PROJECT_ID/LOCATION/generateWithVertex?prompt=Tell%20me%20everything%20you%20know%20about%20cats
Wprowadź zmiany w szablonie serwera Remote Config w konsoli Firebase, a potem ponownie otwórz funkcję, aby sprawdzić zmiany.
Krok 7. Wdróż funkcję w Google Cloud
Po przetestowaniu i zweryfikowaniu funkcji możesz zacząć ją wdrażać Google Cloud i przetestuj aktywną funkcję.
Wdrażanie funkcji
Wdróż funkcję za pomocą interfejsu wiersza poleceń Firebase:
firebase deploy --only functions
Blokuj nieuwierzytelniony dostęp do funkcji
Gdy funkcje są wdrażane za pomocą Firebase, wywołania bez uwierzytelniania są domyślnie dozwolone, o ile nie są ograniczone przez zasady organizacji. Podczas testów i przed zabezpieczeniem App Check zalecamy blokowanie nieuwierzytelnionego dostępu.
Aby zablokować nieuwierzytelniony dostęp do funkcji:
W konsoli Google Cloud otwórz Cloud Run.
Kliknij kolejno
generateWithVertex
i kartę Bezpieczeństwo.Włącz Wymagaj uwierzytelniania i kliknij Zapisz.
Skonfiguruj swoje konto użytkownika tak, aby używało danych logowania do konta usługi Admin SDK
Ponieważ konto usługi Admin SDK ma wszystkie niezbędne role i uprawnień do uruchamiania funkcji i wchodzenia w interakcję z obiektami Remote Config oraz Vertex AI Gemini API, użyj go do uruchomienia funkcji. Do zrobienia musisz mieć możliwość tworzenia tokenów dla konta z poziomu swojego konta użytkownika.
Poniższe kroki opisują, jak skonfigurować konto użytkownika i funkcję aby działać z uprawnieniami konta usługi Admin SDK.
- W konsoli Google Cloud włącz IAM Service Account Credentials API.
- Przypisz do konta użytkownika rolę Twórca tokena konta usługi: w konsoli Google Cloud otwórz Administracja > Uprawnienia, wybierz konto użytkownika i kliknij Edytuj podmiot > Dodaj kolejną rolę.
Wybierz Service Account Token Creator (Twórca tokenów konta usługi), a następnie kliknij Zapisz.
Więcej informacji o przejmowaniu tożsamości konta usługi znajdziesz w dokumentacji Google Cloud (w języku angielskim) w sekcji Przejmowanie tożsamości konta usługi.
Otwórz stronę konsoli Google CloudCloud Functions i kliknij funkcję generateWithVertex na liście Funkcje.
Kliknij Reguła > Edytuj i rozwiń sekcję Ustawienia środowiska wykonawczego, kompilacji, połączeń i zabezpieczeń.
Na karcie Środowisko wykonawcze zmień konto usługi środowiska wykonawczego na konto pakietu Admin SDK.
Kliknij kolejno Dalej i Wdróż.
Konfigurowanie interfejsu wiersza poleceń gcloud
Aby bezpiecznie uruchomić i przetestować funkcję z poziomu wiersza poleceń, musisz wykonać te czynności: uwierzytelnić w usłudze Cloud Functions i uzyskać prawidłowy token uwierzytelniania.
Aby włączyć generowanie tokenów, zainstaluj i skonfiguruj interfejs wiersza poleceń gcloud:
Jeśli interfejs wiersza poleceń gcloud nie jest jeszcze zainstalowany na komputerze, zainstaluj go zgodnie z instrukcjami w artykule Instalowanie interfejsu wiersza poleceń gcloud.
Aby uzyskać dane logowania do konta Google Cloud:
gcloud auth login
Ustaw identyfikator projektu w gcloud:
gcloud config set project PROJECT_ID
Testowanie funkcji
Możesz teraz przetestować funkcję w Google Cloud. Aby przetestować tę funkcję, uruchom następujące polecenie:
curl -X POST https://LOCATION-PROJECT_ID.cloudfunctions.net/generateWithVertex \
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json"
Spróbuj ponownie, podając dane przesłane przez użytkownika:
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"
Możesz teraz wprowadzić zmiany w szablonie serwera Remote Config, opublikować tych zmian i testować różne opcje.
Dalsze kroki
- Firebase zaleca używanie App Check do zabezpieczenia Cloud Functions. Aby dowiedzieć się więcej o zabezpieczaniu funkcji za pomocą funkcji App Check, przeczytaj artykuł Włączanie egzekwowania zasad App Check w Cloud Functions.
- Wypróbuj przykładową funkcję wywołującą po stronie serwera Remote Config i App Check w Wywołaniu funkcji Vertex AI Gemini API z użyciem funkcji Remote Config i App Check.
- Dowiedz się więcej o Cloud Functions dla Firebase.
- Więcej informacji o używaniu Remote Config na serwerze