Este guia descreve como começar a usar a 2ª geração Cloud Functions com Remote Config do lado do servidor para fazer chamadas para o Vertex AI Gemini API.
Neste tutorial, você vai adicionar Remote Config a uma função semelhante a um chatbot que usa um modelo Gemini para responder às perguntas dos usuários. A Remote Config vai gerenciar as entradas da Gemini API (incluindo um comando anexado às consultas recebidas do usuário), e você pode atualizar essas entradas sob demanda no console Firebase. Você também vai usar o Firebase Local Emulator Suite para testar e depurar a função e, depois de verificar se ela funciona, você vai implantar e testá-lo em Google Cloud.
Pré-requisitos
Neste guia, pressupomos que você já sabe usar o JavaScript para desenvolver aplicativos.
Configurar um projeto do Firebase
Se você ainda não tiver um projeto do Firebase:
Faça login no console do Firebase.
Clique em Criar projeto e use uma das seguintes opções:
- Opção 1: crie um novo projeto do Firebase (que vai ser um projeto do Google Cloud automaticamente) ao inserir um novo nome na primeira etapa do fluxo de trabalho "Criar projeto".
- Opção 2: "Adicionar o Firebase" a um projeto Google Cloud existente selecionando o nome do projeto Google Cloud no menu suspenso da primeira etapa do fluxo de trabalho "Criar projeto".
Quando solicitado, você não vai precisar configurar o Google Analytics para usar essa solução.
Continue seguindo as instruções na tela para criar o projeto.
Se você já tiver um projeto do Firebase:
Prossiga para Configurar o ambiente de desenvolvimento.
Configurar seu ambiente de desenvolvimento
Você vai precisar de um ambiente do Node.js para criar funções e da CLI Firebase para implantar funções no ambiente de execução do Cloud Functions.
-
Para instalar o Node.js e npm, recomendamos o uso do Gerenciador de versões de nós:
Instale a CLI do Firebase usando seu método preferido. Por exemplo, para instalar a CLI usando npm, execute este comando:
npm install -g firebase-tools@latestEssa ação instala o comando
firebase, disponível globalmente. Se o comando falhar, talvez seja necessário alterar as permissões do NPM.Para atualizar para a versão mais recente, de
firebase-toolsexecute novamente o mesmo comando.Instale
firebase-functionsefirebase-admine use--savepara salvar nopackage.json:npm install firebase-functions@latest firebase-admin@latest --save
Agora está tudo pronto para prosseguir para a implementação da solução.
Implementação
Siga estas etapas para criar, testar e implantar a 2ª geração Cloud Functions com Remote Config e Vertex AI:
- Ative as APIs recomendadas da Vertex AI no console Google Cloud.
- Inicialize seu projeto e instale as dependências do Node.
- Configure as permissões do IAM para sua conta de serviço Admin SDK e salve a chave.
- Crie a função.
- Crie um modelo de Remote Config específico do servidor.
- Implante sua função e teste-a no Firebase Local Emulator Suite.
- Implante a função no Google Cloud.
Etapa 1: ativar as APIs recomendadas do Vertex AI no console do Google Cloud
- Abra o console do Google Cloud e, quando solicitado, selecione o projeto.
- No campo Pesquisar na parte de cima do console, digite Vertex AI e aguarde a exibição de Vertex AI como resultado.
- Selecione Vertex AI. O painel Vertex AI será exibido.
Selecione Ativar todas as APIs recomendadas.
A ativação da API pode levar alguns instantes para ser concluída. Mantenha a página ativa e aberta até que a ativação seja concluída.
Se o faturamento não estiver ativado, vamos pedir para você adicionar ou vincular um Cloud Billing. Depois de ativar uma conta de faturamento, volte para Vertex AI e verifique se todas as APIs recomendadas estão ativadas.
Etapa 2: inicializar o projeto e instalar dependências do nó
- Abra um terminal no computador e acesse o diretório em que você planeja criar a função.
Faça login no Firebase:
firebase loginExecute o seguinte comando para inicializar Cloud Functions for Firebase:
firebase init functionsSelecione Usar um projeto existente e especifique o ID do projeto.
Quando for necessário selecionar a linguagem a ser usada, escolha JavaScript e pressione Enter.
Para todas as outras opções, selecione os padrões.
Um diretório
functionsserá criado no diretório atual. Nele, você encontra um arquivoindex.jsque vai usar para criar sua função, um diretórionode_modulesque contém as dependências da sua função e um arquivopackage.jsonque contém as dependências do pacote.Adicione os pacotes Admin SDK e Vertex AI executando os comandos a seguir, usando
--savepara garantir que fique salvo no seu arquivopackage.json:cd functions npm install firebase-admin@latest @google-cloud/vertexai --save
O arquivo functions/package.json ficará como o exemplo a seguir, com as
versões mais recentes especificadas:
{
"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
}
Se estiver usando o ESLint, você verá uma estrofe que o inclui. Verifique também se a versão do mecanismo do nó corresponde à versão instalada
do Node.js e à versão que será executada no Google Cloud. Por exemplo, se
a estrofe engines em package.json está configurada como Node versão 18 e
se você estiver usando o Node.js 20, atualize o arquivo para usar a versão 20:
"engines": {
"node": "20"
},
Etapa 3: configurar as permissões do IAM para a conta de serviço Admin SDK e salvar a chave
Nesta solução, você vai usar a conta de serviço Admin SDK do Firebase para executar sua função.
- No console do Google Cloud, abra o
IAM e página "Administrador"
e localize a conta de serviço Admin SDK (chamada
firebase-adminsdk). - Selecione a conta e clique em Editar principal. A página de acesso para editar será exibida.
- Clique em Adicionar outro papel e selecione Remote Config Leitor.
- Clique em Adicionar outro papel e selecione Desenvolvedor da AI Platform.
- Clique em Adicionar outro papel e selecione Usuário Vertex AI.
- Clique em Adicionar outro papel e selecione Invocador do Cloud Run.
- Clique em Salvar.
Em seguida, exporte as credenciais da conta de serviço Admin SDK e salve-as
na variável de ambiente GOOGLE_APPLICATION_CREDENTIALS.
- No console do Google Cloud, abra a página Credenciais.
- Clique na conta de serviço do Admin SDK para abrir a página Detalhes.
- Clique em Chaves.
- Selecione Adicionar chave > Criar nova chave.
- Verifique se JSON está selecionado como o Tipo de chave e clique em Criar.
- Faça o download da chave em um local seguro no seu computador.
No seu terminal, exporte a chave como uma variável de ambiente:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-key.json"
Etapa 4: criar a função
Nesta etapa, você vai criar uma função que processa a entrada do usuário e gera respostas com tecnologia de IA. Você vai combinar vários snippets de código para criar uma função abrangente que inicializa o Admin SDK e Vertex AI Gemini API, configura parâmetros padrão usando Remote Config, busca os parâmetros Remote Config mais recentes, processos entrada do usuário e transmite uma resposta de volta ao usuário.
- Na base de código, abra
functions/index.jsem um editor de texto ou ambiente de desenvolvimento integrado. Exclua o conteúdo e adicione o SDK Admin SDK, Remote Config e Vertex AI e inicialize o app colando o seguinte código no arquivo:
const { onRequest } = require("firebase-functions/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();Configure os valores padrão que a função usará se não for possível se conectar a ela no servidor Remote Config. Esta solução configura
textModel,generationConfig,safetySettings,textPromptelocationcomo parâmetros Remote Config que correspondem a parâmetros Remote Config que serão configurados posteriormente neste guia. Para mais informações sobre esses parâmetros, consulte Cliente Node.js da Vertex AITambém é possível configurar um parâmetro para controlar se você acessa ou não o Vertex AI Gemini API. Neste exemplo, um parâmetro chamado
vertex_enabled). Essa configuração pode ser útil ao testar sua função. Nos snippets de código abaixo, esse valor é definido comofalse, que será ignorado usando Vertex AI enquanto você testa a implantação da função básica. Definindo comotruevai invocar a 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-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 };Criar a função e configurar Remote Config do lado do servidor:
// 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;Configure Vertex AI e adicione a lógica de chat e resposta:
// 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'); } });Salve e feche o arquivo.
Etapa 5: criar um modelo Remote Config específico do servidor
Em seguida, crie um modelo Remote Config do lado do servidor e configure os parâmetros e valores para usar na função. Para criar um modelo Remote Config específico de servidor:
- Abra o console Firebase e, no menu de navegação, abra Run e selecione Remote Config.
Selecione Servidor no seletor Cliente/Servidor na parte de cima da Remote Config.
- Se esta é a primeira vez que você usa Remote Config ou modelos de servidor, clique em Criar configuração. O painel Criar seu primeiro parâmetro do lado do servidor será exibido.
- Se esta não for a primeira vez que você usa modelos de servidor Remote Config, clique em Adicionar parâmetro.
Defina os seguintes parâmetros Remote Config:
Nome do parâmetro Descrição Tipo Valor padrão model_nameNome do modelo
Para acessar listas atualizadas de nomes de modelos e usar no seu código, acesse Versões e ciclos de vida do modelo ou Nomes de modelos disponíveis.String gemini-2.0-flashpromptComando para adição ao início da consulta do usuário. 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_configParâmetros para enviar ao modelo. JSON [{"stopSequences": ["I hope this helps"],"temperature": 0.7,"maxOutputTokens": 512, "topP": 0.1,"topK": 20}]safety_settingsConfigurações de segurança para Vertex AI. JSON [{"category": "HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "HarmBlockThreshold.BLOCK_LOW_AND_ABOVE"}]locationLocal para executar o serviço e o modelo Vertex AI. String us-central1is_vertex_enabledParâmetro opcional que controla se as consultas são enviadas para Vertex AI. Booleano trueQuando terminar de adicionar parâmetros, verifique seus parâmetros e se os tipos de dados estão corretos e clique em Publicar alterações.
Etapa 6: implantar a função e testá-la no Firebase Local Emulator Suite
Agora está tudo pronto para implantar e testar a função localmente com o Firebase Local Emulator Suite.
Verifique se você definiu
GOOGLE_APPLICATION_CREDENTIALScomo uma variável de ambiente conforme descrito na Etapa 3: configurar as permissões do IAM para a conta de serviço do Admin SDK e salvar a chave. Então, no diretório pai do diretóriofunctions, implante a função no emulador do Firebase:firebase emulators:start --project PROJECT_ID --only functionsAbra a página de registros do emulador. Isso vai mostrar que a função foi carregada.
Acesse a função executando o seguinte comando, em que PROJECT_ID é o ID do projeto e LOCATION é a região em que você implantou a função (por exemplo,
us-central1):curl http://localhost:5001/PROJECT_ID/LOCATION/generateWithVertexAguarde uma resposta e retorne à página de registros do emulador do Firebase ou ao seu console e verifique se há erros ou avisos.
Tente enviar alguma entrada do usuário, observando que, como
is_vertex_enabledestá configurado no modelo de servidor Remote Config, ele acessa o modelo Gemini pelo Vertex AI Gemini API e que isso pode gerar cobranças:curl http://localhost:5001/PROJECT_ID/LOCATION/generateWithVertex?prompt=Tell%20me%20everything%20you%20know%20about%20catsFaça alterações no modelo de servidor Remote Config no console Firebase e acesse novamente a função para observar as alterações.
Etapa 7: implantar a função no Google Cloud
Depois de testar e verificar a função, estará tudo pronto para implantar no Google Cloud e testar a função ativa.
Implantar a função
Implante a função usando a CLI do Firebase:
firebase deploy --only functions
Bloquear o acesso não autenticado à função
Quando as funções são implantadas com o Firebase, as invocações não autenticadas são permitidas por padrão, caso a política da organização não restrinja esse processo. Durante os testes e antes de proteger com o App Check, recomendamos bloquear o acesso não autenticado.
Para bloquear o acesso não autenticado à função:
No console do Google Cloud, abra o Cloud Run:
Clique em
generateWithVertexe, em seguida, na guia Segurança.Ative a Autenticação necessária e clique em Salvar.
Configure sua conta de usuário para usar as credenciais da conta de serviço Admin SDK
Como a conta de serviço Admin SDK tem todos os papéis e permissões necessários para executar a função e interagir com o Remote Config e o Vertex AI Gemini API, use-a para executar a função. Para isso, você precisa criar tokens para a conta usando sua conta de usuário.
As etapas a seguir descrevem como configurar sua conta de usuário e a função para execução com os privilégios da conta de serviço do Admin SDK.
- No console do Google Cloud, ative a API Service Account Credentials do IAM.
- Atribua o papel de Criador de token da conta de serviço à sua conta de usuário: no console do Google Cloud, abra IAM & Admin > IAM, selecione a conta de usuário e, em seguida, clique em Editar principal > Adicionar outro papel.
Selecione Criador de token de conta de serviço e clique em Salvar.
Para informações mais detalhadas sobre a representação de uma conta de serviço, consulte Identidade temporária de conta de serviço na documentação do Google Cloud.
Abra a página Cloud Functions do console do Google Cloud e clique na função generateWithVertex na lista generateWithVertex.
Selecione Acionador > Editar e abra Ambiente de execução, build, conexões e configurações de segurança.
Na guia Ambiente de execução, mude a conta de serviço do ambiente de execução para a conta do SDK Admin.
Clique em Próxima e em Implantar.
Configurar a CLI gcloud
Para executar e testar a função com segurança na linha de comando, é necessário se autenticar no serviço do Cloud Functions e conseguir um token de autenticação válido.
Para ativar a geração de tokens, instale e configure a gcloud CLI.
Se ainda não estiver instalada em seu computador, instale a gcloud CLI como descrito em Instalar a gcloud CLI.
Receba credenciais de acesso para sua conta do Google Cloud:
gcloud auth loginDefina o ID do projeto na gcloud:
gcloud config set project PROJECT_ID
Testar a função
Agora está tudo pronto para testar a função em Google Cloud. Para testar a função, execute o seguinte comando:
curl -X POST https://LOCATION-PROJECT_ID.cloudfunctions.net/generateWithVertex \
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json"
Tente novamente com dados fornecidos pelo usuário:
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"
Agora você pode fazer mudanças no seu modelo de servidor do Remote Config, publicar essas mudanças e testar opções diferentes.
Próximas etapas
- O Firebase recomenda usar App Check para proteger Cloud Functions. Consulte Ativar a aplicação do App Check para Cloud Functions para mais informações sobre como proteger sua função com App Check
- Teste uma função chamável de exemplo com Remote Config e App Check do lado do servidor em Chamar o Vertex AI Gemini API com Remote Config e App Check.
- Saiba mais sobre o Cloud Functions para o Firebase.
- Saiba como usar Remote Config em ambientes de servidor.