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


Firebase Remote Config รองรับการกำหนดค่าฝั่งเซิร์ฟเวอร์โดยใช้ Firebase Admin Python SDK v6.7.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 Python SDK ลงในเซิร์ฟเวอร์

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

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

import firebase_admin
import asyncio
import json

firebase_admin.initialize_app()

ขั้นตอนที่ 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 เฉพาะเซิร์ฟเวอร์ และใช้ค่าของเทมเพลต ขั้นตอนต่อไปนี้จะอธิบายวิธีกําหนดค่าแอปพลิเคชัน Python

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

    from firebase_admin import remote_config
    
    # Initialize server-side Remote Config
    template = remote_config.init_server_template()
    
    # Load the template from the backend
     asyncio.run(template.load())
    
    

    หรือหากใช้ Python กับ Cloud Functions คุณ สามารถใช้ get_server_template แบบอะซิงโครนัสเพื่อเริ่มต้นและโหลด เทมเพลตได้ในขั้นตอนเดียว

    # Initialize server-side Remote Config
    template = await remote_config.get_server_template()
    
  2. หากต้องการให้แอปพลิเคชันทํางานได้สําเร็จแม้ว่าการเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ของ Remote Config จะถูกขัดจังหวะ ให้เพิ่มค่าเริ่มต้นสําหรับแต่ละพารามิเตอร์ลงในแอป โดยทําดังนี้ เพิ่ม default_config ภายในฟังก์ชันเทมเพลต init_server_template หรือ get_server_template

    template = remote_config.init_server_template({
      default_config: {
        '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
    asyncio.run(template.load())
    
    

    อีกวิธีหนึ่งในการเริ่มต้นเทมเพลตคือการใช้ฟังก์ชัน get_server_template เพื่อดึงเทมเพลตเซิร์ฟเวอร์ที่จำเป็น คุณ สามารถแปลงเทมเพลตนี้เป็นรูปแบบ JSON ได้โดยใช้ฟังก์ชัน template.to_json คุณจัดเก็บเทมเพลต JSON นี้ไว้ในเครื่องได้ จากนั้นคุณจะ เริ่มต้นเทมเพลต JSON นี้ได้โดยใช้ฟังก์ชัน init_server_template

  3. หลังจากโหลดเทมเพลตแล้ว ให้ใช้ template.evaluate() เพื่อนำเข้าพารามิเตอร์และ ค่าจากเทมเพลต

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

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

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

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

    # Add template parameters to `config`. Evaluates the
    # template and returns the parameter value assigned to
    # the group assigned to the {randomization_id} and version.
    config = template.evaluate({
      'randomization_id': "2ac93c28-c459-4760-963d-a3974ec26c04",
      'version': "1.0",
      'platform': "Android"
    })
    
    
  5. จากนั้น แยกค่าพารามิเตอร์ที่ต้องการจาก ค่าคงที่ของการกำหนดค่า ใช้ getters เพื่อส่งค่าจาก Remote Config ไปยังรูปแบบที่คาดไว้ ระบบรองรับประเภทต่อไปนี้

    • บูลีน: get_bool
    • จำนวนเต็ม: get_int
    • ลอย: get_float
    • สตริง: get_string
    • แหล่งที่มาของมูลค่า: get_value_source

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

    # Replace defaults with values from Remote Config.
    generation_config = json.loads(config.get_string('generation_config'))
    is_ai_enabled = config.get_bool('is_ai_enabled')
    model = config.get_string('model_name')
    
    # Generates a prompt comprised of the Remote Config
    # parameter and prepends it to the user prompt.
    prompt = f"{config.get_string('preamble_prompt')}{req.args.get('prompt')}"
    
  6. หากเซิร์ฟเวอร์ทำงานเป็นเวลานาน ซึ่งต่างจากสภาพแวดล้อมแบบไร้เซิร์ฟเวอร์ ให้โหลดเทมเพลตซ้ำเป็นระยะๆ เพื่อให้แน่ใจว่าคุณดึงข้อมูลเทมเพลตล่าสุดจากRemote Configเซิร์ฟเวอร์

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

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

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

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

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

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

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

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