ใช้การกำหนดค่าระยะไกลในสภาพแวดล้อมของเซิร์ฟเวอร์


Firebase Remote Config รองรับการกำหนดค่าฝั่งเซิร์ฟเวอร์โดยใช้ Firebase Admin Node.js SDK เวอร์ชัน 12.1.0 ขึ้นไป ความสามารถนี้ช่วยให้คุณสามารถจัดการพฤติกรรมและการกำหนดค่าของแอปพลิเคชันฝั่งเซิร์ฟเวอร์แบบไดนามิกโดยใช้ Remote Config ซึ่งรวมถึงการใช้งานแบบไร้เซิร์ฟเวอร์เช่น Cloud Functions

Firebase Client SDK จะดึงข้อมูลการกำหนดค่าเฉพาะไคลเอ็นต์ที่ได้จากเทมเพลต Remote Config แต่ Server-Side Remote Config SDK จะดาวน์โหลดเทมเพลต Remote Config ที่สมบูรณ์จาก Firebase จากนั้นเซิร์ฟเวอร์ของคุณสามารถประเมินเทมเพลตด้วยคำขอที่เข้ามาแต่ละรายการ และใช้ตรรกะของตัวเองเพื่อตอบสนองแบบกำหนดเองโดยมีความล่าช้าต่ำมาก คุณใช้เงื่อนไขเพื่อควบคุมและปรับแต่งการตอบกลับตามเปอร์เซ็นต์แบบสุ่มและแอตทริบิวต์ของไคลเอ็นต์ที่กําหนดไว้ในสัญญาณที่กําหนดเองได้

ด้วย Remote Config ฝั่งเซิร์ฟเวอร์ คุณสามารถ:

  • กำหนดพารามิเตอร์การกำหนดค่าสำหรับแอปพลิเคชันที่ทำงานหรือเข้าถึงผ่านเซิร์ฟเวอร์ของคุณ เพื่อให้ใช้กรณีการใช้งานต่างๆ ได้ เช่น การกำหนดค่าพารามิเตอร์และพรอมต์ของโมเดล AI จากระยะไกล รวมถึงการผสานรวมอื่นๆ เพื่อให้มั่นใจว่าคีย์ API จะปลอดภัยอยู่เสมอ
  • ปรับพารามิเตอร์แบบไดนามิกเพื่อตอบสนองต่อการเปลี่ยนแปลงในสภาพแวดล้อมหรือ การเปลี่ยนแปลงแอปพลิเคชันอื่นๆ เช่น การอัปเดตพารามิเตอร์ LLM และปลายทางของโมเดล
  • ควบคุมต้นทุนด้วยการอัปเดต API ที่เซิร์ฟเวอร์ของคุณเรียกใช้จากระยะไกล
  • สร้างการกำหนดค่าที่กำหนดเองได้ทันทีสำหรับไคลเอ็นต์ที่เข้าถึงเซิร์ฟเวอร์ของคุณ
  • บันทึกว่าไคลเอ็นต์ใดได้รับค่าพารามิเตอร์และใช้ค่านี้ใน Cloud Functions เป็นส่วนหนึ่งของระบบการยืนยันการให้สิทธิ์

คุณสามารถปรับใช้ Remote Config ฝั่งเซิร์ฟเวอร์บน Cloud Run, Cloud Functions หรือสภาพแวดล้อมเซิร์ฟเวอร์ที่โฮสต์ด้วยตนเองได้

ก่อนเริ่มต้น

ทําตามวิธีการในเพิ่ม Firebase Admin SDK ลงในเซิร์ฟเวอร์เพื่อสร้างโปรเจ็กต์ Firebase สร้างบัญชีบริการ และเพิ่ม Firebase Admin Node.js SDK ลงในเซิร์ฟเวอร์

ขั้นตอนที่ 1: เริ่มต้นใช้งาน Firebase Admin Node.js SDK และให้สิทธิ์คำขอ API

เมื่อคุณเริ่มต้น Admin SDK โดยไม่มีพารามิเตอร์ SDK จะใช้ Google Application Default Credentials และอ่านตัวเลือกจากตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS วิธีเริ่มต้น SDK และเพิ่ม Remote Config

import { initializeApp } from "firebase-admin/app";
import { getRemoteConfig } from "firebase-admin/remote-config";

// Initialize Firebase
const firebaseApp = initializeApp();

