Dynamiczne aktualizowanie aplikacji Firebase AI Logic za pomocą Zdalnej konfiguracji Firebase

Gdy wywołujesz usługę Gemini API z aplikacji za pomocą pakietu SDK Firebase AI Logic, 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 warto je zmieniać w miarę potrzeby lub w różnych sytuacjach:

  • Zaktualizuj model generatywnej AI bez publikowania nowej aplikacji. Możesz zaktualizować starsze wersje modelu na nowsze, stabilne wersje, 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 wdrożyć nowe, najlepsze modele w sposób warunkowy w przypadku określonych segmentów użytkowników (np. testerów wersji beta).
  • Ustaw lokalizację, w której będziesz uzyskiwać dostęp do modelu, aby była ona bliżej użytkowników.
  • Przeprowadź testy A/B różnych instrukcji i promptów, a potem stopniowo wprowadzaj zwycięskie wartości eksperymentu wśród użytkowników.
  • Używaj flag funkcji, aby szybko wyświetlać lub ukrywać 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 wydawania nowej wersji aplikacji.

Ten przewodnik zawiera konkretne zalecane zastosowania i opisuje, 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 pozwala dynamicznie dostosowywać działanie aplikacji bez konieczności jej aktualizowania. Jest to szczególnie przydatne w przypadku aplikacji korzystających z generatywnej AI, w których 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 Firebase AI Logic w przypadku tych podstawowych zastosowań:

  • Przejdź na najnowszą wersję modelu bez aktualizowania aplikacji: użyj parametrów Remote Config, aby w razie potrzeby zmienić nazwę modelu, dzięki czemu będziesz mieć możliwość przejścia na najnowszą wersję wybranego modelu Gemini, gdy tylko będzie ona dostępna.

  • Aktualizowanie instrukcji dotyczących systemu i ustawień bezpieczeństwa bez aktualizacji aplikacji: przechowuj instrukcje dotyczące systemu i ustawienia bezpieczeństwa w parametrach Remote Config, aby móc je zmieniać w miarę potrzeby, jeśli po wdrożeniu wykryjesz problemy.

  • Zmniejszanie ryzyka i zapewnienie bezpieczeństwa AI: Remote Configwprowadzaj zmiany generatywnej AI stopniowo i bezpiecznie dla użytkowników iOS i Androida.

Zaawansowane i zalecane zastosowania Remote Config w przypadku aplikacji korzystających z generatywnej AI

Po instrumentowaniu aplikacji za pomocą Remote ConfigGoogle Analytics możesz zapoznać się z zastosowaniami zaawansowanymi:

  • Ustaw lokalizację na podstawie lokalizacji klienta: użyj warunków Remote Config, aby ustawić lokalizację, w której uzyskujesz dostęp do 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 uzyskiwać dostęp do różnych modeli dla różnych segmentów użytkowników, aby znaleźć model najlepiej dopasowany do Twojego konkretnego przypadku użycia.

  • Zoptymalizować wydajność modelu: dostosować parametry modelu, takie jak prompt systemowy, 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 Remote ConfigGoogle 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 zapewnić dokładne instrukcje użytkownikom Androida, iOS i platformy internetowej.

  • Personalizuj wrażenia dla poszczególnych użytkowników: używaj Remote Configpersonalizacji w aplikacjach i grach mobilnych, aby automatycznie określać optymalne ustawienia generatywnej AI dla każdego użytkownika.

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

  • Optymalizowanie wrażeń z aplikacji i wyników: użyj A/B TestingRemote Config w przypadku aplikacji mobilnych i gier, aby testować zmiany w parametrach generatywnej AI w różnych segmentach użytkowników i sprawdzać, jak wpływają one na kluczowe dane, takie jak retencja i przychody.

Dzięki instrumentacji aplikacji z generatywną AI za pomocą Firebase Remote Config 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ązaniach dowiesz się, jak używać pakietu Firebase Remote Config do dynamicznej aktualizacji parametrów w aplikacji na Androida, która korzysta z pakietu SDK Firebase AI Logic. 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 przyjęto założenie, że znasz już podstawy tworzenia aplikacji na swoją platformę.

