Firebase Remote Config 现在支持使用 Firebase Admin Node.js SDK v12.1.0+ 进行服务器端配置。借助这项新功能,您可以使用 Remote Config 动态管理服务器端应用的行为和配置。这包括 Cloud Functions 等无服务器实现。
Firebase 客户端 SDK 从 Remote Config 模板派生客户端特定配置,而服务器端 Remote Config SDK 从 Firebase 下载完整 Remote Config 模板。然后,您的服务器可以对每个传入请求评估该模板,并使用自己的逻辑提供具有极短延迟时间的自定义响应。
借助服务器端 Remote Config,您可以:
- 为在您的服务器上运行的应用或通过其访问的应用定义配置参数,从而支持远程配置 AI 模型参数和提示等使用场景,以及确保 API 密钥的安全。
- 动态调整参数以响应环境变化或其他应用变化,例如更新 LLM 参数和模型端点。
- 通过远程更新您的服务器调用的 API 来控制费用。
- 为访问服务器的客户端即时生成自定义配置。
您可以在 Cloud Run、Cloud Functions 或自托管的服务器环境中部署服务器端 Remote Config。
准备工作
按照将 Firebase Admin SDK 添加到您的服务器中的说明,创建一个 Firebase 项目、设置服务帐号,然后将 Firebase Admin Node.js SDK 添加到您的服务器。
第 1 步:初始化 Firebase Admin Node.js SDK 并授权 API 请求
如果您在初始化 Admin SDK 时未使用任何参数,该 SDK 会使用 Google 应用默认凭据并从 GOOGLE_APPLICATION_CREDENTIALS
环境变量中读取选项。例如,如需初始化 SDK 并添加 Remote Config,请使用以下命令:
import { initializeApp } from "firebase-admin/app";
import { getRemoteConfig } from "firebase-admin/remote-config";
// Initialize Firebase
const firebaseApp = initializeApp();
第 2 步:确定服务器应用的默认参数值
确定要在应用中使用 Remote Config 动态更新的变量。然后,考虑应用中必须默认设置哪些变量,以及它们的默认值应该是多少。这样可确保即使应用与 Remote Config 后端服务器的连接中断,应用也能成功运行。
例如,如果您要编写一个管理生成式 AI 函数的服务器应用,可以设置默认模型名称、提示序言和生成式 AI 配置,如下所示:
参数名称 | 说明 | 类型 | 默认值 |
---|---|---|---|
model_name |
模型 API 名称 | 字符串 | gemini-1.5-pro |
preamble_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! |
generation_config
|
要发送到模型的参数 | JSON | {"stopSequences":
["I hope this
helps"],
"temperature":
0.7,
"maxOutputTokens":
512, "topP": 0.1,
"topK": 20} |
第 3 步:配置服务器应用
确定要用于 Remote Config 的参数后,配置应用以设置默认值,提取特定于服务器的 Remote Config 模板,并使用该模板的值。以下步骤介绍了如何配置 Node.js 应用。
访问并加载模板。
// Initialize server-side Remote Config const rc = getRemoteConfig(firebaseApp); const template = rc.initServerTemplate(); // Load Remote Config await template.load();
如果您在 Cloud Functions 中使用 Node.js,则可以使用异步
getServerTemplate
通过一个步骤来获取和加载模板:// Initialize server-side Remote Config const rc = getRemoteConfig(firebaseApp); const template = await rc.getServerTemplate();
为确保应用在与 Remote Config 后端服务器的连接中断时也能成功运行,请为每个参数添加默认值。为此,请在
initServerTemplate
或getServerTemplate
模板函数内添加一个defaultConfig
:const template = rc.initServerTemplate({ defaultConfig: { model_name: "gemini-pro", generation_config: '{"stopSequences": [], "temperature": 0.7, "maxOutputTokens": 512, "topP": 0.1, "topK": 20}', preamble_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!" }, }); // Load Remote Config await template.load();
模板加载后,使用
template.evaluate()
从模板导入参数和值:// Add template parameters to config const config = template.evaluate();
(可选)如果您在 Remote Config 模板中设置百分比条件,请定义并提供在
template.evaluate()
函数中用于评估条件的randomizationId
。例如,您可以将 Firebase 安装 ID 设置为
randomizationId
,也可将它设置为用户 ID,以确保将与您的服务器联系的每个用户都添加到正确的随机分组中。以下示例是一个基本示例,但您可以将服务器配置为针对不同的客户端请求生成不同的randomizationIds
,以确保根据用户在百分比条件组中的成员资格,从 Remote Config 向其提供一致的值。如需详细了解百分比条件,请参阅用户(随机百分比)。
// Set the randomizationId const randomizationId = "2ac93c28-c459-4760-963d-a3974ec26c04" // Add template parameters to `config`. Evaluates the // template and returns the parameter value assigned to // the group assigned to the {randomizationId}. const config = template.evaluate({ randomizationId });
接下来,从配置常量中提取所需的参数值。使用
getters
将 Remote Config 中的值转换为预期格式。系统支持以下类型:- 布尔值:
getBoolean
- 对象:
getValue
- 项目编号:
getNumber
- 字符串:
getString
例如,如果您正在在服务器上实现 Vertex AI,并且想要更改模型和模型参数,则可能需要配置
model_name
和generationConfig
的参数。以下示例说明了如何访问 Remote Config 的值:// Replace defaults with values from Remote Config. const generationConfig = JSON.parse( config.getString('generation_config')); const is_ai_enabled = config.getBool('is_ai_enabled'); const model = config.getString('model_name'); // Generates a prompt comprised of the Remote Config // parameter and prepends it to the user prompt const prompt = `${config.getString('preamble_prompt')} ${req.query.prompt}`;
- 布尔值:
如果您的服务器长时间运行,而不是无服务器环境,请使用
setInterval
定期重新加载模板,以确保您定期从 Remote Config 服务器提取最新的模板。
第 4 步:在 Remote Config 中设置特定于服务器的参数值
接下来,创建服务器 Remote Config 模板,并配置要在您的应用中使用的参数和值。
如需创建特定于服务器的 Remote Config 模板,请执行以下操作:
- 打开 Firebase 控制台 Remote Config 参数页面,然后从客户端/服务器选择器中选择服务器。
- 使用与您在应用中定义的参数相同的名称和数据类型定义 Remote Config 参数,并提供值。当您提取和评估模板并将这些值分配给变量时,这些值将替换您在配置服务器应用中设置的
defaultConfig
。 - (可选)设置百分比条件,以将某个值永久应用于实例的随机样本。如需详细了解百分比条件,请参阅用户(随机百分比)。
- 添加完参数后,点击发布更改。
- 检查相应更改,然后再次点击发布更改。
第 5 步:部署为 Cloud Functions 函数或使用 Cloud Run
如果您的服务器应用是轻量级且由事件驱动的,则应考虑将代码部署为 Cloud Functions 函数。例如,假设您有一款应用,其中包含由 Google AI 和 Vertex AI 等生成式 AI API 提供支持的角色对话。在这种情况下,您可以在应用按需调用的 Cloud Functions 函数中托管 LLM 服务逻辑。如需了解如何以 Cloud Functions 函数的形式部署应用,请参阅使用入门:编写、测试和部署您的第一批函数。
如果您的应用计划长时间运行(例如,包含资源的 Web 应用),您可以考虑使用 Cloud Run。如需使用 Cloud Run 部署服务器应用,请按照快速入门:将 Node.js 服务部署到 Cloud Run 中的指南操作。
如需详细了解 Cloud Run 和 Cloud Functions 的最佳使用场景,请参阅 Cloud Functions 与 Cloud Run:两者何时相比较。