ตอนนี้การกำหนดค่าระยะไกลของ Firebase รองรับการกำหนดค่าฝั่งเซิร์ฟเวอร์โดยใช้ Firebase Admin Node.js SDK v12.1.0 ขึ้นไปแล้ว ความสามารถใหม่นี้จะช่วยให้คุณจัดการลักษณะการทำงานและการกำหนดค่าของแอปพลิเคชันฝั่งเซิร์ฟเวอร์แบบไดนามิกโดยใช้การกำหนดค่าระยะไกล ซึ่งรวมถึงการใช้งานแบบ Serverless เช่น Cloud Functions
SDK การกำหนดค่าระยะไกลด้านเซิร์ฟเวอร์จะดาวน์โหลดเทมเพลตการกำหนดค่าระยะไกลที่สมบูรณ์จาก Firebase ซึ่งแตกต่างจาก SDK ของไคลเอ็นต์ Firebase ที่ดึงการกำหนดค่าเฉพาะไคลเอ็นต์ดึงมาจากเทมเพลตการกำหนดค่าระยะไกล จากนั้นเซิร์ฟเวอร์ของคุณจะประเมินเทมเพลตกับคำขอขาเข้าแต่ละรายการและใช้ตรรกะของตนเองเพื่อแสดงการตอบกลับที่กำหนดเองโดยมีเวลาในการตอบสนองต่ำมาก
เมื่อใช้การกำหนดค่าระยะไกลฝั่งเซิร์ฟเวอร์ คุณจะทำสิ่งต่อไปนี้ได้
- กำหนดพารามิเตอร์การกำหนดค่าสำหรับแอปพลิเคชันที่ทำงานหรือเข้าถึงได้ผ่านเซิร์ฟเวอร์ของคุณ ทำให้สำหรับกรณีการใช้งานต่างๆ เช่น การกำหนดค่าพารามิเตอร์โมเดล AI และพรอมต์จากระยะไกล รวมถึงการผสานรวมอื่นๆ เพื่อให้มั่นใจว่าคีย์ API ของคุณจะปลอดภัยอยู่เสมอ
- ปรับพารามิเตอร์แบบไดนามิกเพื่อตอบสนองต่อการเปลี่ยนแปลงของสภาพแวดล้อมหรือการเปลี่ยนแปลงอื่นๆ ของแอปพลิเคชัน เช่น การอัปเดตพารามิเตอร์ LLM และปลายทางของโมเดล
- ควบคุมค่าใช้จ่ายโดยการอัปเดต API ที่เซิร์ฟเวอร์เรียกใช้จากระยะไกล
- สร้างการกำหนดค่าที่กำหนดเองด่วนสำหรับไคลเอ็นต์ที่เข้าถึงเซิร์ฟเวอร์ของคุณ
คุณจะทำให้การกำหนดค่าระยะไกลฝั่งเซิร์ฟเวอร์ใช้งานได้บน Cloud Run, Cloud Functions หรือสภาพแวดล้อมของเซิร์ฟเวอร์ที่โฮสต์ด้วยตนเอง
ก่อนเริ่มต้น
ทำตามวิธีการในหัวข้อเพิ่ม Firebase Admin SDK ในเซิร์ฟเวอร์เพื่อสร้างโปรเจ็กต์ Firebase ตั้งค่าบัญชีบริการ แล้วเพิ่ม Firebase Admin Node.js SDK ลงในเซิร์ฟเวอร์
ขั้นตอนที่ 1: เริ่มต้น Firebase Admin Node.js SDK และให้สิทธิ์คำขอ API
เมื่อคุณเริ่มต้น Admin SDK โดยไม่มีพารามิเตอร์ SDK จะใช้ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชันของ Google และอ่านตัวเลือกจากตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS
ตัวอย่างเช่น หากต้องการเริ่มต้น SDK และเพิ่มการกำหนดค่าระยะไกล ให้ทำดังนี้
import { initializeApp } from "firebase-admin/app";
import { getRemoteConfig } from "firebase-admin/remote-config";
// Initialize Firebase
const firebaseApp = initializeApp();
ขั้นตอนที่ 2: ระบุค่าพารามิเตอร์เริ่มต้นสำหรับแอปพลิเคชันเซิร์ฟเวอร์
ระบุตัวแปรในแอปที่คุณต้องการอัปเดตแบบไดนามิกด้วยการกำหนดค่าระยะไกล จากนั้นพิจารณาว่าตัวแปรใดที่ควรตั้งค่าโดยค่าเริ่มต้นในแอปพลิเคชันของคุณ และค่าเริ่มต้นของตัวแปรควรเป็นเท่าใด การทำเช่นนี้จะช่วยให้แอปพลิเคชันของคุณทำงานได้สำเร็จ แม้การเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ของการกำหนดค่าระยะไกลจะหยุดชะงัก
ตัวอย่างเช่น หากเขียนแอปพลิเคชันเซิร์ฟเวอร์ที่จัดการฟังก์ชัน Generative AI คุณอาจตั้งชื่อโมเดลเริ่มต้น พรอมต์ Preamble และการกำหนดค่า Generative AI ดังตัวอย่างต่อไปนี้
ชื่อพารามิเตอร์ | คำอธิบาย | ประเภท | ค่าเริ่มต้น |
---|---|---|---|
model_name |
ชื่อ API โมเดล | สตริง | gemini-1.5-pro |
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! |
generation_config
|
พารามิเตอร์ที่จะส่งไปยัง โมเดล | JSON | {"stopSequences":
["I hope this
helps"],
"temperature":
0.7,
"maxOutputTokens":
512, "topP": 0.1,
"topK": 20} |
ขั้นตอนที่ 3: กำหนดค่าแอปพลิเคชันเซิร์ฟเวอร์
หลังจากระบุพารามิเตอร์ที่ต้องการใช้กับการกำหนดค่าระยะไกลแล้ว ให้กำหนดค่าแอปพลิเคชันให้กำหนดค่าเริ่มต้น ดึงข้อมูลเทมเพลตการกำหนดค่าระยะไกลเฉพาะเซิร์ฟเวอร์ และใช้ค่า ขั้นตอนต่อไปนี้อธิบายวิธีกำหนดค่าแอปพลิเคชัน Node.js
เข้าถึงและโหลดเทมเพลต
// Initialize server-side Remote Config const rc = getRemoteConfig(firebaseApp); const template = rc.initServerTemplate(); // Load Remote Config await template.load();
หากใช้ Node.js ภายใน Cloud Functions คุณจะใช้
getServerTemplate
แบบไม่พร้อมกันเพื่อดึงข้อมูลและโหลดเทมเพลตในขั้นตอนเดียวได้ดังนี้// Initialize server-side Remote Config const rc = getRemoteConfig(firebaseApp); const template = await rc.getServerTemplate();
เพิ่มค่าเริ่มต้นสำหรับแต่ละพารามิเตอร์ลงในแอปเพื่อให้แอปพลิเคชันทำงานได้สำเร็จแม้ว่าการเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ของการกำหนดค่าระยะไกลจะหยุดชะงัก โดยเพิ่ม
defaultConfig
ในฟังก์ชันinitServerTemplate
หรือgetServerTemplate
ของเทมเพลต ดังนี้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();
หลังจากโหลดเทมเพลตแล้ว ให้ใช้
template.evaluate()
เพื่อนำเข้าพารามิเตอร์และค่าจากเทมเพลต โดยทำดังนี้// Add template parameters to config const config = template.evaluate();
(ไม่บังคับ) หากกำหนดเงื่อนไขเปอร์เซ็นต์ในเทมเพลตการกำหนดค่าระยะไกล ให้กำหนดและระบุ
randomizationId
ที่ต้องการใช้เพื่อประเมินเงื่อนไขภายในฟังก์ชันtemplate.evaluate()
เช่น คุณอาจตั้งค่ารหัสการติดตั้ง Firebase เป็น
randomizationId
หรือรหัสผู้ใช้ เพื่อให้แน่ใจว่ามีการเพิ่มผู้ใช้แต่ละรายที่ติดต่อเซิร์ฟเวอร์ของคุณลงในกลุ่มแบบสุ่มที่เหมาะสม ตัวอย่างต่อไปนี้เป็นตัวอย่างพื้นฐาน แต่คุณอาจกำหนดค่าเซิร์ฟเวอร์ให้สร้างrandomizationIds
ที่แตกต่างกันสำหรับคำขอไคลเอ็นต์ต่างๆ เพื่อให้แน่ใจว่าผู้ใช้ได้รับค่าที่สอดคล้องกันจากการกำหนดค่าระยะไกลตามการเป็นสมาชิกในกลุ่มเงื่อนไขเปอร์เซ็นต์ดูข้อมูลเพิ่มเติมเกี่ยวกับเงื่อนไขเปอร์เซ็นต์ได้ที่ผู้ใช้เป็นเปอร์เซ็นต์แบบสุ่ม
// Set the randomizationId const randomizationId = "2ac93c28-c459-4760-963d-a3974ec26c04" // Add template parameters to `config`. Evaluates the // template and returns the parameter value assigned to // the group assigned to the {randomizationId}. const config = template.evaluate({ randomizationId });
ต่อไป ให้ดึงค่าพารามิเตอร์ที่ต้องการจากค่าคงที่การกําหนดค่า ใช้
getters
เพื่อแคสต์ค่าจากการกำหนดค่าระยะไกลไปยังรูปแบบที่คาดไว้ ประเภทที่รองรับมีดังนี้- บูลีน:
getBoolean
- ออบเจ็กต์:
getValue
- หมายเลข:
getNumber
- สตริง:
getString
เช่น หากคุณใช้งาน Vertex AI บนเซิร์ฟเวอร์และต้องการเปลี่ยนพารามิเตอร์โมเดลและโมเดล คุณอาจต้องกำหนดค่าพารามิเตอร์สำหรับ
model_name
และgenerationConfig
ตัวอย่างวิธีเข้าถึงค่าของการกำหนดค่าระยะไกลมีดังนี้// Replace defaults with values from Remote Config. const generationConfig = JSON.parse( config.getString('generation_config')); const is_ai_enabled = config.getBool('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}`;
- บูลีน:
หากเซิร์ฟเวอร์ของคุณทำงานเป็นเวลานาน แทนที่จะเป็นสภาพแวดล้อมแบบ Serverless ให้ใช้
setInterval
เพื่อโหลดเทมเพลตซ้ำเป็นระยะๆ เพื่อให้มั่นใจว่าคุณจะดึงข้อมูลเทมเพลตล่าสุดจากเซิร์ฟเวอร์การกำหนดค่าระยะไกลเป็นระยะๆ
ขั้นตอนที่ 4: กำหนดค่าพารามิเตอร์เฉพาะเซิร์ฟเวอร์ในการกำหนดค่าระยะไกล
จากนั้นสร้างเทมเพลตการกำหนดค่าระยะไกลของเซิร์ฟเวอร์และกำหนดค่าพารามิเตอร์และค่าที่จะใช้ในแอป
วิธีสร้างเทมเพลตการกำหนดค่าระยะไกลเฉพาะเซิร์ฟเวอร์
- เปิดหน้าพารามิเตอร์การกำหนดค่าระยะไกลของคอนโซล Firebase แล้วเลือกเซิร์ฟเวอร์จากตัวเลือกไคลเอ็นต์/เซิร์ฟเวอร์
- กำหนดพารามิเตอร์การกำหนดค่าระยะไกลที่มีชื่อและประเภทข้อมูลเหมือนกับพารามิเตอร์ที่กำหนดไว้ในแอปและระบุค่า ค่าเหล่านี้จะลบล้าง
defaultConfig
ที่คุณตั้งค่าไว้ในกำหนดค่าแอปพลิเคชันเซิร์ฟเวอร์เมื่อคุณดึงข้อมูลและประเมินเทมเพลตและกำหนดค่าเหล่านี้ให้กับตัวแปร - (ไม่บังคับ) กำหนดเงื่อนไขเปอร์เซ็นต์เพื่อใช้ค่ากับตัวอย่างอินสแตนซ์แบบสุ่มอย่างถาวร ดูข้อมูลเพิ่มเติมเกี่ยวกับเงื่อนไขของเปอร์เซ็นต์ได้ที่ผู้ใช้เป็นเปอร์เซ็นต์แบบสุ่ม
- เมื่อเพิ่มพารามิเตอร์เสร็จแล้ว ให้คลิกเผยแพร่การเปลี่ยนแปลง
- ตรวจสอบการเปลี่ยนแปลงแล้วคลิกเผยแพร่การเปลี่ยนแปลงอีกครั้ง
ขั้นตอนที่ 5: ทำให้ใช้งานได้เป็น Cloud Function หรือใช้ Cloud Run
หากแอปพลิเคชันเซิร์ฟเวอร์มีทรัพยากรน้อยและขับเคลื่อนด้วยเหตุการณ์ คุณควรพิจารณาทำให้โค้ดใช้งานได้เป็น Cloud Function ตัวอย่างเช่น สมมติว่าคุณมีแอปที่มีบทสนทนาของตัวละครที่ขับเคลื่อนโดย Generative AI API เช่น Google AI และ Vertex AI ในกรณีนี้ คุณสามารถโฮสต์ตรรกะการแสดงผล LLM ใน Cloud Function ที่แอปเรียกใช้ตามคำขอได้ ดูวิธีทำให้แอปใช้งานได้เป็น Cloud Function ที่ส่วนเริ่มต้นใช้งาน: เขียน ทดสอบ และทำให้ฟังก์ชันแรกใช้งานได้
หากต้องการใช้งานแอปพลิเคชันเป็นเวลานาน (เช่น เว็บแอปที่มีเนื้อหา) คุณอาจใช้ Cloud Run หากต้องการทำให้แอปเซิร์ฟเวอร์ใช้งานได้ด้วย Cloud Run ให้ทำตามคำแนะนำที่ Quickstart: ปรับใช้บริการ Node.js ใน Cloud Run
ดูข้อมูลเพิ่มเติมเกี่ยวกับกรณีการใช้งานที่ดีที่สุดสำหรับ Cloud Run และ Cloud Functions ได้ที่ Cloud Functions เทียบกับ Cloud Run: กรณีที่ควรใช้กรณีใดมากกว่ากัน