Zanim zaczniesz, wykonaj te czynności:

  • Zapoznaj się z poradnikiem na temat korzystania z usługi Firebase AI Logic, w którym znajdziesz informacje o konfigurowaniu projektu Firebase, łączeniu aplikacji z Firebase, dodawaniu pakietu SDK, inicjowaniu usługi backendowej wybranego dostawcy „Gemini API” oraz tworzeniu instancji modelu.

  • Włącz Google Analytics w projekcie Firebase i dodaj do aplikacji jego pakiet SDK (wymagany do kierowania warunkowego, np. do ustawiania lokalizacji, w której uzyskujesz dostęp do 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, które mają być pobierane i używane w aplikacji.

  1. Otwórz projekt Firebase w konsoli Firebase. Następnie w menu nawigacyjnym rozwiń Uruchom i wybierz Remote Config.
  2. U góry strony w selektorze Klient/serwer sprawdź, czy wybrana jest opcja Klient.
  3. Aby utworzyć szablon klienta, kliknij Utwórz konfigurację (jeśli korzystasz już z szablonów klienta, kliknij Dodaj parametr).
  4. Określ parametry, którymi chcesz sterować za pomocą usługi Remote Config. Przykład:

    Nazwa parametru Opis Typ Wartość domyślna
    model_name Nazwa modelu. Zobacz dostępne nazwy modeli. Ciąg znaków gemini-2.0-flash
    system_instructions Instrukcje systemowe to „wstęp”, który dodajesz przed przekazaniem modelu do dalszych instrukcji użytkownika końcowego, aby wpływać na jego działanie. 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 Ma zastosowanie tylko wtedy, gdy używasz Vertex AI Gemini API.
     Kontroluj lokalizację, aby 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
  5. 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 i inicjuj Remote Config w aplikacji

Dodaj bibliotekę Remote Config i skonfiguruj Remote Config w aplikacji.

Swift

W ramach konfiguracji Firebase AI Logic pakiet SDK Firebase został już dodany do Twojej aplikacji, ale musisz też dodać pakiet Remote Config.

  1. W Xcode po otwarciu projektu wybierz Plik > Dodaj zależności pakietu.

  2. Wybierz firebase-ios-sdk i kliknij Dodaj pakiet.

  3. W przewodniku po projekcie wybierz swoją aplikację > Grupy odbiorców > swoją aplikację.

  4. Na karcie Ogólne przewiń do sekcji Frameworki, biblioteki i osadzone treści.

  5. Kliknij kolejno +, FirebaseRemoteConfigDodaj.

  6. Dodaj do kodu instrukcje importu FirebaseRemoteConfig:

    import FirebaseRemoteConfig
    
  7. W odpowiedniej klasie w aplikacji zainicjuj Firebase i dodaj Remote Config do głównej logiki aplikacji.

    Tutaj musisz uwzględnić Remote Config i słuchacza Remote Config w czasie rzeczywistym jako importy, aby aplikacja mogła pobierać nowe wartości w czasie rzeczywistym, oraz dodać minimalny interwał pobierania:

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

    aplikacji quickstart znajduje się ona w klasie AppDelegate w obrębie klasy VertexAISampleApp.

Kotlin

  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.14.0"))
        implementation("com.google.firebase:firebase-ai")
        implementation("com.google.firebase:firebase-config")
        // ... other dependencies
    }
    
  2. Dodaj Remote Config do głównej logiki aplikacji. Tutaj zainicjujesz Remote Config i dodasz minimalny interwał pobierania:

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

Java

  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.14.0"))
        implementation("com.google.firebase:firebase-ai")
        implementation("com.google.firebase:firebase-config")
        // ... other dependencies
    }
    
  2. Dodaj Remote Config do głównej logiki aplikacji. Tutaj zainicjujesz Remote Config i dodasz minimalny interwał pobierania:

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