ขั้นตอนที่ 2: ระบุค่าพารามิเตอร์เริ่มต้นสำหรับแอปพลิเคชันเซิร์ฟเวอร์

ระบุตัวแปรในแอปของคุณที่คุณต้องการอัปเดตแบบไดนามิกด้วย Remote Config จากนั้นพิจารณาว่าตัวแปรใดที่ต้องตั้งค่าเริ่มต้นใน แอปพลิเคชันของคุณ และค่าเริ่มต้นของตัวแปรเหล่านั้นควรเป็นอะไร ซึ่งช่วยให้มั่นใจได้ว่าแอปพลิเคชันจะทำงานได้สำเร็จแม้ว่าการเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ Remote Config จะถูกขัดจังหวะก็ตาม

ตัวอย่างเช่น หากคุณกำลังเขียนแอปพลิเคชันเซิร์ฟเวอร์ที่จัดการฟังก์ชัน Generative AI คุณอาจตั้งชื่อโมเดลเริ่มต้น คำนำของพรอมต์ และการกำหนดค่า Generative AI ดังนี้

ชื่อพารามิเตอร์ คำอธิบาย ประเภท ค่าเริ่มต้น
model_name ชื่อ API ของโมเดล สตริง gemini-2.0-flash
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: กำหนดค่าแอปพลิเคชันเซิร์ฟเวอร์

หลังจากระบุพารามิเตอร์ที่ต้องการใช้กับ Remote Config แล้ว ให้กำหนดค่าแอปพลิเคชันเพื่อตั้งค่าเริ่มต้น ดึงข้อมูลเทมเพลต Remote Config เฉพาะเซิร์ฟเวอร์ และใช้ค่าของเทมเพลต ขั้นตอนต่อไปนี้จะอธิบายวิธีกําหนดค่าแอปพลิเคชัน Node.js

  1. เข้าถึงและโหลดเทมเพลต

    // 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();
    
  2. หากต้องการให้แอปพลิเคชันทํางานได้สําเร็จแม้ว่าการเชื่อมต่อกับRemote Configเซิร์ฟเวอร์แบ็กเอนด์จะถูกขัดจังหวะ ให้เพิ่มค่าเริ่มต้นสําหรับแต่ละพารามิเตอร์ลงในแอป โดยเพิ่ม 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()
    
  3. หลังจากโหลดเทมเพลตแล้ว ให้ใช้ template.evaluate() เพื่อนำเข้าพารามิเตอร์และ ค่าจากเทมเพลต

    // Add template parameters to config
    const config = template.evaluate();
    
  4. หากตั้งค่าเงื่อนไข ในเทมเพลต Remote Config คุณสามารถกำหนดและระบุค่าที่ต้องการได้ (ไม่บังคับ)

    • หากใช้เงื่อนไขเปอร์เซ็นต์ ให้เพิ่มrandomizationIdที่ต้องการใช้ประเมิน เงื่อนไขภายในฟังก์ชัน template.evaluate()
    • หากใช้สัญญาณที่กำหนดเอง ให้กำหนดแอตทริบิวต์และค่าของสัญญาณเหล่านั้น สัญญาณที่กำหนดเองจะพร้อมใช้งานกับ Firebase Admin Node.js SDK 12.5.0 ขึ้นไป

    ตัวอย่างเช่น คุณอาจกำหนดID การติดตั้งของ Firebase เป็น randomizationId หรือ ID ผู้ใช้ เพื่อให้แน่ใจว่าผู้ใช้แต่ละคนที่ติดต่อกับเซิร์ฟเวอร์ของคุณจะถูกเพิ่มในกลุ่มสุ่มที่ถูกต้อง version เป็นสัญญาณแบบกำหนดเองเพื่อกำหนดเป้าหมายเวอร์ชันไคลเอนต์ที่เจาะจง และ platform เป็นสัญญาณแบบกำหนดเองเพื่อกำหนดเป้าหมายแพลตฟอร์มไคลเอนต์

    ดูข้อมูลเพิ่มเติมเกี่ยวกับเงื่อนไขได้ที่ประเภทกฎเงื่อนไข

    // 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"
    });
    
    
  5. จากนั้น แยกค่าพารามิเตอร์ที่ต้องการจาก ค่าคงที่ของการกำหนดค่า ใช้ getters เพื่อส่งค่าจาก Remote Config ไปยังรูปแบบที่คาดไว้ ระบบรองรับประเภทต่อไปนี้

    • บูลีน: getBoolean
    • ออบเจ็กต์: getValue
    • หมายเลข: getNumber
    • สตริง: getString

    เช่น หากคุณใช้ Vertex AI ในเซิร์ฟเวอร์ และต้องการเปลี่ยนโมเดลและพารามิเตอร์ของโมเดล คุณอาจต้องกำหนดค่าพารามิเตอร์สำหรับ model_name และ generation_config ตัวอย่างวิธีเข้าถึงค่าของ Remote Config มีดังนี้

    // 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}`;
    
  6. หากเซิร์ฟเวอร์ทำงานเป็นเวลานาน ซึ่งต่างจากสภาพแวดล้อมแบบไร้เซิร์ฟเวอร์ ให้ใช้ setInterval เพื่อโหลดเทมเพลตซ้ำเป็นระยะๆ เพื่อยืนยันว่าคุณ ดึงเทมเพลตล่าสุดจากเซิร์ฟเวอร์ Remote Config

