إنشاء تجارب مختلطة باستخدام النماذج المستضافة على الجهاز وعلى السحابة الإلكترونية


يمكنك إنشاء تطبيقات وميزات مستندة إلى الذكاء الاصطناعي باستخدام الاستنتاج المختلط باستخدام Firebase AI Logic. تتيح ميزة الاستنتاج المختلط تنفيذ الاستنتاج باستخدام نماذج على الجهاز عند توفّرها، والرجوع بسلاسة إلى نماذج مستضافة على السحابة الإلكترونية في حال عدم توفّرها.

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

الانتقال إلى أمثلة الرموز البرمجية

حالات الاستخدام المقترَحة والإمكانات المتاحة

حالات الاستخدام المقترَحة:

  • عند استخدام نموذج على الجهاز لإجراء الاستنتاجات، يوفّر ذلك ما يلي:

    • خصوصية محسّنة
    • السياق المحلي
    • الاستنتاج بدون أي تكلفة
    • الوظائف المتاحة بلا إنترنت
  • يوفّر استخدام الوظائف المختلطة ما يلي:

    • الوصول إلى ‎100% من جمهورك بغض النظر عن مدى توفّر طراز الجهاز

الإمكانات والميزات المتاحة للاستنتاج على الجهاز:

  • إنشاء محتوى من خطوة واحدة وبث المحتوى وغير البث
  • إنشاء نص من إدخال نصي فقط
  • إنشاء نص من إدخال نص وصورة، وتحديدًا أنواع الصور المُدخلة بتنسيق JPEG وPNG
  • إنشاء إخراج منظَّم، بما في ذلك ملفات JSON وقوائم القيم المحدّدة

البدء

يوضّح لك هذا الدليل كيفية بدء استخدام Firebase AI Logic حزمة SDK لأجل الويب لإجراء الاستنتاج المختلط.

تستخدِم الاستنتاج باستخدام نموذج على الجهاز Prompt API من Chrome، بينما تستخدِم الاستنتاج باستخدام نموذج مستضاف على السحابة الإلكترونية مقدّم خدمة Gemini API الذي اخترته (إما Gemini Developer API أو Vertex AI Gemini API).

الخطوة 1: إعداد Chrome وواجهة برمجة التطبيقات Prompt API لإجراء الاستنتاج على الجهاز فقط

  1. نزِّل أحدث إصدار من إصدار مطوّري البرامج من Chrome.

    تتوفّر ميزة الاستنتاج على الجهاز من الإصدار 138 من Chrome والإصدارات الأحدث.

  2. فعِّل واجهة برمجة التطبيقات Prompt API لمثيل Chrome من خلال ضبط العلامات التالية:

    • chrome://flags/#optimization-guide-on-device-model: اضبط القيمة على مفعَّل.
    • chrome://flags/#prompt-api-for-gemini-nano: اضبط القيمة على مفعَّل.

    يمكنك الاطّلاع على مزيد من المعلومات حول استخدام واجهات برمجة التطبيقات على المضيف المحلي في مستندات Chrome. يمكنك اختياريًا الانضمام إلى برنامج معاينة الإصدارات التجريبية من Chrome (EPP) لتقديم ملاحظاتك.

  3. فعِّل النموذج المتعدّد الوسائط على الجهاز فقط من خلال ضبط العلامة التالية:

    • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input: اضبط القيمة على مفعَّل.
  4. التحقّق من واجهة برمجة التطبيقات محليًا:

    1. أعِد تشغيل Chrome.

    2. افتح أدوات المطوّرين > وحدة التحكّم.

    3. نفِّذ ما يلي:

      await LanguageModel.availability();
      
    4. تأكَّد من أنّ النتيجة هي available أو downloading أو downloadable. .

    5. إذا كان الناتج هو downloadable، يمكنك بدء تنزيل النموذج من خلال تشغيل await LanguageModel.create();. بخلاف ذلك، سيؤدي الطلب الأول لإجراء الاستنتاج على الجهاز إلى بدء تنزيل نموذج في الخلفية، ما قد يستغرق عدة دقائق.