Web

  1. Otwórz kod w edytorze tekstu i zaimportuj Remote Config:

    import { getRemoteConfig } from 'firebase/remote-config';
    
  2. Wewnątrz funkcji głównej i po zainicjowaniu aplikacji Firebase dla pakietu SDK Firebase AI Logic zainicjuj Remote Config:

      // Initialize Remote Config and get a reference to the service
      const remoteConfig = getRemoteConfig(app);
    
  3. Ustaw minimalny interwał pobierania:

    remoteConfig.settings.minimumFetchIntervalMillis = 3600000;
    

Dart

  1. W katalogu projektu Flutter zainstaluj i dodaj Remote Config za pomocą tego polecenia:

    flutter pub add firebase_remote_config
    
  2. Otwórz plik ./lib/main.dart i dodaj instrukcje importu po innych instrukcjach importu dodanych na potrzeby obsługi pliku Firebase AI Logic:

    import 'package:firebase_vertexai/firebase_ai.dart';
    import 'package:firebase_core/firebase_core.dart';
    import 'package:firebase_remote_config/firebase_remote_config.dart';
    
  3. Dodaj do aplikacji zmienne _modelName, _systemInstructions_prompt, abyśmy mogli z nich skorzystać później:

    late final String _modelName;
    late final String _systemInstructions;
    late final String _prompt;
    
  4. Pobierz instancję obiektu Remote Config i ustaw minimalny interwał pobierania, aby umożliwić częste odświeżanie. Pamiętaj, aby dodać ten kod po zainicjowaniu Firebase.

      final remoteConfig = FirebaseRemoteConfig.instance;
      await remoteConfig.setConfigSettings(RemoteConfigSettings(
        fetchTimeout: const Duration(seconds: 3600),
        minimumFetchInterval: const Duration(seconds: 3600),
      ));
    

Unity

  1. Dodaj Remote Config do projektu Unity, postępując zgodnie z tymi instrukcjami.

  2. Pobierz instancję obiektu Remote Config i ustaw minimalny interwał pobierania, aby umożliwić częste odświeżanie. Pamiętaj, aby dodać ten kod po zainicjowaniu Firebase.

    var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
    const int MillisecondsPerSecond = 1000;
    await remoteConfig.SetConfigSettingsAsync(new ConfigSettings() {
      FetchTimeoutInMilliseconds = 3600 * MillisecondsPerSecond,
      MinimumFetchIntervalInMilliseconds = 3600 * MillisecondsPerSecond
    });
    

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 uda jej się pobrać wartości z usługi Remote Config.

Swift

  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 opcję plik.plist na iOS, a potem kliknij Pobierz plik.

  4. Zapisz plik w katalogu aplikacji.

    Jeśli używasz przykładowej aplikacji, zapisz ją w folderze FirebaseVertexAI/Sample/VertexAISample.

  5. W Xcode kliknij aplikację prawym przyciskiem myszy i wybierz Dodaj pliki.

    Jeśli używasz przykładu, kliknij VertexAISample prawym przyciskiem myszy i wybierz Dodaj pliki do folderu „VertexAISample”.

  6. Wybierz remote_config_defaults.plist i kliknij Dodaj.

  7. Zaktualizuj kod aplikacji, aby odwoływał się do pliku domyślnych:

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

Kotlin

  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ę taka prośba, 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 elemencie configSettings, który został dodany wcześniej:

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

Java

  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ę taka prośba, 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 elemencie configSettings, który został dodany wcześniej:

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

Web

Wartości domyślne możesz ustawić bezpośrednio w kodzie:

// Set default Remote Config parameter values
remoteConfig.defaultConfig = {
  model_name: 'gemini-2.0-flash',
  system_instructions:
    'You are a helpful assistant who knows everything there is to know about Firebase!',
  prompt: 'I am a developer who wants to know more about Firebase!',
  vertex_location: 'us-central1',
};

Dart

Wartości domyślne możesz ustawić bezpośrednio w kodzie:

remoteConfig.setDefaults(const {
  "model_name": "gemini-2.0-flash",
  "system_instructions": "You are a helpful assistant who knows everything there is to know about Firebase!",
  "prompt": "I am a developer who wants to know more about Firebase!",
  "vertex_location": "us-central1"
});

Unity

Wartości domyślne możesz ustawić bezpośrednio w kodzie:

await remoteConfig.SetDefaultsAsync(
  new System.Collections.Generic.Dictionary<string, object>() {
    { "model_name", "gemini-2.0-flash" },
    { "system_instructions", "You are a helpful assistant who knows everything there is to know about Firebase!" },
    { "prompt", "I am a developer who wants to know more about Firebase!" },
    { "vertex_location", "us-central1" }
  }
);

Krok 4. Pobierz i aktywuj wartości

Po ustawieniu wartości domyślnych dodaj te informacje, aby pobrać i aktywować wartości.

Swift

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

Obiekt Remote Config powinien być aktualizowany za każdym razem, gdy publikowany jest nowy szablon Remote Config.

Kotlin

// 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)
            }
          }
    });
.

Web

  1. Dodaj do importu plików getValuefetchAndActivate:

    import { getValue, fetchAndActivate } from 'firebase/remote-config';
    
  2. Po dodaniu kodu do skonfigurowania domyślnych wartości Remote Config pobierz i aktywuj konfigurację, a potem przypisz wartości stałym elementom modelName, systemInstructions, promptvertexLocation.

    // Fetch and activate Remote Config.
    try {
      await fetchAndActivate(remoteConfig);
    } catch(err) {
      console.error('Remote Config fetch failed', err);
    }
    
    console.log('Remote Config fetched.');
    
    // Assign Remote Config values.
    const modelName = getValue(remoteConfig, 'model_name').asString();
    const systemInstructions = getValue(remoteConfig, 'system_instructions').asString();
    const prompt = getValue(remoteConfig, 'prompt').asString();
    const vertexLocation = getValue(remoteConfig, 'vertex_location').asString();
    

Dart

// Fetch and activate Remote Config.
remoteConfig.fetchAndActivate();

// Assign Remote Config values.
String? _modelName = remoteConfig.getString("model_name");
String? _systemInstructions = remoteConfig.getString("system_instructions");
String? _prompt = remoteConfig.getString("prompt");
String? _vertexLocation = remoteConfig.getString("vertex_location");
.

Unity

// Fetch and activate Remote Config values.
await remoteConfig.FetchAndActivateAsync();

Krok 5. Dodaj odtwarzacz Remote Config w czasie rzeczywistym

Dodaj do aplikacji odbiorcę zdarzeń Remote Config w czasie rzeczywistym, aby mieć pewność, że zmiany wprowadzone w szablonie Remote Config zostaną przekazane klientowi zaraz po ich zaktualizowaniu.

Poniższy kod aktualizuje obiekt Remote Config za każdym razem, gdy zmienia się wartość parametru.

Swift

// 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")
  }
}

Kotlin

Opcjonalnie możesz też skonfigurować działanie w ramach addOnCompleteListener aktywacji:

      // 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

Opcjonalnie możesz też skonfigurować działanie w ramach addOnCompleteListener aktywacji:

  // 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);
      }
  });

Web

Odbiorcy w czasie rzeczywistymRemote Config nie są obsługiwani w przypadku aplikacji internetowych.

Dart

// Add a real-time Remote Config listener
remoteConfig.onConfigUpdated.listen((event) async {
  await remoteConfig.activate();
});

Unity

// Add a real-time Remote Config listener to automatically update whenever
// a new template is published.
// Note: the parameters can be anonymous as they are unused.

remoteConfig.OnConfigUpdateListener += (_, _) => {
  remoteConfig.ActivateAsync();
};

Krok 6. Zaktualizuj żądania Gemini API, aby używać wartości Remote Config

Kliknij dostawcę Gemini API, aby wyświetlić na tej stronie treści i kod związane z tym dostawcą.

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

Swift

