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

ตอนนี้การกำหนดค่าระยะไกลของ 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

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

ขั้นตอนที่ 4: กำหนดค่าพารามิเตอร์เฉพาะเซิร์ฟเวอร์ในการกำหนดค่าระยะไกล

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

วิธีสร้างเทมเพลตการกำหนดค่าระยะไกลเฉพาะเซิร์ฟเวอร์

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

ขั้นตอนที่ 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: กรณีที่ควรใช้กรณีใดมากกว่ากัน