使用 Firebase Remote Config 动态更新 Vertex AI in Firebase 应用

使用 Vertex AI in Firebase SDK 从应用中调用 Gemini API 时,您的请求会包含一些用于控制生成式 AI 回答的参数。这些参数通常包括模型名称、模型生成配置(token 数量上限、温度等)、安全设置、系统指令和提示数据。

在大多数情况下,您需要按需更改这些参数,或者根据多种场景的需要进行更改:

  • 无需发布新应用即可更新生成式 AI 模型。您可以在旧版本停用之前升级到较新的稳定模型版本,根据用户需求和属性降级到成本较低或性能较高的模型,或者有条件地将最新和最好的模型部署到特定细分用户群(例如 Beta 版测试人员)。
  • 设置模型的访问位置,使其更靠近用户。
  • 对不同的系统指令和提示进行 A/B 测试,然后逐步向用户发布实验的胜出值。
  • 使用功能标志在应用中快速公开或隐藏生成式 AI 功能。

Firebase Remote Config 可执行上述所有操作及更多操作,让您可以根据需要更新参数值,并有条件地为与您在 Firebase 控制台中设置的特征相匹配的应用实例更新参数值,而无需发布新版本的应用。

本解决方案指南提供了特定的推荐应用场景,并介绍了如何向生成式 AI 应用添加 Remote Config

跳转到代码实现

为什么要将 Firebase Remote Config 与应用搭配使用?

借助 Firebase Remote Config,您无需更新应用即可动态调整应用的行为。这对于使用生成式 AI 的应用尤其有用,在这种情况下,快速迭代和微调至关重要。

Remote Config 与生成式 AI 应用搭配使用的基本应用场景

对于以下基本应用场景,我们建议将 Remote ConfigVertex AI in Firebase 搭配使用:

  • 在不更新应用的情况下升级到最新的模型版本:使用 Remote Config 参数根据需要更改模型名称,以便在首选 Gemini 模型的最新版本推出后立即升级到该版本。
  • 在不更新应用的情况下更新系统指令和安全设置:将系统指令和安全设置存储在 Remote Config 参数中,以确保在部署后发现问题时可以按需更改。
  • 降低风险并加强 AI 安全性:使用 Remote Config 发布,安全地逐步向 iOS 和 Android 用户发布生成式 AI 更改。

Remote Config 与生成式 AI 应用搭配使用的高级和推荐应用场景

使用 Remote ConfigGoogle Analytics 对应用进行插桩后,您可以探索高级应用场景:

  • 根据客户端位置设置位置:使用 Remote Config 条件可根据检测到的客户端位置设置模型的位置
  • 对不同的模型进行实验:快速测试并在各种生成式 AI 模型之间切换,甚至将不同的模型部署到不同的细分用户群,以找到最适合您的特定应用场景的模型。
  • 优化模型性能:微调模型参数,例如系统提示、输出 token 数量上限、温度和其他设置。
  • 根据客户端属性使用不同的系统指令、提示和模型配置:Remote ConfigGoogle Analytics 搭配使用时,您可以根据客户端属性或自定义受众群体创建条件,并根据这些属性设置不同的参数。

    例如,如果您使用生成式 AI 在应用中提供技术支持,则可能需要设置特定于应用平台的系统指令,以确保向 Android、iOS 和 Web 平台用户提供准确的指令。

  • 为每位用户提供个性化体验:使用 Remote Config 个性化自动确定适用于每位用户的最佳生成式 AI 设置。

  • 控制费用:远程调整调用的生成式 AI 模型、模型的使用频率,并根据用户受众群体动态配置输出 token 数量上限值,以减少不必要的费用。

  • 优化应用体验和结果:A/B TestingRemote Config 搭配用于 iOS、Android 和 Flutter 应用,以在不同细分用户群中测试对生成式 AI 参数进行的更改,了解这些更改对留存率和收入等关键指标的影响。

通过使用 Firebase Remote Config 对生成式 AI 应用进行插桩,您可以构建灵活、安全且经济实惠的依托 AI 技术的应用,同时为用户打造愉悦的体验。