الخطوة 2: إعداد مشروع على Firebase وربط تطبيقك بـ Firebase

  1. سجِّل الدخول إلى وحدة تحكُّم Firebase، ثم اختَر مشروعك على Firebase.

  2. في وحدة تحكُّم Firebase، انتقِل إلى صفحة Firebase AI Logic.

  3. انقر على Get started (البدء) لبدء سير عمل إرشادي يساعدك في إعداد واجهات برمجة التطبيقات المطلوبة والموارد لمشروعك.

  4. اختَر مقدّم خدمة "Gemini API" الذي تريد استخدامه مع IDE و Firebase AI Logic حِزم تطوير البرامج (SDK). يمكنك في أي وقت إعداد مقدّم واجهة برمجة التطبيقات الآخر واستخدامه لاحقًا، إذا أردت ذلك.

    • Gemini Developer API: الفوترة اختيارية (متاحة في خطة Spark غير المدفوعة)
      ستفعّل وحدة التحكّم واجهات برمجة التطبيقات المطلوبة وستُنشئ مفتاح Gemini لواجهة برمجة التطبيقات في مشروعك. يمكنك إعداد الفوترة لاحقًا إذا أردت ترقية خطة الأسعار.

    • Vertex AI Gemini API: الفوترة مطلوبة (تتطلب خطة الأسعار Blaze للدفع حسب الاستخدام)
      ستساعدك وحدة التحكّم في إعداد الفوترة وتفعيل واجهات برمجة التطبيقات المطلوبة في مشروعك.

  5. اتّبِع التعليمات الظاهرة على الشاشة لتسجيل تطبيقك وربطه بمنصّة Firebase، إذا طُلب منك ذلك في سير عمل وحدة التحكّم.

  6. انتقِل إلى الخطوة التالية في هذا الدليل لإضافة حزمة SDK إلى تطبيقك.

الخطوة 3: إضافة حزمة تطوير البرامج (SDK)

توفّر مكتبة Firebase إمكانية الوصول إلى واجهات برمجة التطبيقات للتفاعل مع نماذج التوليدية. يتم تضمين المكتبة كجزء من حزمة تطوير البرامج (SDK) لبرنامج Firebase JavaScript على الويب.

  1. ثبِّت حزمة تطوير البرامج (SDK) لبرنامج Firebase باستخدام JavaScript على الويب باستخدام npm.

    يتم إصدار الميزة المختلطة ضمن علامة npm مختلفة، لذا احرص على إدراجها في أمر التثبيت.

    npm install firebase@eap-ai-hybridinference
    
  2. إعداد Firebase في تطبيقك:

    import { initializeApp } from "firebase/app";
    
    // TODO(developer) Replace the following with your app's Firebase configuration
    // See: https://firebase.google.com/docs/web/learn-more#config-object
    const firebaseConfig = {
      // ...
    };
    
    // Initialize FirebaseApp
    const firebaseApp = initializeApp(firebaseConfig);
    

الخطوة 4: بدء الخدمة وإنشاء مثيل نموذج

انقر على مزوّد Gemini API لعرض المحتوى الخاص بالمزوّد والرمز البرمجي في هذه الصفحة.

قبل إرسال طلب إلى نموذج Gemini، عليك بدء الخدمة ل موفِّر واجهة برمجة التطبيقات الذي اخترته وإنشاء مثيل GenerativeModel.

اضبط mode على أحد الخيارَين التاليَين:

  • prefer_on_device: لضبط حزمة SDK لاستخدام النموذج على الجهاز إذا كان متاحًا، أو استخدام النموذج المستضاف على السحابة الإلكترونية كخيار احتياطي

  • only_on_device: لضبط حزمة SDK لاستخدام النموذج على الجهاز أو لطرح استثناء

  • only_in_cloud: لضبط حزمة SDK كي لا تستخدم أبدًا النموذج على الجهاز

