Dynamiczna aktualizacja Vertex AI w aplikacji Firebase przy użyciu Zdalnej konfiguracji Firebase

Gdy wywołujesz usługę Gemini API z aplikacji za pomocą pakietu SDK Vertex AI in Firebase, Twoje żądanie zawiera kilka parametrów, które kontrolują odpowiedzi generowane przez AI. Zwykle obejmują one nazwę modelu, konfigurację generowania modelu (maksymalna liczba tokenów, temperatura itp.), ustawienia bezpieczeństwa, instrukcje dotyczące systemu i dane promptu.

W większości przypadków możesz zmienić te ustawienia na żądanie lub tylko w określonych sytuacjach:

  • Zaktualizuj model generatywnej AI bez wydawania nowej aplikacji. Możesz przejść na nowsze, stabilne wersje modelu, zanim starsze wersje zostaną wycofane, zmienić model na tańszy lub wydajniejszy w zależności od potrzeb i właściwości użytkowników albo w sposób warunkowy wdrożyć najnowsze i najlepsze modele w przypadku określonych segmentów użytkowników (np. testerów wersji beta).
  • Ustaw lokalizację, w której uzyskujesz dostęp do modelu, tak aby znajdowała się bliżej użytkowników.
  • Przeprowadź testy A/B różnych instrukcji i promptów, a potem stopniowo wprowadzaj u użytkowników wartości, które okazały się najlepsze w eksperymencie.
  • Używaj flag funkcji, aby szybko włączać i wyłączać funkcje generatywnej AI w aplikacji.

Firebase Remote Config umożliwia to wszystko i więcej, pozwalając na aktualizowanie wartości parametrów w miarę potrzeby i warunkowo w przypadku instancji aplikacji, które odpowiadają ustawionym przez Ciebie w konsoli Firebase cechom, bez publikowania nowej wersji aplikacji.

W tym przewodniku po rozwiązaniach znajdziesz konkretne zalecane przypadki użycia i dowiesz się, jak dodać Remote Config do aplikacji korzystającej z generatywnej AI.

Przejdź do implementacji kodu

Dlaczego warto używać Firebase Remote Config w aplikacji?

Firebase Remote Config umożliwia dynamiczne dostosowywanie działania aplikacji bez konieczności jej aktualizowania. Jest to szczególnie przydatne w przypadku aplikacji korzystających z generatywnej AI, w których przypadku szybkie iteracje i dostrojenie są kluczowe.

Najważniejsze zastosowania Remote Config w aplikacjach korzystających z generatywnej AI

Zalecamy używanie atrybutu Remote Config z atrybutem Vertex AI in Firebase w następujących podstawowych przypadkach użycia:

  • Uaktualnianie modelu do najnowszej wersji bez aktualizacji aplikacji: użyj parametrów Remote Config, aby w razie potrzeby zmienić nazwę modelu. Dzięki temu, gdy tylko będzie dostępna, możesz zaktualizować preferowany model Gemini do najnowszej wersji.
  • Aktualizuj instrukcje systemu i ustawienia bezpieczeństwa bez aktualizacji aplikacji: zapisuj instrukcje systemu i ustawienia bezpieczeństwa w parametrach Remote Config, aby móc je zmienić w dowolnym momencie, jeśli po wdrożeniu zauważysz problemy.
  • Zmniejszanie ryzyka i zapewnienie bezpieczeństwa AI: korzystaj z Remote Config wdrożeń, aby bezpiecznie i stopniowo udostępniać zmiany generatywnej AI użytkownikom iOS i Androida.

Zaawansowane i zalecane zastosowania aplikacji Remote Config z generatywną AI