Firebase Remote Config 添加到您的应用

在本解决方案指南中,您将使用 Firebase Remote Config 动态更新 Android 应用中使用 Vertex AI in Firebase SDK 的参数。您将学习如何:

  • Firebase Remote Config 提取并激活模型名称和系统指令等参数。
  • 更新 Gemini API 调用以使用动态检索的参数,让您可以在不同的模型之间切换或修改系统指令,而无需更新应用。
  • 远程控制参数,根据需要调整模型行为和功能。

前提条件

本指南假定您熟悉如何使用 Xcode 为 Apple 平台(如 iOS)开发应用。在开始之前,请确保您执行了以下操作:

  • 完成 Vertex AI in Firebase SDK 入门指南中的步骤。请确保您已执行以下所有操作:

    1. 设置新的或现有的 Firebase 项目,包括使用 Blaze 定价方案和启用所需的 API。
    2. 将您的应用与 Firebase 相关联,包括注册您的应用并将 Firebase 配置添加到您的应用。
    3. 在应用中添加 SDK 并初始化 Vertex AI 服务和生成式模型。
  • 在项目中启用 Google Analytics,并将其 SDK 添加到您的应用中(需要完成此操作才能有条件地定位,例如根据客户端设备的位置来设置服务和模型的位置)。

第 1 步:在 Firebase 控制台中设置参数值

创建一个客户端 Remote Config 模板,并配置要在应用中提取和使用的参数和值。

  1. Firebase 控制台中打开您的 Firebase 项目,然后从导航菜单中展开运行并选择 Remote Config
  2. 确保从 Remote Config 页面顶部的客户端/服务器选择器中选择客户端
    • 如果您是首次使用 Remote Config 客户端模板,请点击创建配置。随即会出现创建您的首个参数窗格。
    • 如果您不是首次使用 Remote Config 模板,请点击添加参数
  3. 定义以下 Remote Config 参数:

    参数名称 说明 类型 默认值
    model_name 模型名称。如需查看要在代码中使用的模型名称的最新列表,请参阅可用模型名称 字符串 gemini-2.0-flash
    system_instructions 系统指令类似于您在模型接触到来自最终用户的任何进一步指令之前添加的“序言”,以便根据特定需求和应用场景来影响模型行为。 字符串 You are a helpful assistant who knows everything there is to know about Firebase!
    prompt 与生成式 AI 功能搭配使用的默认提示。 字符串 I am a developer who wants to know more about Firebase!
    vertex_location (可选)控制要运行 Vertex AI 服务和访问模型的位置。您可以设置条件,以便根据 Google Analytics 检测到的客户端位置来配置此选项。 字符串 us-central1
  4. 添加完参数后,点击发布更改。 如果这不是新的 Remote Config 模板,请查看更改,然后再次点击发布更改

第 2 步:在应用中添加并初始化 Remote Config

在应用中添加 Remote Config 依赖项并设置 Remote Config。在 Vertex AI in Firebase 设置过程中,您已将 Firebase SDK 添加到应用中,但还需要添加 Remote Config

  1. 在 Xcode 中打开项目,前往 File(文件)> Add Package Dependencies(添加软件包依赖项)
  2. 选择 firebase-ios-sdk,然后点击 Add package(添加软件包)。
  3. 在项目导航器中,依次选择您的应用 > Targets(目标)> 您的应用。
  4. General(常规)标签页中,滚动到 Frameworks, Libraries, and Embedded Content(框架、库和嵌入内容)。
  5. 点击 +,然后选择 FirebaseRemoteConfig,接着点击 Add(添加)。
  6. FirebaseRemoteConfig 导入项添加到您的代码中:

    import FirebaseRemoteConfig
    
  7. 在应用的适当类中(在示例应用中,这位于 VertexAISampleApp 中的 AppDelegate 类内),初始化 Firebase 并将 Remote Config 添加到您的主应用逻辑中。

    在此处,您将 Remote ConfigRemote Config 实时监听器作为导入项添加,以便应用可以实时提取新值,并添加最小提取间隔:

    let remoteConfig = RemoteConfig.remoteConfig()
    let settings = RemoteConfigSettings()
    settings.minimumFetchInterval = 3600
    remoteConfig.configSettings = settings
    

