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


Firebase Remote Config รองรับการกำหนดค่าฝั่งเซิร์ฟเวอร์โดยใช้ Firebase Admin Node.js SDK v12.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: เริ่มต้น Node.js SDK ของ Firebase Admin และให้สิทธิ์คำขอ API

เมื่อเริ่มต้น Admin SDK โดยไม่มีพารามิเตอร์ SDK จะใช้ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน Google และอ่านตัวเลือกจากตัวแปร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 ขึ้นไป

    เช่น คุณอาจตั้งค่ารหัสการติดตั้ง Firebase เป็นrandomizationId หรือ User 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 ในฟังก์ชันที่แอปเรียกใช้ตามต้องการได้

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

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