Po skonfigurowaniu aplikacji za pomocą funkcji Remote Config i Google Analytics możesz poznać zaawansowane przypadki użycia:

  • Ustaw lokalizację na podstawie lokalizacji klienta: użyj warunków Remote Config, aby ustawić lokalizację modelu na podstawie wykrytej lokalizacji klienta.
  • Eksperymentuj z różnymi modelami: możesz szybko testować i przełączać się między różnymi modelami generatywnej AI, a nawet wdrażać różne modele w różnych segmentach użytkowników, aby znaleźć model najlepiej dopasowany do Twojego przypadku użycia.
  • Optymalizacja wydajności modelu: dostosowanie parametrów modelu, takich jak prompt systemu, maksymalna liczba tokenów wyjściowych, temperatura i inne ustawienia.
  • Używanie różnych instrukcji systemowych, promptów i konfiguracji modelu na podstawie atrybutów klienta: korzystając z usługi Remote Config w usługach Google Analytics, możesz tworzyć warunki na podstawie atrybutów klienta lub list odbiorców niestandardowych i ustawiać różne parametry na podstawie tych atrybutów.

    Jeśli na przykład używasz generatywnej AI do udzielania pomocy technicznej w aplikacji, możesz ustawić instrukcje systemu dotyczące konkretnej platformy aplikacji, aby mieć pewność, że użytkownicy Androida, iOS i platformy internetowej otrzymają dokładne instrukcje.

  • Personalizowanie wrażeń dla każdego użytkownika: użyj Remote Config personalizacji, aby automatycznie określać optymalne ustawienia AI generatywnej dla każdego użytkownika.

  • Kontrola kosztów: możesz zdalnie dostosowywać, które modele generatywnej AI są wywoływane i jak często są używane, oraz dynamicznie konfigurować maksymalne wartości tokenów wyjściowych na podstawie grupy odbiorców, aby zmniejszyć niepotrzebne koszty.

  • Optymalizacja wrażeń z aplikacji i jej wyników: możesz używać A/B Testing waplikacji na iOS, Androida i Flutter, aby testować zmiany parametrów generatywnej AI w różnych segmentach użytkowników i sprawdzać, jak wpływają one na kluczowe dane, np. na retencję i przychody.Remote Config

Dzięki wykorzystaniu Firebase Remote Config w aplikacji z generatywną AI możesz tworzyć elastyczne, bezpieczne i wydajne aplikacje oparte na AI, a zarazem zapewniać użytkownikom przyjemne wrażenia.

Dodawanie Firebase Remote Config do aplikacji

W tym przewodniku po rozwiązaniu za pomocą Firebase Remote Config będziesz dynamicznie aktualizować parametry swojej aplikacji na Androida, która korzysta z pakietu SDK Vertex AI in Firebase. Zapoznasz się z tymi zagadnieniami:

  • Pobierz i aktywuj parametry, takie jak nazwy modeli i instrukcje systemu, z Firebase Remote Config.
  • Zaktualizuj wywołania Gemini API, aby używać dynamicznie pobieranych parametrów. Dzięki temu możesz przełączać się między różnymi modelami lub modyfikować instrukcje systemu bez konieczności aktualizowania aplikacji.
  • Zdalnie steruj parametrami, dostosowując w razie potrzeby zachowanie i możliwości modelu.

Wymagania wstępne

W tym przewodniku zakładamy, że wiesz, jak używać Android Studio do tworzenia aplikacji na platformy Android. Zanim zaczniesz, wykonaj te czynności:

  • Wykonaj czynności z przewodnika dla początkujących użytkowników pakietu SDK Vertex AI in Firebase. Upewnij się, że wykonałeś/wykonałaś te czynności:

    1. Skonfiguruj nowy lub istniejący projekt Firebase, w tym użyj abonamentu Blaze i włącz wymagane interfejsy API.
    2. Połącz swoją aplikację z Firebase, w tym zarejestruj ją i dodaj do niej konfigurację Firebase.
    3. Dodaj pakiet SDK i inicjuj w aplikacji usługę Vertex AI oraz model generatywnej AI.
  • Włącz w projekcie pakiet SDK Google Analytics i dodaj go do aplikacji (jest to wymagane do kierowania warunkowego, np. do ustawiania lokalizacji usługi i modelu na podstawie lokalizacji urządzenia klienta).

Krok 1. Ustaw wartości parametrów w konsoli Firebase

