از Remote Config در محیط های سرور استفاده کنید


Firebase Remote Config پیکربندی سمت سرور با استفاده از Firebase Admin Python SDK نسخه ۶.۷.۰+ پشتیبانی می‌کند. این قابلیت به شما این امکان را می‌دهد که به صورت پویا رفتار و پیکربندی برنامه‌های سمت سرور را با استفاده از Remote Config مدیریت کنید. این شامل پیاده‌سازی‌های بدون سرور مانند Cloud Functions نیز می‌شود.

برخلاف SDK های کلاینت فایربیس که پیکربندی خاص کلاینت را از الگوی Remote Config دریافت می‌کنند، SDK سمت سرور Remote Config یک الگوی کامل Remote Config را از فایربیس دانلود می‌کند. سپس سرور شما می‌تواند الگو را با هر درخواست ورودی ارزیابی کند و از منطق خود برای ارائه یک پاسخ سفارشی با تأخیر بسیار کم استفاده کند. می‌توانید از شرط‌ها برای کنترل و سفارشی‌سازی پاسخ‌ها بر اساس درصدهای تصادفی و ویژگی‌های کلاینت تعریف شده در سیگنال‌های سفارشی استفاده کنید.

با Remote Config سمت سرور، می‌توانید:

  • پارامترهای پیکربندی را برای برنامه‌هایی که روی سرور شما اجرا می‌شوند یا از طریق آن قابل دسترسی هستند، تعریف کنید و مواردی مانند پیکربندی از راه دور پارامترها و اعلان‌های مدل هوش مصنوعی و سایر ادغام‌ها را برای اطمینان از ایمن ماندن کلیدهای API خود، امکان‌پذیر سازید.
  • پارامترها را به صورت پویا در پاسخ به تغییرات در محیط یا سایر تغییرات برنامه، مانند به‌روزرسانی پارامترهای LLM و نقاط پایانی مدل، تنظیم کنید.
  • با به‌روزرسانی از راه دور APIهایی که سرور شما فراخوانی می‌کند، هزینه‌ها را کنترل کنید.
  • پیکربندی‌های سفارشی را در لحظه برای کلاینت‌هایی که به سرور شما دسترسی دارند، ایجاد کنید.
  • ثبت کنید که کدام کلاینت‌ها مقدار پارامتر را دریافت کرده‌اند و از آن در Cloud Functions به عنوان بخشی از سیستم تأیید حق استفاده کنید.

شما می‌توانید Remote Config سمت سرور را روی Cloud Run، Cloud Functions یا محیط‌های سرور خود-میزبان مستقر کنید.

قبل از اینکه شروع کنی

برای ایجاد یک پروژه Firebase، تنظیم یک حساب کاربری سرویس و افزودن Firebase Python SDK به سرور خود، دستورالعمل‌های موجود در بخش «افزودن Firebase Admin SDK به سرور» را دنبال کنید.

مرحله 1: مقداردهی اولیه SDK پایتون Firebase Admin و تأیید درخواست‌های API

وقتی SDK مدیریت را بدون هیچ پارامتری مقداردهی اولیه می‌کنید، SDK از اعتبارنامه‌های پیش‌فرض برنامه گوگل استفاده می‌کند و گزینه‌ها را از متغیر محیطی GOOGLE_APPLICATION_CREDENTIALS می‌خواند. برای مقداردهی اولیه SDK و افزودن Remote Config :

import firebase_admin
import asyncio
import json

firebase_admin.initialize_app()

مرحله ۲: مقادیر پیش‌فرض پارامترها را برای برنامه سرور خود شناسایی کنید

متغیرهایی را در برنامه خود که می‌خواهید به صورت پویا با Remote Config به‌روزرسانی شوند، شناسایی کنید. سپس، در نظر بگیرید که کدام متغیرها باید به طور پیش‌فرض در برنامه شما تنظیم شوند و مقادیر پیش‌فرض آنها باید چه باشند. این تضمین می‌کند که برنامه شما حتی اگر اتصال آن به سرور Remote Config backend قطع شود، با موفقیت اجرا می‌شود.

برای مثال، اگر در حال نوشتن یک برنامه‌ی سرور هستید که یک تابع هوش مصنوعی مولد را مدیریت می‌کند، می‌توانید یک نام مدل پیش‌فرض، مقدمه‌ی اعلان و یک پیکربندی هوش مصنوعی مولد مانند موارد زیر تنظیم کنید:

نام پارامتر توضیحات نوع مقدار پیش‌فرض
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 پارامترهایی که باید به مدل ارسال شوند جی‌سون {"stopSequences": ["I hope this helps"], "temperature": 0.7, "maxOutputTokens": 512, "topP": 0.1, "topK": 20}

مرحله 3: برنامه سرور خود را پیکربندی کنید

پس از اینکه پارامترهایی را که می‌خواهید با Remote Config استفاده کنید تعیین کردید، برنامه خود را طوری پیکربندی کنید که مقادیر پیش‌فرض را تنظیم کند، الگوی Remote Config مخصوص سرور را دریافت کند و از مقادیر آن استفاده کند. مراحل زیر نحوه پیکربندی برنامه پایتون شما را شرح می‌دهد.

  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())
    
    

    از طرف دیگر، اگر از پایتون با Cloud Functions استفاده می‌کنید، می‌توانید از get_server_template ناهمزمان برای مقداردهی اولیه و بارگذاری الگو در یک مرحله استفاده کنید:

    # Initialize server-side Remote Config
    template = await remote_config.get_server_template()
    
  2. برای اطمینان از اینکه برنامه شما حتی در صورت قطع اتصال به سرور Remote Config backend با موفقیت اجرا می‌شود، برای هر پارامتر به برنامه خود مقادیر پیش‌فرض اضافه کنید. برای انجام این کار، یک 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 برای بازیابی الگوی سرور مورد نیاز است. می‌توانید این الگو را با استفاده از تابع template.to_json به فرمت 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 نسخه ۶.۷.۰ و بالاتر در دسترس هستند.

    برای مثال، می‌توانید یک شناسه نصب Firebase را به عنوان randomization_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. در مرحله بعد، مقادیر پارامترهای مورد نیاز خود را از ثابت config استخراج کنید. 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 دریافت می‌کنید.

مرحله ۴: تنظیم مقادیر پارامترهای مختص سرور در Remote Config

در مرحله بعد، یک الگوی Remote Config سرور ایجاد کنید و پارامترها و مقادیر را برای استفاده در برنامه خود پیکربندی کنید.

برای ایجاد یک الگوی Remote Config مخصوص سرور:

  1. صفحه پارامترهای Remote Config کنسول Firebase را باز کنید و از انتخابگر Client/Server ، گزینه Server را انتخاب کنید.
  2. پارامترهای Remote Config را با همان نام‌ها و انواع داده‌ای که در برنامه خود تعریف کرده‌اید، تعریف کنید و مقادیر را ارائه دهید. این مقادیر، default_config تنظیم شده در پیکربندی برنامه سرور شما را هنگام دریافت و ارزیابی الگو و اختصاص این مقادیر به متغیرهای شما، لغو می‌کنند.
  3. به صورت اختیاری، می‌توانید شرایطی را تنظیم کنید تا مقادیر به طور مداوم بر روی یک نمونه تصادفی از نمونه‌ها یا سیگنال‌های سفارشی که تعریف می‌کنید اعمال شوند. برای اطلاعات بیشتر در مورد شرایط، به انواع قوانین شرایط مراجعه کنید.
  4. وقتی افزودن پارامترها تمام شد، روی انتشار تغییرات کلیک کنید.
  5. تغییرات را مرور کنید و دوباره روی انتشار تغییرات کلیک کنید.

مرحله ۵: استقرار با Cloud Functions یا Cloud Run

اگر برنامه سرور شما سبک و رویدادمحور است، باید استقرار کد خود را با استفاده Cloud Functions در نظر بگیرید. به عنوان مثال، اگر برنامه‌ای دارید که شامل دیالوگ‌های کاراکتری است که توسط یک API هوش مصنوعی مولد (مثلاً Google AI یا Vertex AI ) پشتیبانی می‌شود. در این حالت، می‌توانید منطق سرویس LLM خود را در تابعی که برنامه شما در صورت تقاضا فراخوانی می‌کند، میزبانی کنید.

در غیر این صورت، می‌توانید Cloud Run را در نظر بگیرید. برای استقرار برنامه سرور خود با Cloud Run، راهنمای موجود در Quickstart: Deploy a Python service to Cloud Run را دنبال کنید.

برای اطلاعات بیشتر در مورد بهترین موارد استفاده از Cloud Run و Cloud Functions ، به Cloud Functions در مقابل Cloud Run: چه زمانی باید از یکی به جای دیگری استفاده کرد، مراجعه کنید.