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

يتيح Firebase Remote Config الآن الإعداد من جهة الخادم باستخدام حزمة تطوير البرامج (SDK) لمشرف Firebase، الإصدار 12.1.0 أو الإصدارات الأحدث تساهم هذه الإمكانية الجديدة في إدارة سلوك وتهيئة الخادم من جهة الخادم بشكل ديناميكي التطبيقات التي تستخدم Remote Config. ويشمل ذلك عمليات التنفيذ التي لا تتطلّب خادمًا مثل Cloud Functions.

على عكس حِزم تطوير البرامج (SDK) لعملاء Firebase التي تُستخدَم لاسترداد إعدادات خاصة بالعملاء مشتقة من نموذج Remote Config، تُنزِّل حزمة تطوير البرامج (SDK)Remote Config من جهة الخادم نموذج Remote Configكاملًا من Firebase. ويمكن للخادم بعد ذلك تقييم النموذج باستخدام كل الطلب الوارد واستخدام منطقه الخاص لتقديم رد مخصص وقت استجابة سريع جدًا. يمكنك استخدام الشروط التحكم في الردود وتخصيصها استنادًا إلى نسب مئوية عشوائية كما هو موضح في الإشارات المخصّصة:

باستخدام Remote Config من جهة الخادم، يمكنك إجراء ما يلي:

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

يمكنك نشر Remote Config من جهة الخادم على Cloud Run. Cloud Functions، أو بيئات الخادم ذاتية الاستضافة.

قبل البدء

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

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

عند إعداد حزمة SDK للمشرف بدون مَعلمات، تستخدِم حزمة SDK مَعلمات Google Application Default Credentials وتقرأ الخيارات من متغيّر 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.

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

اسم المَعلمة الوصف النوع القيمة التلقائية
model_name اسم واجهة برمجة تطبيقات النموذج سلسلة 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().
    • في حال استخدام إشارات مخصّصة، حدِّد السمات وقيمها. تتوفّر الإشارات المخصّصة مع الإصدار 12.5.0 من حزمة تطوير البرامج (SDK) لمشرف Firebase والإصدارات الأحدث

    على سبيل المثال، يمكنك إعداد عملية تثبيت لمنصة 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. فتح مَعلمات Remote Config في وحدة تحكُّم Firebase ، ومن أداة اختيار العميل/الخادم، اختَر الخادم.
  2. حدِّد Remote Config مَعلمة بالأسماء وأنواع البيانات نفسها التي استخدمتها في المَعلمات التي حدّدتها في تطبيقك، وقدِّم قيمًا لها. هذه تلغي defaultConfig التي حددتها في ضبط الخادم عند جلب وتقييم القالب وتعيين هذه القيم للمتغيرات.
  3. يمكنك اختياريًا ضبط شروط لتطبيق القيم باستمرار على ملف شخصي عشوائي من النماذج أو الإشارات المخصّصة التي تحدّدها. لمزيد من المعلومات حول الشروط، اطّلِع على قاعدة الشرط الأنواع.
  4. عند الانتهاء من إضافة المَعلمات، انقر على نشر التغييرات.
  5. راجِع التغييرات وانقر على نشر التغييرات مرة أخرى.

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

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

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

لمزيد من المعلومات عن أفضل حالات استخدام Cloud Run وCloud Functions، يُرجى الاطّلاع على المقالة Cloud Functions مقارنةً بـ Cloud Run: حالات استخدام أحدهما بدلاً من الآخر.