ขั้นตอนที่ 4: ตั้งค่าพารามิเตอร์เฉพาะเซิร์ฟเวอร์ใน Remote Config

จากนั้นสร้างRemote Configเทมเพลตเซิร์ฟเวอร์และกำหนดค่าพารามิเตอร์และค่าที่จะใช้ในแอป

วิธีสร้างRemote ConfigเทมเพลตRemote Configเฉพาะเซิร์ฟเวอร์

  1. เปิดหน้าพารามิเตอร์คอนโซล Firebase Remote Config แล้วเลือกเซิร์ฟเวอร์จากตัวเลือกไคลเอ็นต์/เซิร์ฟเวอร์
  2. กำหนดRemote Configพารามิเตอร์ที่มีชื่อและประเภทข้อมูลเดียวกันกับ พารามิเตอร์ที่คุณกำหนดในแอปและระบุค่า ค่าเหล่านี้จะลบล้าง defaultConfig ที่คุณตั้งค่าไว้ในกำหนดค่าแอปพลิเคชันเซิร์ฟเวอร์เมื่อคุณดึงและประเมินเทมเพลต รวมถึงกำหนดค่าเหล่านี้ให้กับตัวแปร
  3. คุณเลือกตั้งค่าเงื่อนไขเพื่อใช้ค่ากับตัวอย่างแบบสุ่มของอินสแตนซ์หรือสัญญาณที่กำหนดเองที่คุณกำหนดได้อย่างถาวร ดูข้อมูลเพิ่มเติม เกี่ยวกับเงื่อนไขได้ที่ประเภทกฎเงื่อนไข
  4. เมื่อเพิ่มพารามิเตอร์เสร็จแล้ว ให้คลิกเผยแพร่การเปลี่ยนแปลง
  5. ตรวจสอบการเปลี่ยนแปลง แล้วคลิกเผยแพร่การเปลี่ยนแปลงอีกครั้ง

ขั้นตอนที่ 5: ทำให้ใช้งานได้ด้วย Cloud Functions หรือ Cloud Run

หากแอปพลิเคชันเซิร์ฟเวอร์มีขนาดเล็กและทำงานตามเหตุการณ์ คุณควรพิจารณา การติดตั้งใช้งานโค้ดโดยใช้ Cloud Functions เช่น สมมติว่าคุณมีแอปที่มีบทสนทนาของตัวละครซึ่งขับเคลื่อนโดย API ของ Generative AI (เช่น Google AI หรือ Vertex AI) ในกรณีนี้ คุณสามารถโฮสต์ ตรรกะการแสดงผล LLM ในฟังก์ชันที่แอปเรียกใช้ตามต้องการได้

หากคุณกำลังสร้างเว็บแอปที่แสดงผลฝั่งเซิร์ฟเวอร์ App Hosting รองรับเฟรมเวิร์กเว็บยอดนิยม

หรือคุณอาจพิจารณาใช้ Cloud Run หากต้องการทําให้แอปเซิร์ฟเวอร์ใช้งานได้ด้วย Cloud Run โปรดทําตามคําแนะนําในการเริ่มต้นอย่างรวดเร็ว: ทําให้บริการ Node.js ใช้งานได้ใน Cloud Run

ดูข้อมูลเพิ่มเติมเกี่ยวกับกรณีการใช้งานที่ดีที่สุดสำหรับ Cloud Run และ Cloud Functions ได้ที่ Cloud Functions กับ Cloud Run: เมื่อใดควรใช้ อย่างใดอย่างหนึ่ง