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

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

ซึ่งแตกต่างจาก SDK ฝั่งไคลเอ็นต์ของ Firebase ที่ดึงข้อมูลการกําหนดค่าเฉพาะไคลเอ็นต์ที่มาจากเทมเพลต Remote Config ฝั่งเซิร์ฟเวอร์ 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 และอ่านตัวเลือกจากตัวแปรสภาพแวดล้อม 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 ชื่อ Model 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: กำหนดค่าแอปพลิเคชันเซิร์ฟเวอร์

หลังจากกําหนดพารามิเตอร์ที่ต้องการใช้กับ 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 หรือรหัสผู้ใช้ เพื่อให้มั่นใจว่าระบบจะเพิ่มผู้ใช้แต่ละรายที่ติดต่อเซิร์ฟเวอร์ของคุณลงในกลุ่มแบบสุ่มที่เหมาะสม 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 และ generationConfig ตัวอย่างวิธีเข้าถึงค่าของ 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 สำหรับเซิร์ฟเวอร์โดยเฉพาะ

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

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

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

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

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