بشكلٍ تلقائي، عند استخدام prefer_on_device أو only_in_cloud، يكون النموذج المستضاف على السحابة الإلكترونية هو gemini-2.0-flash-lite، ولكن يمكنك تجاوز الإعداد التلقائي.

import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` instance
// Set the mode, for example to use on-device model when possible
const model = getGenerativeModel(ai, { mode: "prefer_on_device" });

إرسال طلب طلب إلى نموذج

يقدّم هذا القسم أمثلة على كيفية إرسال أنواع مختلفة من الإدخال ل إنشاء أنواع مختلفة من النتائج، بما في ذلك:

إذا كنت تريد إنشاء إخراج منظَّم (مثل JSON أو التعدادات)، عليك استخدام أحد أمثلة "إنشاء نص" التالية بالإضافة إلى ضبط النموذج للردّ وفقًا لمخطّط مقدَّم.

إنشاء نص من إدخال نصي فقط

قبل تجربة هذا العيّنة، تأكَّد من إكمال القسم البدء في هذا الدليل.

يمكنك استخدام generateContent() لإنشاء نص من طلب يحتوي على نص:

// Imports + initialization of FirebaseApp and backend service + creation of model instance

// Wrap in an async function so you can use await
async function run() {
  // Provide a prompt that contains text
  const prompt = "Write a story about a magic backpack."

  // To generate text output, call `generateContent` with the text input
  const result = await model.generateContent(prompt);

  const response = result.response;
  const text = response.text();
  console.log(text);
}

run();

إنشاء نص من إدخال نص وصورة (متعدّد الوسائط)

قبل تجربة هذا العيّنة، تأكَّد من إكمال القسم البدء في هذا الدليل.

يمكنك استخدام generateContent() لإنشاء نص من طلب يحتوي على ملفات نصية وملفات صور، مع تقديم mimeType لكل ملف input (ملف إدخال) والملف نفسه.

أنواع صور الإدخال المتوافقة مع الاستنتاج على الجهاز هي PNG وJPEG.

// Imports + initialization of FirebaseApp and backend service + creation of model instance

// Converts a File object to a Part object.
async function fileToGenerativePart(file) {
  const base64EncodedDataPromise = new Promise((resolve) => {
    const reader = new FileReader();
    reader.onloadend = () => resolve(reader.result.split(',')[1]);
    reader.readAsDataURL(file);
  });
  return {
    inlineData: { data: await base64EncodedDataPromise, mimeType: file.type },
  };
}

async function run() {
  // Provide a text prompt to include with the image
  const prompt = "Write a poem about this picture:";

  const fileInputEl = document.querySelector("input[type=file]");
  const imagePart = await fileToGenerativePart(fileInputEl.files[0]);

  // To generate text output, call `generateContent` with the text and image
  const result = await model.generateContent([prompt, imagePart]);

  const response = result.response;
  const text = response.text();
  console.log(text);
}

run();

ما هي الإجراءات الأخرى التي يمكنك اتّخاذها؟

بالإضافة إلى الأمثلة أعلاه، يمكنك أيضًا استخدام أوضاع استنتاج بديلة، تجاوز النموذج التلقائي الاحتياطي، استخدام إعدادات النموذج للتحكّم في الردود.

استخدام أوضاع الاستنتاج البديلة

استخدَمت الأمثلة أعلاه وضع prefer_on_device لضبط حزمة تطوير البرامج (SDK) لاستخدام نموذج على الجهاز إذا كان متاحًا، أو استخدام نموذج مستضاف على السحابة الإلكترونية كخيار احتياطي. تقدّم حزمة SDK خيارَين بديلَين لوضع الاستنتاج: only_on_device وonly_in_cloud.

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

    const model = getGenerativeModel(ai, { mode: "only_on_device" });
    
  • استخدِم وضع only_in_cloud لكي لا تتمكّن حزمة SDK من استخدام نموذج مستضاف على السحابة الإلكترونية إلا.

    const model = getGenerativeModel(ai, { mode: "only_in_cloud" });
    

إلغاء نموذج النسخ الاحتياطي التلقائي

عند استخدام وضع prefer_on_device، ستستعين حزمة SDK بدلاً من ذلك بأحد نماذج الاستضافة على السحابة الإلكترونية إذا لم يكن نموذج الاستضافة على الجهاز متاحًا. الإعداد التلقائي لنموذج النسخ الاحتياطي المستضاف على السحابة الإلكترونية هو gemini-2.0-flash-lite. وهذا النموذج المستضاف على السحابة الإلكترونية هو أيضًا الإعداد التلقائي عند استخدام وضعonly_in_cloud.

يمكنك استخدام خيار الإعداد inCloudParams لتحديد نموذج بديل تلقائي مستضاف على السحابة الإلكترونية:

const model = getGenerativeModel(ai, {
  mode: 'prefer_on_device',
  inCloudParams: {
    model: "gemini-2.0-flash"
  }
});

يمكنك العثور على أسماء النماذج لجميع نماذج Gemini المتوافقة.

استخدام إعدادات النموذج للتحكّم في الردود

في كل طلب موجَّه إلى نموذج، يمكنك إرسال إعدادات النموذج للتحكّم في كيفية إنشاء النموذج للردّ. توفّر النماذج المستضافة على السحابة الإلكترونية والنماذج على الجهاز خيارات إعداد مختلفة.

يتم الاحتفاظ بالإعدادات طوال مدة عمل النسخة. إذا أردت استخدام إعدادات مختلفة، أنشئ مثيلًا جديدًا من GenerativeModel باستخدام تلك الإعدادات.

ضبط الإعدادات لنموذج مستضاف على السحابة الإلكترونية

استخدِم الخيار inCloudParams لضبط نموذج Gemini مستضاف على السحابة الإلكترونية. اطّلِع على مزيد من المعلومات عن المَعلمات المتاحة.

const model = getGenerativeModel(ai, {
  mode: 'prefer_on_device',
  inCloudParams: {
    model: "gemini-2.0-flash"
    temperature: 0.8,
    topK: 10
  }
});

ضبط الإعدادات لنموذج على الجهاز

يُرجى العِلم أنّ الاستنتاج باستخدام نموذج على الجهاز يستخدم Prompt API من Chrome.

استخدِم الخيار onDeviceParams لضبط نموذج على الجهاز. اطّلِع على مزيد من المعلومات عن المَعلمات المتاحة.

const model = getGenerativeModel(ai, {
  mode: 'prefer_on_device',
  onDeviceParams: {
    createOptions: {
      temperature: 0.8,
      topK: 8
    }
  }
});

ضبط الإعدادات للإخراج منظَّم

يمكن إنشاء مخرجات منظَّمة (مثل JSON والعناصر المحدَّدة) لإجراء المحاولة باستخدام النماذج المستضافة على السحابة الإلكترونية والنماذج على الجهاز.

لإجراء الاستنتاج المختلط، استخدِم كلاً من inCloudParams و onDeviceParams لضبط النموذج للردّ بإخراج منظَّم. بالنسبة إلى الأوضاع الأخرى، استخدِم الإعدادات السارية فقط.

  • بالنسبة إلى inCloudParams: حدِّد responseMimeType المناسب (application/json في هذا المثال) بالإضافة إلى responseSchema الذي تريد أن يستخدمه النموذج.

  • بالنسبة إلى onDeviceParams: حدِّد responseConstraint الذي تريد أن يستخدمه النموذج.

إخراج JSON

يُعدّل المثال التالي مثال إخراج JSON العام للاستنتاج المختلط:

import {
  getAI,
  getGenerativeModel,
  Schema
} from "firebase/ai";

const jsonSchema = Schema.object({
 properties: {
    characters: Schema.array({
      items: Schema.object({
        properties: {
          name: Schema.string(),
          accessory: Schema.string(),
          age: Schema.number(),
          species: Schema.string(),
        },
        optionalProperties: ["accessory"],
      }),
    }),
  }
});

const model = getGenerativeModel(ai, {
  mode: 'prefer_on_device',
  inCloudParams: {
    model: "gemini-2.0-flash"
    generationConfig: {
      responseMimeType: "application/json",
      responseSchema: jsonSchema
    },
  }
  onDeviceParams: {
    promptOptions: {
      responseConstraint: jsonSchema
    }
  }
});
ناتج التعداد

كما هو موضح أعلاه، ولكن مع تعديل المستندات حول إخراج التعداد للاستنتاج المختلط:

// ...

const enumSchema = Schema.enumString({
  enum: ["drama", "comedy", "documentary"],
});

const model = getGenerativeModel(ai, {

// ...

    generationConfig: {
      responseMimeType: "text/x.enum",
      responseSchema: enumSchema
    },

// ...

الميزات غير المتاحة بعد للتحليل على الجهاز

بما أنّ هذا الإصدار تجريبي، لا تتوفّر بعض إمكانات Web SDK لتحليل على الجهاز. الميزات التالية غير متاحة بعد لتحليل البيانات على الجهاز (ولكنها تكون متاحة عادةً للقيام بتحليل البيانات المستند إلى السحابة الإلكترونية).

  • إنشاء نص من أنواع ملفات صور أخرى غير JPEG وPNG

    • يمكن الرجوع إلى النموذج المستضاف على السحابة الإلكترونية، ولكن سيؤدي وضع only_on_device إلى ظهور خطأ.
  • إنشاء نص من مدخلات الصوت والفيديو والمستندات (مثل ملفات PDF)

    • يمكن الرجوع إلى النموذج المستضاف على السحابة الإلكترونية، ولكن سيؤدي وضع only_on_device إلى ظهور خطأ.
  • إنشاء صور باستخدام نماذج Gemini أو Imagen

    • يمكن الرجوع إلى النموذج المستضاف على السحابة الإلكترونية، ولكن سيؤدي وضع only_on_device إلى ظهور خطأ.
  • تقديم الملفات باستخدام عناوين URL في الطلبات المتعدّدة الوسائط يجب تقديم الملفات كข้อมูล مضمّنة في النماذج على الجهاز.

  • محادثة متعددة الخطوات

    • يمكن الرجوع إلى النموذج المستضاف على السحابة الإلكترونية، ولكن سيؤدي وضع only_on_device إلى ظهور خطأ.
  • البث الثنائي الاتجاه باستخدام Gemini Live API

    • يُرجى العِلم أنّ حزمة SDK لإصدار العميل من منصّة Firebase AI Logic على الويب لا تتيح ذلك، حتى في النماذج المستضافة على السحابة الإلكترونية.
  • استدعاء الدالة

    • يتوفر قريبًا!
  • احتساب الرموز المميّزة

    • تؤدي دائمًا إلى ظهور خطأ. سيختلف العدد بين النماذج المستضافة على السحابة الإلكترونية والنماذج على الجهاز، لذا لا تتوفّر طريقة بديلة سهلة.
  • تتبُّع الذكاء الاصطناعي في وحدة تحكُّم Firebase لإجراء الاستنتاج على الجهاز

    • يُرجى العِلم أنّه يمكن مراقبة أي استنتاج يتم باستخدام النماذج المستضافة على السحابة الإلكترونية تمامًا مثل الاستنتاجات الأخرى التي يتم إجراؤها باستخدام Firebase AI Logic حزمة SDK للعملاء على الويب.


تقديم ملاحظات حول تجربتك مع Firebase AI Logic