Firebase Remote Config hỗ trợ cấu hình phía máy chủ bằng cách sử dụng SDK của Firebase dành cho quản trị viên cho Node.js (phiên bản 12.1.0 trở lên), Python (phiên bản 6.7.0 trở lên), Java (phiên bản 9.7.0 trở lên) và Go (phiên bản 4.17.0 trở lên).
Tính năng này cho phép bạn quản lý linh hoạt hành vi và cấu hình của các ứng dụng phía máy chủ bằng Remote Config. Điều này bao gồm các phương thức triển khai không máy chủ như Cloud Functions for Firebase và các dịch vụ trong vùng chứa trên Cloud Run.
Không giống như SDK ứng dụng Firebase (tìm nạp cấu hình dành riêng cho ứng dụng bắt nguồn từ mẫu Remote Config), SDK Remote Config phía máy chủ tải xuống hoặc tìm nạp mẫu Remote Config hoàn chỉnh từ Firebase. Sau đó, máy chủ của bạn có thể đánh giá mẫu bằng từng yêu cầu đến và sử dụng logic riêng để phân phát phản hồi tuỳ chỉnh với độ trễ rất thấp. Bạn có thể sử dụng điều kiện để kiểm soát và tuỳ chỉnh phản hồi dựa trên tỷ lệ phần trăm ngẫu nhiên và thuộc tính ứng dụng khách được xác định trong tín hiệu tuỳ chỉnh.
Với Remote Config phía máy chủ, bạn có thể:
- Xác định các tham số cấu hình cho ứng dụng chạy trên hoặc được truy cập thông qua máy chủ của bạn, cho phép các trường hợp sử dụng như định cấu hình từ xa các tham số và câu lệnh của mô hình AI cũng như các hoạt động tích hợp khác, để đảm bảo khoá API của bạn luôn an toàn.
- Điều chỉnh linh hoạt các tham số để ứng phó với những thay đổi trong môi trường hoặc các thay đổi khác của ứng dụng, chẳng hạn như cập nhật tham số LLM và điểm cuối của mô hình.
- Kiểm soát chi phí bằng cách cập nhật từ xa các API mà máy chủ của bạn gọi.
- Tạo cấu hình tuỳ chỉnh nhanh chóng cho các ứng dụng truy cập vào máy chủ của bạn.
- Ghi lại những ứng dụng đã nhận được giá trị tham số và sử dụng giá trị này trong Cloud Functions for Firebase trong hệ thống xác minh quyền.
Bạn có thể triển khai Remote Config phía máy chủ trên Cloud Run, Cloud Functions for Firebase hoặc môi trường máy chủ tự lưu trữ.
Trước khi bắt đầu
Làm theo hướng dẫn trong phần Thêm SDK Firebase dành cho quản trị viên vào máy chủ của bạn để tạo dự án Firebase, thiết lập tài khoản dịch vụ và thêm SDK Firebase dành cho quản trị viên vào máy chủ của bạn. Đảm bảo bạn sử dụng phiên bản SDK dành cho quản trị viên được hỗ trợ cho nền tảng của mình:
- Node.js: SDK Node.js dành cho quản trị viên Firebase phiên bản 12.1.0 trở lên
- Python: SDK Firebase Admin cho Python phiên bản 6.7.0 trở lên
- Java: Firebase Admin Java SDK phiên bản 9.7.0 trở lên
- Go: SDK Firebase Admin cho Go phiên bản 4.17.0 trở lên
Bước 1: Khởi chạy SDK của Firebase dành cho quản trị viên và uỷ quyền cho các yêu cầu API
Khi bạn khởi chạy SDK quản trị mà không có tham số, SDK sẽ sử dụng Thông tin xác thực mặc định của ứng dụng Google và đọc các tuỳ chọn từ biến môi trường GOOGLE_APPLICATION_CREDENTIALS. Khởi chạy SDK và định cấu hình Remote Config cho nền tảng của bạn:
Node.js
Nhập initializeApp và getRemoteConfig, sau đó khởi động phiên bản ứng dụng Firebase:
import { initializeApp } from "firebase-admin/app";
import { getRemoteConfig } from "firebase-admin/remote-config";
// Initialize Firebase
const firebaseApp = initializeApp();
Python
Nhập firebase_admin (cùng với asyncio và json để tải mẫu không đồng bộ và phân tích cú pháp JSON), sau đó khởi chạy ứng dụng:
import firebase_admin
import asyncio
import json
firebase_admin.initialize_app()
Java
Khởi chạy SDK của Firebase dành cho quản trị viên bằng FirebaseOptions và thông tin đăng nhập tài khoản dịch vụ của bạn:
// Initialize the Firebase Admin SDK
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.build();
FirebaseApp.initializeApp(options);
Bắt đầu
Khởi chạy ứng dụng Firebase và tạo một thực thể ứng dụng RemoteConfig:
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)
}
Bước 2: Xác định giá trị tham số mặc định cho ứng dụng máy chủ
Xác định các biến trong ứng dụng mà bạn muốn cập nhật linh động bằng Remote Config. Sau đó, hãy xem xét những biến nào phải được đặt theo mặc định trong ứng dụng của bạn và giá trị mặc định của các biến đó là gì. Điều này đảm bảo rằng ứng dụng của bạn chạy thành công ngay cả khi kết nối với máy chủ phụ trợ Remote Config bị gián đoạn.
Ví dụ: nếu đang viết một ứng dụng máy chủ quản lý một hàm AI tạo sinh, bạn có thể đặt tên mô hình mặc định, chỉ dẫn mở đầu câu lệnh và cấu hình AI tạo sinh, như sau:
| Tên tham số | Nội dung mô tả | Loại | Giá trị mặc định |
|---|---|---|---|
model_name |
Tên API của mô hình | Chuỗi | gemini-3.8-flash |
preamble_prompt |
Câu lệnh để thêm vào trước cụm từ tìm kiếm của người dùng | Chuỗi | 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 |
Tham số cần gửi đến mô hình | JSON | {"stopSequences": ["I hope this helps"],
"maxOutputTokens": 512} |
Bước 3: Định cấu hình ứng dụng máy chủ
Sau khi xác định các tham số mà bạn muốn sử dụng với Remote Config, hãy định cấu hình ứng dụng để đặt giá trị mặc định, tìm nạp mẫu Remote Config dành riêng cho máy chủ và đánh giá các giá trị của mẫu đó.
Truy cập và tải mẫu máy chủ Remote Config.
Node.js
Khởi chạy mẫu máy chủ bằng
initServerTemplate()và gọiload()để tìm nạp mẫu từ phần phụ trợ:// Initialize server-side Remote Config const rc = getRemoteConfig(firebaseApp); const template = rc.initServerTemplate(); // Load Remote Config await template.load();Nếu đang sử dụng Node.js trong Cloud Functions for Firebase, bạn có thể dùng hàm
getServerTemplate()không đồng bộ để khởi chạy và tải mẫu trong một bước:// Initialize server-side Remote Config const rc = getRemoteConfig(firebaseApp); const template = await rc.getServerTemplate();Python
Khởi chạy mẫu máy chủ bằng
init_server_template()và gọiload()để tìm nạp mẫu từ phần phụ trợ: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())Ngoài ra, nếu đang sử dụng Python với Cloud Functions for Firebase, bạn có thể sử dụng hàm
get_server_template()không đồng bộ để khởi chạy và tải mẫu trong một bước:# Initialize server-side Remote Config template = await remote_config.get_server_template()Java
Khởi chạy ứng dụng Remote Config phía máy chủ bằng cách sử dụng
FirebaseRemoteConfig.getInstance():// Initialize server-side Remote Config client FirebaseRemoteConfig rc = FirebaseRemoteConfig.getInstance();Ngoài ra, nếu đang sử dụng Java với Cloud Functions for Firebase, bạn có thể sử dụng
getServerTemplate()để khởi động và tải mẫu trong một bước duy nhất:ServerTemplate template = rc.getServerTemplate();Bắt đầu
Khởi chạy mẫu máy chủ bằng
InitServerTemplate()và gọiLoad()để tìm nạp mẫu từ phần phụ trợ:// 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) }Một cách khác để khởi động mẫu là sử dụng hàm
GetServerTemplateđể truy xuất mẫu máy chủ bắt buộc. Bạn có thể chuyển đổi mẫu này sang định dạng JSON có thể lưu trữ cục bộ, sau đó khởi chạy mẫu JSON này bằng hàmInitServerTemplate.Để đảm bảo ứng dụng của bạn chạy thành công ngay cả khi kết nối với máy chủ phụ trợ Remote Config bị gián đoạn, hãy thêm giá trị mặc định cho từng tham số trong ứng dụng.
Node.js
Thêm đối tượng
defaultConfigvào bên trong hàm mẫuinitServerTemplatehoặcgetServerTemplate:const template = rc.initServerTemplate({ defaultConfig: { model_name: "gemini-3.8-flash", generation_config: '{"stopSequences": [], "maxOutputTokens": 512}', 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
Thêm từ điển
default_configvào bên trong hàm mẫuinit_server_templatehoặcget_server_template:template = remote_config.init_server_template({ 'default_config': { 'model_name': "gemini-3.8-flash", 'generation_config': '{"stopSequences": [], "maxOutputTokens": 512}', '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())Một cách khác để khởi chạy mẫu là sử dụng hàm
get_server_templateđể truy xuất mẫu máy chủ bắt buộc. Bạn có thể chuyển đổi mẫu này sang định dạng JSON bằng hàmtemplate.to_json. Mẫu JSON này có thể được lưu trữ trên thiết bị và sau đó, bạn có thể khởi động mẫu JSON này bằng hàminit_server_template.Java
Thêm đối tượng
defaultConfigbằngKeysAndValuesbên trong hàmgetServerTemplate:// 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);Ngoài ra, bạn có thể truyền một mẫu được lưu vào bộ nhớ đệm mặc định trong khi khởi chạy Remote Config. Bạn có thể sử dụng mẫu này ngay cả khi kết nối với máy chủ Remote Config bị gián đoạn:
String templateDataJSON = "{}"; // add your default template as JSON ServerTemplate template = rc.serverTemplateBuilder() .defaultConfig(defaultConfig) .cachedTemplate(templateDataJSON) .build();Bắt đầu
Thêm bản đồ
defaultConfigvào bên trong hàm mẫuInitServerTemplatehoặcGetServerTemplate:// Initialize server-side Remote Config defaultConfig := make(map[string]any) defaultConfig["model_name"] = "gemini-3.8-flash" // Assume the type generationConfig has been defined defaultConfig["generation_config"] = &generationConfig{ StopSequences: []string{"I hope this helps"}, MaxOutputTokens: 512, } 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) }Sau khi mẫu tải, hãy đánh giá mẫu để nhập các tham số và giá trị từ mẫu:
Node.js
Sử dụng
template.evaluate():// Add template parameters to config const config = template.evaluate();Python
Sử dụng
template.evaluate():# Add template parameters to config config = template.evaluate()Java
Sử dụng
template.evaluate():// Add template parameters to config ServerConfig config = template.evaluate();Bắt đầu
Sử dụng
template.Evaluate()với bối cảnh đánh giá trống khi không áp dụng điều kiện nào:// 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) }Nếu bạn đặt điều kiện trong mẫu Remote Config, hãy xác định và cung cấp các giá trị ngữ cảnh mà bạn muốn:
- Nếu sử dụng điều kiện theo tỷ lệ phần trăm, hãy thêm mã nhận dạng ngẫu nhiên (
randomizationId,randomization_idhoặcrandomizationID) mà bạn muốn dùng để đánh giá các điều kiện trong hàm đánh giá mẫu. - Nếu sử dụng tín hiệu tuỳ chỉnh, hãy xác định các thuộc tính và giá trị của các thuộc tính đó. Tín hiệu tuỳ chỉnh có trong SDK Node.js của Firebase Admin phiên bản 12.5.0 trở lên, SDK Python phiên bản 6.7.0 trở lên, SDK Java phiên bản 9.7.0 trở lên và SDK Go phiên bản 4.17.0 trở lên.
Ví dụ: bạn có thể đặt mã cài đặt Firebase hoặc mã nhận dạng người dùng làm mã nhận dạng ngẫu nhiên để đảm bảo rằng mỗi người dùng liên hệ với máy chủ của bạn đều được thêm vào nhóm ngẫu nhiên thích hợp,
versionlàm tín hiệu tuỳ chỉnh để nhắm đến các phiên bản ứng dụng cụ thể vàplatformlàm tín hiệu tuỳ chỉnh để nhắm đến các nền tảng ứng dụng.Để biết thêm thông tin về các điều kiện, hãy xem phần Các loại quy tắc điều kiện.
Node.js
Truyền đối tượng bối cảnh đánh giá chứa
randomizationIdvà mọi tín hiệu tuỳ chỉnh đếntemplate.evaluate():// 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
Truyền một từ điển chứa
randomization_idvà mọi tín hiệu tuỳ chỉnh đếntemplate.evaluate():# 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
Tạo một ngữ cảnh
KeysAndValueschứarandomizationIdvà mọi tín hiệu tuỳ chỉnh, sau đó truyền ngữ cảnh đó đếntemplate.evaluate():// 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);Bắt đầu
Truyền bản đồ bối cảnh đánh giá chứa
randomizationIDvà mọi tín hiệu tuỳ chỉnh đếntemplate.Evaluate():// 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) }- Nếu sử dụng điều kiện theo tỷ lệ phần trăm, hãy thêm mã nhận dạng ngẫu nhiên (
Tiếp theo, hãy trích xuất các giá trị tham số bạn cần từ đối tượng cấu hình đã đánh giá. Sử dụng phương thức getter để truyền giá trị từ Remote Config sang định dạng dự kiến.
Ví dụ: nếu đang triển khai Agent Platform trên máy chủ và muốn thay đổi mô hình cũng như tham số mô hình, bạn có thể định cấu hình tham số cho
model_namevàgeneration_config. Dưới đây là các phương thức getter được hỗ trợ và ví dụ về cách truy cập vào các giá trị Remote Config cho từng nền tảng:Node.js
Các phương thức getter được hỗ trợ:
- Boolean:
getBoolean - Đồ vật:
getValue - Số:
getNumber - Chuỗi:
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
Các phương thức getter được hỗ trợ:
- Boolean:
get_bool - Số nguyên:
get_int - Độ chính xác đơn:
get_float - Chuỗi:
get_string - Nguồn giá trị:
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
Các phương thức getter được hỗ trợ:
- Boolean:
getBoolean - Chuỗi:
getString - Double:
getDouble - Dài:
getLong - Nguồn giá trị:
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");Phương thức
getValueSourcetrả về mộtValueSourcecho biết liệu nguồn giá trị của tham số làSTATIC,REMOTEhayDEFAULT.Bắt đầu
Các phương thức getter được hỗ trợ:
- Boolean:
GetBoolean - Số nguyên:
GetInt - Độ chính xác đơn:
GetFloat - Chuỗi:
GetString - Nguồn giá trị:
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)- Boolean:
Nếu máy chủ của bạn chạy trong thời gian dài (trái ngược với môi trường không máy chủ), hãy tải lại mẫu theo định kỳ (ví dụ: sử dụng
setIntervaltrong Node.js hoặcjava.util.Timertrong Java) để xác nhận rằng bạn đang tìm nạp mẫu mới nhất từ máy chủ Remote Config.
Bước 4: Đặt giá trị tham số dành riêng cho máy chủ trong Remote Config
Tiếp theo, hãy tạo một mẫu Remote Config của máy chủ rồi định cấu hình các tham số và giá trị để sử dụng trong ứng dụng của bạn.
Dưới đây là cách tạo mẫu Remote Config dành riêng cho máy chủ:
Trong bảng điều khiển Firebase, hãy chuyển đến trang DevOps & Engagement (DevOps và Mức độ tương tác) > Remote Config (Cấu hình từ xa) > Parameters (Tham số).
Trong bộ chọn Ứng dụng khách/Máy chủ ở đầu trang, hãy chọn Máy chủ.
Xác định các tham số Remote Config có cùng tên và kiểu dữ liệu với các tham số mà bạn đã xác định trong ứng dụng và cung cấp giá trị. Các giá trị này sẽ ghi đè cấu hình mặc định (
defaultConfighoặcdefault_config) mà bạn đặt trong phần Định cấu hình ứng dụng máy chủ khi bạn tìm nạp và đánh giá mẫu, đồng thời gán các giá trị này cho biến của bạn.Nếu muốn, bạn có thể đặt điều kiện để áp dụng giá trị một cách nhất quán cho một mẫu ngẫu nhiên gồm các thực thể hoặc tín hiệu tuỳ chỉnh mà bạn xác định. Để biết thêm thông tin về các điều kiện, hãy xem phần Các loại quy tắc điều kiện.
Khi bạn thêm xong các tham số, hãy nhấp vào Xuất bản các thay đổi.
Xem lại các thay đổi rồi nhấp vào Xuất bản các thay đổi một lần nữa.
Bước 5: Triển khai bằng Cloud Functions for Firebase hoặc Cloud Run
Nếu ứng dụng máy chủ của bạn gọn nhẹ và dựa trên sự kiện, bạn nên cân nhắc triển khai mã bằng Cloud Functions for Firebase. Ví dụ: giả sử bạn có một ứng dụng bao gồm lời thoại của nhân vật dựa trên một API AI tạo sinh (ví dụ: Google AI hoặc Agent Platform). Trong trường hợp này, bạn có thể lưu trữ logic phân phát LLM trong một hàm mà ứng dụng của bạn gọi theo yêu cầu.
Để tìm hiểu giải pháp sử dụng Cloud Functions for Firebase thế hệ thứ 2 với Remote Config phía máy chủ, hãy xem bài viết Sử dụng Remote Config phía máy chủ với Cloud Functions for Firebase và Agent Platform.
Để tìm hiểu thêm về cách triển khai ứng dụng bằng Cloud Functions for Firebase, hãy xem bài viết Bắt đầu: viết, kiểm thử và triển khai các hàm đầu tiên.
Dùng thử một hàm có thể gọi mẫu với Remote Config và App Check phía máy chủ tại Gọi Agent Platform Gemini API (formerly Vertex AI) bằng Remote Config và App Check.
Nếu bạn đang xây dựng một ứng dụng web do máy chủ kết xuất, thì App Hosting sẽ hỗ trợ các khung web phổ biến.
Nếu không, bạn có thể cân nhắc Cloud Run. Để triển khai ứng dụng máy chủ bằng Cloud Run, hãy làm theo hướng dẫn bắt đầu nhanh cho ngôn ngữ của bạn:
- Bắt đầu nhanh: Triển khai dịch vụ Node.js cho Cloud Run
- Hướng dẫn bắt đầu nhanh: Triển khai dịch vụ Python cho Cloud Run
- Bắt đầu nhanh: Triển khai dịch vụ Java cho Cloud Run
- Bắt đầu nhanh: Triển khai dịch vụ Go cho Cloud Run
Các bước tiếp theo
- Khám phá các tham số và điều kiện phía máy chủ trong bài viết Tham số và điều kiện (phía máy chủ).
- Thực hiện một giải pháp hoàn chỉnh: Sử dụng Remote Config phía máy chủ với Cloud Functions for Firebase và Agent Platform.
- Tìm hiểu cách quản lý các phiên bản mẫu Remote Config.