Firebase Remote Config; Node.js (v12.1.0+), Python (v6.7.0+), Java (v9.7.0+) ve Go (v4.17.0+) için Firebase Admin SDK'larını kullanarak sunucu tarafı yapılandırmayı destekler.
Bu özellik, Remote Config kullanarak sunucu tarafı uygulamalarının davranışını ve yapılandırmasını dinamik olarak yönetmenize olanak tanır. Cloud Functions for Firebase gibi sunucusuz uygulamalar ve Cloud Run'teki container mimarisine alınmış hizmetler de buna dahildir.
Remote Config şablonundan türetilen istemciye özel bir yapılandırmayı getiren Firebase istemci SDK'larının aksine, sunucu tarafı Remote Config SDK'sı Firebase'den eksiksiz bir Remote Config şablonu indirir veya getirir. Sunucunuz daha sonra gelen her istekle şablonu değerlendirebilir ve çok düşük gecikmeyle özelleştirilmiş bir yanıt sunmak için kendi mantığını kullanabilir. Yanıtları, rastgele yüzdelere ve özel sinyallerde tanımlanan istemci özelliklerine göre kontrol etmek ve özelleştirmek için koşulları kullanabilirsiniz.
Sunucu tarafı Remote Config ile şunları yapabilirsiniz:
- Sunucunuzda çalışan veya sunucunuz üzerinden erişilen uygulamalar için yapılandırma parametreleri tanımlayarak yapay zeka modeli parametrelerini, istemleri ve diğer entegrasyonları uzaktan yapılandırma gibi kullanım alanlarına olanak tanıyın ve API anahtarlarınızın güvende kalmasını sağlayın.
- Ortamınızdaki değişikliklere veya diğer uygulama değişikliklerine (ör. LLM parametrelerini ve model uç noktalarını güncelleme) yanıt olarak parametreleri dinamik olarak ayarlama
- Sunucunuzun çağırdığı API'leri uzaktan güncelleyerek maliyetleri kontrol edin.
- Sunucunuza erişen istemciler için anında özel yapılandırmalar oluşturun.
- Hangi istemcilerin parametre değeri aldığını kaydedin ve bunu yararlanma hakkı doğrulama sisteminin bir parçası olarak Cloud Functions for Firebase içinde kullanın.
Sunucu tarafı Remote Config'ı Cloud Run, Cloud Functions for Firebase veya barındırılan sunucu ortamlarında dağıtabilirsiniz.
Başlamadan önce
Firebase projesi oluşturmak, hizmet hesabı oluşturmak ve Firebase Admin SDK'sını sunucunuza eklemek için Firebase Admin SDK'sını sunucunuza ekleme bölümündeki talimatları uygulayın. Platformunuz için Admin SDK'nın desteklenen bir sürümünü kullandığınızdan emin olun:
- Node.js: Firebase Admin Node.js SDK'sı 12.1.0 ve sonraki sürümler
- Python: Firebase Admin Python SDK'sı 6.7.0 veya sonraki sürümler
- Java: Firebase Admin Java SDK'sı 9.7.0 veya sonraki sürümler
- Go: Firebase Admin Go SDK 4.17.0 veya sonraki sürümler
1. adım: Firebase Admin SDK'yı başlatın ve API isteklerini yetkilendirin
Admin SDK'yı parametre olmadan başlattığınızda SDK, Google Uygulama Varsayılan Kimlik Bilgileri'ni kullanır ve seçenekleri GOOGLE_APPLICATION_CREDENTIALS ortam değişkeninden okur. SDK'yı başlatın ve platformunuz için Remote Config yapılandırın:
Node.js
initializeApp ve getRemoteConfig öğelerini içe aktarın, ardından Firebase uygulama örneğinizi başlatın:
import { initializeApp } from "firebase-admin/app";
import { getRemoteConfig } from "firebase-admin/remote-config";
// Initialize Firebase
const firebaseApp = initializeApp();
Python
firebase_admin'yi (eşzamansız şablon yükleme ve JSON ayrıştırma için asyncio ve json ile birlikte) içe aktarın, ardından uygulamayı ilk kullanıma hazırlayın:
import firebase_admin
import asyncio
import json
firebase_admin.initialize_app()
Java
FirebaseOptions ve hizmet hesabı kimlik bilgilerinizi kullanarak Firebase Admin SDK'yı başlatın:
// Initialize the Firebase Admin SDK
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.build();
FirebaseApp.initializeApp(options);
Go
Firebase uygulamasını başlatın ve bir RemoteConfig istemci örneği oluşturun:
ctx := context.Background()
// Initialize Firebase
app, err := firebase.NewApp(ctx, nil)
if err != nil {
log.Fatalln("Error initializing app:", err)
}
remoteConfig, err := app.RemoteConfig(ctx)
if err != nil {
log.Fatalln("Error initializing remote config client:", err)
}
2. adım: Sunucu uygulamanız için varsayılan parametre değerlerini belirleyin
Uygulamanızda Remote Config ile dinamik olarak güncellemek istediğiniz değişkenleri belirleyin. Ardından, uygulamanızda varsayılan olarak hangi değişkenlerin ayarlanması gerektiğini ve bunların varsayılan değerlerinin ne olması gerektiğini düşünün. Bu sayede, uygulamanızın Remote Config arka uç sunucusuyla bağlantısı kesilse bile uygulamanız başarıyla çalışır.
Örneğin, üretken yapay zeka işlevini yöneten bir sunucu uygulaması yazıyorsanız varsayılan bir model adı, istem ön talimatları ve üretken yapay zeka yapılandırması belirleyebilirsiniz. Örneğin:
| Parametre adı | Açıklama | Tür | Varsayılan değer |
|---|---|---|---|
model_name |
Model API adı | Dize | gemini-2.0-flash |
preamble_prompt |
Kullanıcının sorgusunun başına eklenecek istem | Dize | 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 |
Modele gönderilecek parametreler | JSON | {"stopSequences": ["I hope this helps"], "temperature": 0.7,
"maxOutputTokens": 512, "topP": 0.1, "topK": 20} |
3. adım: Sunucu uygulamanızı yapılandırın
Remote Config ile kullanmak istediğiniz parametreleri belirledikten sonra uygulamanızı varsayılan değerleri ayarlayacak, sunucuya özel Remote Config şablonunu getirecek ve değerlerini değerlendirecek şekilde yapılandırın.
Remote Config sunucu şablonuna erişip şablonu yükleyin.
Node.js
initServerTemplate()kullanarak sunucu şablonunu başlatın ve şablonu arka uçtan almak içinload()yöntemini çağırın:// Initialize server-side Remote Config const rc = getRemoteConfig(firebaseApp); const template = rc.initServerTemplate(); // Load Remote Config await template.load();Cloud Functions for Firebase içinde Node.js kullanıyorsanız şablonu tek bir adımda ilk kullanıma hazırlamak ve yüklemek için eşzamansız
getServerTemplate()işlevini kullanabilirsiniz:// Initialize server-side Remote Config const rc = getRemoteConfig(firebaseApp); const template = await rc.getServerTemplate();Python
init_server_template()kullanarak sunucu şablonunu başlatın ve şablonu arka uçtan almak içinload()yöntemini çağırın:from firebase_admin import remote_config # Initialize server-side Remote Config template = remote_config.init_server_template() # Load the template from the backend asyncio.run(template.load())Alternatif olarak, Cloud Functions for Firebase ile Python kullanıyorsanız şablonu tek bir adımda ilk kullanıma hazırlamak ve yüklemek için eşzamansız
get_server_template()işlevini kullanabilirsiniz:# Initialize server-side Remote Config template = await remote_config.get_server_template()Java
Sunucu tarafı Remote Config istemcisini
FirebaseRemoteConfig.getInstance()kullanarak başlatın:// Initialize server-side Remote Config client FirebaseRemoteConfig rc = FirebaseRemoteConfig.getInstance();Alternatif olarak, Java'yı Cloud Functions for Firebase ile kullanıyorsanız şablonu tek bir adımda ilk kullanıma hazırlamak ve yüklemek için
getServerTemplate()kullanabilirsiniz:ServerTemplate template = rc.getServerTemplate();Go
InitServerTemplate()kullanarak sunucu şablonunu başlatın ve şablonu arka uçtan almak içinLoad()yöntemini çağırın:// Initialize server-side Remote Config defaultConfig := make(map[string]any) templateDataJSON := "" template, err := remoteConfig.InitServerTemplate(defaultConfig, templateDataJSON) if err != nil { log.Fatalln("Error initializing server template:", err) } // Load Remote Config err = template.Load(ctx) if err != nil { log.Fatalln("Error fetching server template:", err) }Şablonu başlatmanın bir diğer yolu da gerekli sunucu şablonunu almak için
GetServerTemplateişlevini kullanmaktır. Bu şablonu yerel olarak depolanabilen bir JSON biçimine dönüştürebilir ve ardındanInitServerTemplateişlevini kullanarak bu JSON şablonunu başlatabilirsiniz.Uygulamanızın, Remote Config arka uç sunucusuyla bağlantısı kesilse bile başarıyla çalışmasını sağlamak için uygulamanızdaki her parametreye varsayılan değerler ekleyin.
Node.js
initServerTemplateveyagetServerTemplateşablon işlevinizin içine birdefaultConfignesnesi ekleyin: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();Python
init_server_templateveyaget_server_templateşablon işlevinizin içine birdefault_configsözlüğü ekleyin:template = remote_config.init_server_template({ 'default_config': { '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 asyncio.run(template.load())Şablonu başlatmanın bir diğer yolu da gerekli sunucu şablonunu almak için
get_server_templateişlevini kullanmaktır.template.to_jsonişlevini kullanarak bu şablonu JSON biçimine dönüştürebilirsiniz. Bu JSON şablonu yerel olarak depolanabilir ve daha sonrainit_server_templateişlevini kullanarak bu JSON şablonunu başlatabilirsiniz.Java
getServerTemplateişlevinizin içindeKeysAndValueskullanarak birdefaultConfignesnesi ekleyin:// Initialize default config using KeysAndValues KeysAndValues defaultConfig = new KeysAndValues.Builder() .put("rc_param_1", "default value 1") .put("rc_param_2", "default value 2") .build(); ServerTemplate template = rc.getServerTemplate(defaultConfig);Alternatif olarak, Remote Config başlatılırken varsayılan bir önbelleğe alınmış şablon iletebilirsiniz. Bu şablon, Remote Config sunucusuyla bağlantı kesildiğinde bile kullanılabilir:
String templateDataJSON = "{}"; // add your default template as JSON ServerTemplate template = rc.serverTemplateBuilder() .defaultConfig(defaultConfig) .cachedTemplate(templateDataJSON) .build();Go
InitServerTemplateveyaGetServerTemplateşablon işlevinizin içine birdefaultConfigharitası ekleyin:// Initialize server-side Remote Config defaultConfig := make(map[string]any) defaultConfig["model_name"] = "gemini-2.0-flash" // Assume the type generationConfig has been defined defaultConfig["generation_config"] = &generationConfig{ StopSequences: []string{"I hope this helps"}, Temperature: 0.7, MaxOutputTokens: 512, TopP: 0.9, TopK: 30, } defaultConfig["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!" templateDataJSON := "" template, err := remoteConfig.InitServerTemplate(defaultConfig, templateDataJSON) if err != nil { log.Fatalln("Error initializing server template:", err) } // Load Remote Config err = template.Load(ctx) if err != nil { log.Fatalln("Error fetching server template:", err) }Şablon yüklendikten sonra, şablondaki parametreleri ve değerleri içe aktarmak için şablonu değerlendirin:
Node.js
template.evaluate()kullanın:// Add template parameters to config const config = template.evaluate();Python
template.evaluate()kullanın:# Add template parameters to config config = template.evaluate()Java
template.evaluate()kullanın:// Add template parameters to config ServerConfig config = template.evaluate();Go
Hiçbir koşul uygulanmadığında boş bir değerlendirme bağlamıyla
template.Evaluate()kullanın:// An empty evaluation context means no conditions are applied. evaluationContext := make(map[string]any) config, err := template.Evaluate(evaluationContext) if err != nil { log.Fatalln("Error evaluating template:", err) }İsteğe bağlı olarak, Remote Config şablonunuzda koşullar belirlediyseniz istediğiniz bağlam değerlerini tanımlayın ve sağlayın:
- Yüzde koşulları kullanıyorsanız şablon değerlendirme işlevinde koşullarınızı değerlendirmek için kullanmak istediğiniz rastgele seçim kimliğini (
randomizationId,randomization_idveyarandomizationID) ekleyin. - Özel sinyaller kullanıyorsanız özellikleri ve değerlerini tanımlayın. Özel sinyaller Firebase Admin Node.js SDK 12.5.0 ve sonraki sürümleri, Python SDK 6.7.0 ve sonraki sürümleri, Java SDK 9.7.0 ve sonraki sürümleri ile Go SDK 4.17.0 ve sonraki sürümlerinde kullanılabilir.
Örneğin, sunucunuzla iletişime geçen her kullanıcının doğru rastgele gruba eklendiğinden emin olmak için rastgele hale getirme kimliği olarak bir Firebase yükleme kimliği veya kullanıcı kimliği, belirli istemci sürümlerini hedeflemek için özel sinyal olarak
versionve istemci platformlarını hedeflemek için özel sinyal olarakplatformayarlayabilirsiniz.Koşullar hakkında daha fazla bilgi için Koşul kuralı türleri başlıklı makaleyi inceleyin.
Node.js
template.evaluate()işlevinerandomizationIdve özel sinyalleri içeren bir değerlendirme bağlamı nesnesi iletin:// Add template parameters to `config`. Evaluates the // template and returns the parameter value assigned to // the group assigned to the {randomizationId} and version. const config = template.evaluate({ randomizationId: "2ac93c28-c459-4760-963d-a3974ec26c04", version: "1.0", platform: "Android" });Python
randomization_idve özel sinyalleri içeren bir sözlüğütemplate.evaluate()yöntemine iletin:# Add template parameters to `config`. Evaluates the # template and returns the parameter value assigned to # the group assigned to the {randomization_id} and version. config = template.evaluate({ 'randomization_id': "2ac93c28-c459-4760-963d-a3974ec26c04", 'version': "1.0", 'platform': "Android" })Java
randomizationIdve özel sinyalleri içeren birKeysAndValuesbağlamı oluşturun ve bunutemplate.evaluate()'ye iletin:// Add custom signals and randomizationId KeysAndValues context = new KeysAndValues.Builder() .put("custom_signal_key", "99") .put("randomizationId", "2ac93c28") .build(); // Evaluate the template with signals ServerConfig config = template.evaluate(context);Go
randomizationIDve özel sinyalleri içeren bir değerlendirme bağlamı eşlemesinitemplate.Evaluate()yöntemine iletin:// Add template parameters to `config`. Evaluates the // template and returns the parameter value assigned to // the group assigned to the {randomizationID}, version, and platform. evaluationContext := make(map[string]any) evaluationContext["randomizationID"] = "2ac93c28-c459-4760-963d-a3974ec26c04" evaluationContext["version"] = "1.0" evaluationContext["platform"] = "Android" config, err := template.Evaluate(evaluationContext) if err != nil { log.Fatalln("Error evaluating template:", err) }- Yüzde koşulları kullanıyorsanız şablon değerlendirme işlevinde koşullarınızı değerlendirmek için kullanmak istediğiniz rastgele seçim kimliğini (
Ardından, değerlendirilen yapılandırma nesnesinden ihtiyacınız olan parametre değerlerini çıkarın. Remote Config değerlerini beklenen biçime dönüştürmek için alıcı yöntemlerini kullanın.
Örneğin, Agent Platform modelini sunucunuzda uyguluyorsanız ve modeli ve model parametrelerini değiştirmek istiyorsanız
model_namevegeneration_configiçin parametreleri yapılandırabilirsiniz. Aşağıda, desteklenen alıcı yöntemleri ve her platform için Remote Config değerlerine nasıl erişileceğini gösteren bir örnek verilmiştir:Node.js
Desteklenen alıcı yöntemleri:
- Boole:
getBoolean - Nesne:
getValue - Numara:
getNumber - Dize:
getString
// Replace defaults with values from Remote Config. const generationConfig = JSON.parse( config.getString('generation_config')); const is_ai_enabled = config.getBoolean('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}`;Python
Desteklenen alıcı yöntemleri:
- Boole:
get_bool - Tam sayı:
get_int - Yanal dönüş:
get_float - Dize:
get_string - Değer kaynağı:
get_value_source
# Replace defaults with values from Remote Config. generation_config = json.loads(config.get_string('generation_config')) is_ai_enabled = config.get_bool('is_ai_enabled') model = config.get_string('model_name') # Generates a prompt comprised of the Remote Config # parameter and prepends it to the user prompt. prompt = f"{config.get_string('preamble_prompt')}{req.args.get('prompt')}"Java
Desteklenen alıcı yöntemleri:
- Boole:
getBoolean - Dize:
getString - Çift:
getDouble - Uzun:
getLong - Değer kaynağı:
getValueSource
// Get the model name String modelName = config.getString("model_name"); // Get the origin of value assigned to param ValueSource modelNameSource = config.getValueSource("model_name");getValueSourceyöntemi, parametrenin değer kaynağınınSTATIC,REMOTEveyaDEFAULTolup olmadığını gösteren birValueSourcedöndürür.Go
Desteklenen alıcı yöntemleri:
- Boole:
GetBoolean - Tam sayı:
GetInt - Yanal dönüş:
GetFloat - Dize:
GetString - Değer kaynağı:
GetValueSource
// Replace defaults with values from Remote Config. // Assume the type generationConfig has been defined var genConfig generationConfig err = json.Unmarshal([]byte(config.GetString("generation_config")), &genConfig) if err != nil { log.Fatalln("Error unmarshaling generation config:", err) } model := config.GetString("model_name") // Parameter created on the console isAIEnabled := config.GetBoolean("is_ai_enabled") // Generates a prompt comprised of the Remote Config // parameter and prepends it to the user prompt (assume it is extracted from the request body) userPrompt := "What is Remote Config?" prompt := fmt.Sprintf("%s %s", config.GetString("preamble_prompt"), userPrompt)- Boole:
Sunucunuz sunucusuz bir ortam değil de uzun süredir çalışıyorsa Remote Config sunucusundan en güncel şablonu aldığınızı doğrulamak için şablonu düzenli olarak yeniden yükleyin (ör. Node.js'de
setIntervalveya Java'dajava.util.Timerkullanarak).
4. adım: Remote Config içinde sunucuya özel parametre değerlerini ayarlayın
Ardından bir sunucu Remote Config şablonu oluşturun ve uygulamanızda kullanılacak parametreleri ve değerleri yapılandırın.
Sunucuya özel Remote Config şablonu oluşturmak için:
Firebase konsolunda DevOps & Engagement > Remote Config > Parameters sayfasına gidin.
Sayfanın üst kısmındaki İstemci/Sunucu seçiciden Sunucu'yu seçin.
Uygulamanızda tanımladığınız parametrelerle aynı adlara ve veri türlerine sahip Remote Config parametre tanımlayın ve değerler sağlayın. Bu değerler, şablonu getirip değerlendirdiğinizde ve bu değerleri değişkenlerinize atadığınızda Sunucu uygulamanızı yapılandırma bölümünde ayarladığınız varsayılan yapılandırmayı (
defaultConfigveyadefault_config) geçersiz kılar.İsteğe bağlı olarak, değerleri tanımladığınız örneklerin veya özel sinyallerin rastgele bir örneğine kalıcı olarak uygulamak için koşullar belirleyin. Koşullar hakkında daha fazla bilgi için Koşul kuralı türleri başlıklı makaleyi inceleyin.
Parametre eklemeyi tamamladığınızda Değişiklikleri yayınla'yı tıklayın.
Değişiklikleri inceleyin ve tekrar Değişiklikleri yayınla'yı tıklayın.
5. adım: Cloud Functions for Firebase veya Cloud Run ile dağıtın
Sunucu uygulamanız basit ve etkinliğe dayalıysa kodunuzu Cloud Functions for Firebase kullanarak dağıtabilirsiniz. Örneğin, üretken yapay zeka API'si (ör. Google AI veya Agent Platform) tarafından desteklenen karakter diyalogları içeren bir uygulamanız olduğunu varsayalım. Bu durumda, LLM sunma mantığınızı uygulamanızın seç-izle olarak çağırdığı bir işlevde barındırabilirsiniz.
Sunucu tarafı Remote Config ile 2. nesil Cloud Functions for Firebase kullanan bir çözüm üzerinde çalışmak için Cloud Functions for Firebase ve Agent Platform ile sunucu tarafı Remote Config kullanma başlıklı makaleyi inceleyin.
Uygulamanızı Cloud Functions for Firebase ile dağıtma hakkında daha fazla bilgi edinmek için Başlangıç: İlk işlevlerinizi yazma, test etme ve dağıtma başlıklı makaleyi inceleyin.
Sunucu tarafı Remote Config ve App Check ile örnek bir çağrılabilir işlevi Remote Config ve App Check ile Agent Platform Gemini API (formerly Vertex AI) işlevini çağırın bölümünde deneyin.
Sunucu tarafından oluşturulan bir web uygulaması geliştiriyorsanız App Hosting popüler web çerçevelerini destekler.
Aksi takdirde Cloud Run seçeneğini değerlendirebilirsiniz. Sunucu uygulamanızı Cloud Run ile dağıtmak için dilinizle ilgili hızlı başlangıç kılavuzunu inceleyin:
- Hızlı başlangıç: Cloud Run hizmetine Node.js hizmeti dağıtma
- Hızlı başlangıç: Cloud Run'e Python hizmeti dağıtma
- Hızlı başlangıç: Cloud Run'e Java hizmeti dağıtma
- Hızlı başlangıç: Cloud Run üzerinde Go hizmeti dağıtma
Sonraki adımlar
- Parametreler ve koşullar (sunucu tarafı) bölümünde sunucu tarafı parametrelerini ve koşullarını inceleyin.
- Eksiksiz bir çözüm için çalışın: Cloud Functions for Firebase ve Agent Platform ile sunucu tarafı Remote Config kullanın.
- Remote Config şablon sürümlerini nasıl yöneteceğinizi öğrenin.