Utwórz szablon Remote Config klienta i skonfiguruj parametry oraz wartości do pobrania i użycia w aplikacji.

  1. Otwórz projekt Firebase w konsoli Firebase i w menu nawigacyjnym rozwiń Uruchom i kliknij Remote Config.
  2. Upewnij się, że w selektorze Klient/serwer u góry strony Remote Config wybrana jest opcja Klient.
    • Jeśli po raz pierwszy używasz szablonów klienta Remote Config, kliknij Utwórz konfigurację. Pojawi się panel Tworzenie pierwszego parametru.
    • Jeśli nie korzystasz z szablonów Remote Config po raz pierwszy, kliknij Dodaj parametr.
  3. 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 sekcji Dostępne nazwy modeli. Ciąg znaków gemini-1.5-flash
    system_instructions Instrukcje systemowe to coś w rodzaju „wstępu”, który dodajesz przed udostępnieniem modelu, aby użytkownik mógł wpływać na jego działanie na podstawie konkretnych potrzeb i przypadków użycia. Ciąg znaków You are a helpful assistant who knows everything there is to know about Firebase!
    prompt Domyślny prompt do użycia z funkcją generatywnej AI. Ciąg znaków I am a developer who wants to know more about Firebase!
    vertex_location Opcjonalnie możesz kontrolować lokalizację, aby uruchomić usługę Vertex AI i uzyskać dostęp do modelu. Możesz skonfigurować tę opcję, określając warunki na podstawie lokalizacji klienta wykrytej przez Google Analytics. Ciąg znaków us-central1
  4. Gdy skończysz dodawać parametry, kliknij Opublikuj zmiany. Jeśli nie jest to nowy szablon Remote Config, sprawdź zmiany i ponownie kliknij Opublikuj zmiany.

Krok 2. Dodaj do aplikacji pakiet SDK Remote Config i inicjuj go

Dodaj zależności Remote Config i skonfiguruj Remote Config w aplikacji.

  1. Dodaj zależność Remote Config do pliku Gradle modułu (na poziomie aplikacji) (zwykle app/build.gradle.kts lub app/build.gradle):

    dependencies {
        implementation(platform("com.google.firebase:firebase-bom:33.6.0"))
        implementation("com.google.firebase:firebase-vertexai")
        implementation("com.google.firebase:firebase-config")
        // ... other dependencies
    }
    
  2. Dodaj Remote Config do głównej logiki aplikacji. W tym miejscu zainicjujesz Remote Config i dodasz minimalny interwał pobierania:

    Kotlin+KTX

    val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig
    val configSettings = remoteConfigSettings {
    minimumFetchIntervalInSeconds = 3600
    }
    remoteConfig.setConfigSettingsAsync(configSettings)
    

    Java

    FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
    mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
    

W tym przykładzie domyślny interwał pobierania wynosi 3600 sekund, ale podczas tworzenia zalecamy ustawić w kodzie stosunkowo krótki minimalny interwał pobierania.

Krok 3. Ustaw wartości parametrów w aplikacji

Wartości domyślne parametrów w aplikacji należy ustawić w obiekcie Remote Config. Dzięki temu aplikacja będzie działać zgodnie z oczekiwaniami, nawet jeśli nie będzie mogła pobrać wartości z usługi Remote Config.

  1. W konsoli Firebase otwórz Remote Config.
  2. Na karcie Parametry otwórz Menu i wybierz Pobierz wartości domyślne.
  3. Gdy pojawi się odpowiedni komunikat, włącz plik .xml na Androida, a następnie kliknij Pobierz plik.
  4. Zapisz plik w katalogu zasobów XML aplikacji.
  5. Zaktualizuj plik głównej aktywności, aby dodać domyślne wartości po dodanym wcześniej elemencie configSettings:

    Kotlin+KTX

    // Set default values.
    remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
    

    Java

    // Set default values.
    mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
    

Krok 4. Pobierz i aktywuj wartości

Po ustawieniu wartości domyślnych dodaj te informacje, aby pobierać i aktywować wartości:

Kotlin+KTX