// Initialize the Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
let ai = FirebaseAI.firebaseAI(backend: .googleAI())

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
let modelName = remoteConfig.configValue(forKey: "model_name").stringValue
let systemInstructions = remoteConfig.configValue(forKey: "system_instructions").stringValue

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

// Provide a prompt that contains text
// The text in the prompt will be sourced from Remote Config
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)
}

Kotlin

// Initialize the Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
val ai = Firebase.ai(backend = GenerativeBackend.googleAI())

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
val model = ai.generativeModel(
  modelName = remoteConfig.getString("model_name"),
  systemInstruction = content { text(remoteConfig.getString("system_instructions")) }
)

// To generate text output, call `generateContent` with the text input
// The text in the prompt will be sourced from Remote Config
val response = model.generateContent(remoteConfig.getString("prompt"))
print(response.text)

Java

// Initialize the Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
FirebaseAI ai = FirebaseAI.getInstance(GenerativeBackend.googleAI());

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
GenerativeModel gm = ai.generativeModel(
        /* modelName */ remoteConfig.getString("model_name"),
        /* generationConfig (optional) */ null,
        /* safetySettings (optional) */ null,
        /* tools (optional) */ null,
        /* toolsConfig (optional) */ null,
        /* systemInstruction (optional) */ new Content.Builder().addText(
                remoteConfig.getString("system_instructions")).build(),
        /* requestOptions (optional) */ new RequestOptions()
);
GenerativeModelFutures model = GenerativeModelFutures.from(gm);

// Provide a prompt that contains text
// The text in the prompt will be sourced from Remote Config
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);

Web

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
const model = getGenerativeModel(ai, {
  model: modelName,
  systemInstruction: systemInstruction
});

// Wrap in an async function so you can use await
async function run() {
  // Provide a prompt that contains text
  // The text in the prompt will be sourced from Remote Config
  const userPrompt = prompt;

  // To generate text output, call `generateContent` with the text input
  const result = await model.generateContent(userPrompt);

  const response = result.response;
  const text = response.text();
  console.log(text);
}

Dart

// Initialize the Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
final ai = await FirebaseAI.googleAI();

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
final model =
      ai.generativeModel(
        model: _modelName,
        systemInstruction: Content.system(_systemInstructions),
      );

// Provide a prompt that contains text
// The text in the prompt will be sourced from Remote Config
final _userPrompt = [Content.text(_prompt)];

// To generate text output, call `generateContent` with the text input
final response = await model.generateContent(_userPrompt);
print(response.text);

Unity

// Initialize the Gemini Developer API backend service
// The Gemini Developer API doesn't support setting the location of a model
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());

// Create a `GenerativeModel` and add system instructions into its config
// Both the model name and the system instructions will be sourced from Remote Config
var modelName = remoteConfig.GetValue("model_name").StringValue;
var systemInstructions = remoteConfig.GetValue("system_instructions").StringValue;

var model = ai.GetGenerativeModel(
  modelName: modelName,
  systemInstruction: ModelContent.Text(systemInstructions)
);

// Provide a prompt that contains text
// The text in the prompt will be sourced from Remote Config
var userPrompt = remoteConfig.GetValue("prompt").StringValue;

// To generate text output, call `GenerateContentAsync` with the text input
var response = await model.GenerateContentAsync(userPrompt);
UnityEngine.Debug.Log(response.Text ?? "No text in response.");

Krok 7. Uruchom aplikację.

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

Dalsze kroki

  • Dowiedz się więcej o Remote Config.

  • Dodaj Google Analytics do kodu klienta, aby włączyć kierowanie.

  • W przypadku aplikacji i gier mobilnych:

    • Testuj różne ustawienia modelu za pomocą parametrów Remote Config i A/B Testing.

    • stopniowo wprowadzać zmiany parametrów modelu za pomocą Remote Configwdrożeń (tylko na iOS i Androida).

    • Użyj personalizacji Remote Config, aby za pomocą systemów uczących się określić najlepsze ustawienia dla poszczególnych użytkowników (tylko iOS+, Android i Unity).