استخدام ميزة "الإعداد عن بُعد" في بيئات الخادم

أصبحت ميزة "الإعداد عن بُعد في Firebase" متوافقة الآن مع الإعدادات من جهة الخادم باستخدام الإصدار 12.1.0 من حزمة تطوير البرامج (SDK) الخاصة بـ Node.js في Firebase المشرف على Firebase. وتتيح لك هذه الميزة الجديدة إدارة سلوك وضبط التطبيقات من جهة الخادم بشكل ديناميكي باستخدام ميزة "الإعداد عن بُعد". ويشمل ذلك عمليات التنفيذ بدون خادم مثل Cloud Functions.

على عكس حزم تطوير البرامج (SDK) الخاصة بعميل Firebase، التي تجلب إعدادات خاصة بالعميل مستقلة من نموذج "الإعداد عن بُعد"، تعمل حزمة تطوير البرامج (SDK) لميزة "الإعداد عن بُعد" من جهة الخادم على تنزيل نموذج كامل لميزة "الإعداد عن بُعد" من Firebase. ويمكن للخادم بعد ذلك تقييم النموذج مع كل طلب وارد واستخدام منطقه الخاص لتقديم استجابة مخصّصة في وقت استجابة سريع جدًا.

باستخدام ميزة "الإعداد عن بُعد من جهة الخادم"، يمكنك إجراء ما يلي:

  • يجب تحديد مَعلمات الإعدادات للتطبيقات التي تعمل على خادمك أو يتم الوصول إليها من خلاله، مع السماح بحالات استخدام مثل ضبط مَعلمات نموذج الذكاء الاصطناعي (AI) والطلبات وعمليات الدمج الأخرى عن بُعد، لضمان الحفاظ على أمان مفاتيح واجهة برمجة التطبيقات.
  • يمكنك تعديل المَعلمات ديناميكيًا استجابةً للتغييرات التي تطرأ على البيئة أو للتغييرات الأخرى في التطبيقات، مثل تعديل مَعلمات النموذج اللغوي الكبير (LLM) ونقاط نهاية النماذج.
  • يمكنك التحكم في التكاليف من خلال تحديث واجهات برمجة التطبيقات التي يطلبها الخادم عن بُعد.
  • يمكنك إنشاء عمليات ضبط مخصصة بسرعة للعملاء الذين يمكنهم الوصول إلى خادمك.
  • سجِّل العملاء الذين تلقّوا قيمة مَعلمة واستخدِم هذه القيمة في Cloud Functions كجزء من نظام التحقّق من الاستحقاق.

يمكنك تفعيل ميزة "الإعداد عن بُعد من جهة الخادم" في Cloud Run أو Cloud Functions أو بيئات الخادم الذاتية الاستضافة.

قبل البدء

اتّبِع التعليمات الواردة في إضافة حزمة تطوير البرامج (SDK) لمشرف Firebase إلى خادمك لإنشاء مشروع على Firebase وإعداد حساب خدمة وإضافة حزمة SDK Node.js لمشرف Firebase إلى خادمك.

الخطوة 1: إعداد حزمة تطوير برامج Node.js لمشرف Firebase والسماح بطلبات واجهة برمجة التطبيقات

عند إعداد "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: تحديد قيم المَعلمات التلقائية لتطبيق الخادم

حدِّد المتغيّرات في تطبيقك التي تريد تعديلها ديناميكيًا من خلال ميزة "الإعداد عن بُعد". بعد ذلك، ضع في اعتبارك المتغيرات التي يجب تعيينها افتراضيًا في تطبيقك وما يجب أن تكون قيمها الافتراضية. ويضمن ذلك تشغيل تطبيقك بنجاح حتى في حال انقطاع اتصاله بخادم الخلفية "الإعداد عن بُعد".

على سبيل المثال، إذا كنت تكتب تطبيقًا لخادم يدير إحدى وظائف الذكاء الاصطناعي التوليدي، يمكنك ضبط اسم نموذج تلقائي ومقدّمة طلب وإعدادات للذكاء الاصطناعي التوليدي، كما يلي:

اسم المَعلمة الوصف النوع القيمة التلقائية
model_name اسم واجهة برمجة تطبيقات النموذج String gemini-1.5-pro
preamble_prompt إن المطالبة بالإضافة في البداية إلى استعلام المستخدم String 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، يمكنك استخدام 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. إذا كان الخادم يعمل لفترة طويلة، مقارنةً بالبيئة بدون خادم، يمكنك استخدام setInterval لإعادة تحميل النموذج بشكل دوري لضمان جلب أحدث نموذج من خادم "الإعداد عن بُعد" بشكل دوري.

الخطوة 4: ضبط قيم المَعلمات الخاصة بالخادم في ميزة "الإعداد عن بُعد"

بعد ذلك، يمكنك إنشاء نموذج "الإعداد عن بُعد" للخادم وضبط المعلمات والقيم لاستخدامها في تطبيقك.

لإنشاء نموذج "الإعداد عن بُعد" الخاص بالخادم:

  1. افتح صفحة مَعلمات "الإعداد عن بُعد في وحدة تحكُّم Firebase"، ثم اختَر الخادم من أداة اختيار العميل/الخادم.
  2. حدِّد مَعلمات "الإعداد عن بُعد" باستخدام الأسماء وأنواع البيانات نفسها مثل المَعلمات التي حدّدتها في تطبيقك وأدخِل القيم. ستلغي هذه القيم defaultConfig الذي حدّدته في ضبط تطبيق الخادم عند استرجاع النموذج وتقييمه وتحديد هذه القيم للمتغيّرات.
  3. يمكنك اختياريًا ضبط شروط النسبة المئوية لتطبيق قيمة بشكل مستمر على عيّنة عشوائية من المثيلات. لمزيد من المعلومات عن شروط النسبة المئوية، يمكنك الاطّلاع على النسبة المئوية العشوائية للمستخدم.
  4. عند الانتهاء من إضافة المَعلمات، انقر على نشر التغييرات.
  5. راجِع التغييرات وانقر على نشر التغييرات مرة أخرى.

الخطوة 5: النشر باستخدام دوال Cloud أو تشغيل Cloud

إذا كان تطبيق الخادم خفيفًا ومستندًا إلى الأحداث، ننصحك بنشر الرمز باستخدام الوظائف السحابية. على سبيل المثال، لنفترض أنّ لديك تطبيقًا يتضمّن حوارًا مع شخصيات يستند إلى واجهة برمجة تطبيقات الذكاء الاصطناعي التوليدي (مثل Google AI أو Vertex AI). في هذه الحالة، يمكنك استضافة منطق عرض النموذج اللغوي الكبير في وظيفة يستدعيها تطبيقك عند الطلب.

إذا كنت تنوي أن يكون تطبيقك طويل الأمد (على سبيل المثال، تطبيق ويب يتضمّن مواد عرض)، يمكنك استخدام التشغيل في السحابة الإلكترونية. لنشر تطبيق الخادم باستخدام Cloud Run، اتّبِع الدليل الوارد في المقالة Quickstart: نشر خدمة Node.js في Cloud Run.

لمزيد من المعلومات حول أفضل حالات استخدام Cloud Run وCloud Functions، يُرجى الاطّلاع على الوظائف في السحابة الإلكترونية مقابل وظائف Cloud Run: متى يجب استخدام وظيفة على أخرى.