// Fetch and activate Remote Config values
remoteConfig.fetchAndActivate()
     .addOnCompleteListener(this) { task ->
          if (task.isSuccessful) {
              val updated = task.result
              Log.d(TAG, "Remote Config values fetched and activated: $updated")
          } else {
              Log.e(TAG, "Error fetching Remote Config", task.exception)
          }

Java

  // Fetch and activate Remote Config values
  mFirebaseRemoteConfig.fetchAndActivate()
    .addOnCompleteListener(this, new OnCompleteListener<Boolean>() {
        @Override
        public void onComplete(@NonNull Task<Boolean> task) {
            if (task.isSuccessful()) {
                boolean updated = task.getResult();
                Log.d(TAG, "Config params updated: " + updated);
            } else {
                Log.e(TAG, "Error fetching Remote Config", task.exception)
            }
          }
    });

Krok 5. Dodaj detektor Remote Config transmisji w czasie rzeczywistym

Dodaj do swojej aplikacji detektor Remote Config w czasie rzeczywistym, aby mieć pewność, że zmiany wprowadzane w szablonie Remote Config zostaną rozpowszechnione w kliencie natychmiast po ich zaktualizowaniu.

Poniższy kod aktualizuje obiekt Remote Config za każdym razem, gdy zmienia się wartość parametru. Opcjonalnie możesz też skonfigurować działanie w ramach addOnCompleteListener aktywacji:

Kotlin+KTX

      // Add a real-time Remote Config listener
      remoteConfig.addOnConfigUpdateListener(object : ConfigUpdateListener {
          override fun onUpdate(configUpdate : ConfigUpdate) {
              Log.d(ContentValues.TAG, "Updated keys: " + configUpdate.updatedKeys);
              remoteConfig.activate().addOnCompleteListener {
                  // Optionally, add an action to perform on update here.
              }
          }

          override fun onError(error : FirebaseRemoteConfigException) {
              Log.w(ContentValues.TAG, "Config update error with code: " + error.code, error)
          }
      }

Java

  // Add a real-time Remote Config listener
  remoteConfig.addOnConfigUpdateListener(new ConfigUpdateListener() {
      @Override
      public void onUpdate(ConfigUpdate configUpdate) {
          Log.d(ContentValues.TAG, "Updated keys: " + configUpdate.getUpdatedKeys());
                remoteConfig.activate().addOnCompleteListener(new OnCompleteListener<Boolean>() {
                  @Override
                  public void onComplete(@NonNull Task<Boolean> task) {
                      // Optionally, add an action to perform on update here.
                  }
              });
          }

      @Override
      public void onError(FirebaseRemoteConfigException error) {
          Log.w(ContentValues.TAG, "Config update error with code: " + error.getCode(), error);
      }
  });

Krok 6. Przypisz wartości Remote Config do Vertex AI zmiennych

Gdy usługa Remote Config będzie w pełni skonfigurowana, zaktualizuj kod, aby zastąpić zakodowane na stałe wartości wartościami pochodzącymi z usługi Remote Config.

Zastąp wpisane na stałe wartości lokalizacji, nazwy modelu, instrukcji systemowych i promptu użytkownika wartościami pochodzącymi z Remote Config.

Kotlin+KTX

// Initialize FirebaseVertexAI instance
// Optionally specify a location in which to run the service and access the model
val vertexAI = Firebase.vertexAI(location = remoteConfig.getString("vertex_location"))

// Initialize the Vertex AI service and the generative model
// Specify a model that supports system instructions, like a Gemini 1.5 model
val generativeModel = Firebase.vertexAI.generativeModel(
  modelName = remoteConfig.getString("model_name"),
  systemInstruction = content { text(remoteConfig.getString("system_instructions")) }
)

// To generate text output, call generateContent with the text input
val response = generativeModel.generateContent(remoteConfig.getString("prompt"))
print(response.text)

Java

// Initialize FirebaseVertexAI instance
// Optionally specify a location in which to run the service and access the model
FirebaseVertexAI vertexAI = FirebaseVertexAI.getInstance(remoteConfig.getString("vertex_location"));

// Initialize the Vertex AI service and the generative model
// Specify a model that supports system instructions, like a Gemini 1.5 model
GenerativeModel gm = FirebaseVertexAI.getInstance().generativeModel(
  /* modelName */ remoteConfig.getString("model_name"),
  /* generationConfig (optional) */ null,
  /* safetySettings (optional) */ null,
  /* requestOptions (optional) */ new RequestOptions(),
  /* tools (optional) */ null,
  /* toolsConfig (optional) */ null,
  /* systemInstruction (optional) */ new Content.Builder().addText(remoteConfig.getString("system_instructions")).build()
);
GenerativeModelFutures model = GenerativeModelFutures.from(gm);

// Provide a prompt that contains text
Content userPrompt = new Content.Builder()
 addText(remoteConfig.getString("prompt"))
 build();

// To generate text output, call generateContent with the text input
ListenableFuture<GenerateContentResponse> response = model.generateContent(userPrompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
  @Override
  public void onSuccess(GenerateContentResponse result) {
    String resultText = result.getText();
    System.out.println(resultText);
  }

  @Override
  public void onFailure(Throwable t) {
    t.printStackTrace();
  }
}, executor);

Krok 7. Uruchom aplikację.

Skompiluj i uruchom aplikację oraz sprawdź, czy działa. Wprowadź zmiany w konfiguracji na stronie Remote Config w konsoli Firebase, opublikuj je i sprawdź wynik.

Dalsze kroki