在此示例中,默认提取间隔为 3600 秒,但我们建议您在开发期间在代码中设置相对较短的最小提取间隔。

第 3 步:设置应用内参数值

您应在 Remote Config 对象中设置应用内默认参数值,以便在应用连接到 Remote Config 后端之前、在客户端网络访问中断时以及/或是在后端未配置任何值时,应用能够正常运行。

  1. Firebase 控制台中,打开 Remote Config
  2. 参数标签页中,打开菜单,然后选择下载默认值
  3. 看到提示时,启用 .plist (iOS),然后点击下载文件
  4. 将该文件保存在应用目录中(如果使用的是示例应用,请将其保存在 FirebaseVertexAI/Sample/VertexAISample 中)。
  5. 在 Xcode 中,右键点击您的应用,然后选择 Add Files(添加文件)(如果使用示例,请右键点击 VertexAISample,然后选择 Add Files to "VertexAISample" [将文件添加到“VertexAISample”])。
  6. 选择 remote_config_defaults.plist,然后点击 Add(添加)。
  7. 更新应用代码以引用默认文件:

    // Set default values
    remoteConfig.setDefaults(fromPlist: "remote_config_defaults")
    

第 4 步:提取并激活值

设置默认值后,添加以下内容以提取并激活值:

// Fetch and activate Remote Config values
remoteConfig.fetchAndActivate { status, error in
  if let error = error {
    print("Error fetching Remote Config: \(error.localizedDescription)")
  }
}

每当发布新的 Remote Config 模板时,这应该更新 Remote Config 对象。

第 5 步:添加实时 Remote Config 监听器

添加实时 Remote Config 监听器,以确保您对 Remote Config 模板所做的更改在更新后立即传播到客户端。

每当参数值更改时,以下代码会更新 Remote Config 对象。

// Add real-time Remote Config
remoteConfig.addOnConfigUpdateListener { configUpdate, error in
  guard let configUpdate = configUpdate, error == nil else {
    print("Error listening for config updates: \(error?.localizedDescription ?? "No error available")")
    return
  }

  print("Updated keys: \(configUpdate.updatedKeys)")
  remoteConfig.activate { changed, error in
    guard error == nil else {
      print("Error activating config: \(error?.localizedDescription ?? "No error available")")
      return
    }
    print("Activated config successfully")
  }
}

每当发布新的 Remote Config 模板时,这应该更新 Remote Config 对象。

第 6 步:为 Vertex AI 变量分配 Remote Config

现在,Remote Config 已完全配置,可更新代码以将硬编码值替换为来自 Remote Config 的值。

创建值以存储模型和系统提示值。以下代码演示了如何从 Remote Config 获取位置信息、模型名称、系统指令、用户提示和 Vertex AI 位置:

// Initialize the Vertex AI service
// Optionally specify a location in which to run the service and access the model
let vertexLocation = remoteConfig.configValue(forKey: "vertex_location").stringValue
let vertex = VertexAI.vertexAI(location: vertexLocation)

// Initialize the generative model with a model that supports your use case
// Specify a model that supports system instructions, like a Gemini 1.5 model
let modelName = remoteConfig.configValue(forKey: "model_name").stringValue
let systemInstructions = remoteConfig.configValue(forKey: "system_instructions").stringValue

let model = vertex.generativeModel(
  modelName: modelName,
  systemInstruction: ModelContent(role: "system", parts: systemInstructions)
)

// Provide a prompt that contains text
let userPrompt = remoteConfig.configValue(forKey: "prompt").stringValue

// To generate text output, call generateContent with the text input
let response = try await model.generateContent(userPrompt)
if let text = response.text {
  print(text)
}

第 7 步:运行应用

构建并运行应用,并验证其能否正常运行。在 Firebase 控制台的 Remote Config 页面中对配置进行更改,发布更改,然后验证结果。

后续步骤