مرحبًا بك مجددًا في سلسلة مشاركات المدونة "إنشاء تطبيقات Android ذكية"، حيث نأخذ تطبيق Android أساسيًا ونحوّله إلى تجربة مخصّصة وذكية واستباقية. في منشورنا السابق، استعرضنا كيفية إنشاء ميزات ذكية تعمل على الجهاز فقط باستخدام Gemini Nano من خلال Prompt API في حزمة تعلّم الآلة.
في هذه المشاركة، سنتعرّف على كيفية الاستفادة من Firebase AI Logic لإنشاء ميزات مستندة إلى الذكاء الاصطناعي ومستضافة على السحابة الإلكترونية أو مختلطة:
- تحديد المصدر لضمان أن تكون الإجابات مبنية على الواقع
- توجيه الطلبات ديناميكيًا بين التنفيذ على السحابة الإلكترونية والتنفيذ على الجهاز باستخدام الاستدلال المختلط
- ترجمة المحتوى باستخدام أنظمة توجيه مخصّصة
في بعض الأحيان، تتطلّب حالة الاستخدام نماذج ذكاء اصطناعي تتمتّع بمعرفة أكبر بالعالم الواقعي، أو قدرة استيعاب أكبر بكثير، أو القدرة على التعامل مع طلبات بحث معقّدة. في هذه السيناريوهات، يمكننا الاستفادة من النماذج السحابية.
في أحيان أخرى، تريد الاستفادة من مزايا كلتا الطريقتَين، أي استخدام الاستدلال المختلط لتنفيذه على الجهاز فقط عندما يكون ذلك متاحًا لخفض التكاليف، مع الرجوع إلى السحابة الإلكترونية لضمان التوافق مع جميع الأجهزة.
في ما يلي كيفية تنفيذ ثلاث ميزات سحابية ومختلطة في Jetpacker:
- مساعد في متحف لديه معرفة بالويب
- صياغة مراجعات المطاعم المختلطة
- محادثة دعم الفندق التي تتضمّن ترجمة مباشرة موجّهة حسب الطلب
استخدام تحديد مصدر المعلومات في النماذج اللغوية الكبيرة للحصول على معلومات محدّثةروبوت دردشة مساعد في المتحف يستند إلى تحديد مصدر المعلومات في النماذج اللغوية الكبيرة
مساعد المتحف هو روبوت دردشة تفاعلي مصمّم لمساعدة المستخدمين في التخطيط لزياراتهم إلى المتاحف. ويقدّم للزوّار تفاصيل محدّثة بشأن معروضات معيّنة وساعات العمل الحالية وأسعار التذاكر وغير ذلك.
عند إنشاء ميزات مستندة إلى الذكاء الاصطناعي، يواجهنا عادةً تحدّي يتمثل في جعل النموذج يجيب بمعلومات حديثة ودقيقة ومحدّدة من العالم الحقيقي. على الرغم من أنّ النماذج المستندة إلى السحابة الإلكترونية تتضمّن كميات هائلة من المعلومات حول العالم، قد لا تكون على دراية بالمعارض الموسمية أو ساعات العمل في اليوم الحالي.
ولسدّ هذه الفجوة، يمكننا استخدام تقنيات الاستناد إلى مصادر موثوقة لإضافة سياق إضافي إلى قدرة الاستيعاب في النموذج. تتيح حزمة تطوير البرامج (SDK) من Firebase AI Logic ثلاثة أنواع من التأسيس:
- تحديد مصدر الردود من عنوان URL: تحديد مصدر الردود من محتوى صفحة ويب معيّنة (مثل أسعار التذاكر الحالية أو قواعد المتحف)
- الاستناد إلى "بحث Google": السماح للنموذج بالبحث في فهرس "بحث Google" في الوقت الفعلي للحصول على تفاصيل حديثة
- الاستناد إلى "خرائط Google": استخدام بيانات الموقع الجغرافي من "خرائط Google"
في Jetpacker، ننشئ الأدوات المتاحة بشكل ديناميكي استنادًا إلى علامات الميزات المفعَّلة، ونبدأ النموذج التوليدي باستخدام حزمة تطوير البرامج (SDK) الخاصة بـ Firebase AI:
// implementation("com.google.firebase:firebase-ai-logic") private var toolList = mutableListOf<Tool>() init { if (ENABLE_SEARCH_GROUNDING) { toolList.add(Tool.googleSearch()) } if (ENABLE_URL_GROUNDING) { toolList.add(Tool.urlContext()) } } private val generativeModel = Firebase.ai(backend = GenerativeBackend.googleAI()) .generativeModel( modelName = "gemini-3-flash", systemInstruction = content { text("You are a helpful museum assistant answering questions about a museum. Use plain text.") }, tools = toolList )
عندما يطلب المستخدم من "مساعد Google" معلومات، إذا كانت ميزة "الاستناد إلى عناوين URL" مفعّلة، نضيف عناوين URL الخاصة بموارد المتحف مباشرةً إلى الطلب:
val groundingText = if (FeatureFlags.ENABLE_URL_GROUNDING) { "\n If the following message above is about the rules and terms to visit Le Louvre, " + "if needed answer this urls ${urlList.joinToString()}" } else { "" } val prompt = "$text $groundingText" var response = chat.sendMessage(prompt)
الاستدلال المختلط: إنشاء المراجعات على الجهاز فقط باستخدام رابط عميق في "خرائط Google"
لا تتطلّب كل مهام الذكاء الاصطناعي نموذجًا مستندًا إلى السحابة الإلكترونية، وليس كل جهاز متصلاً بالإنترنت. لمساعدة المطوّرين في تحقيق التوازن بين وقت الاستجابة والتكلفة وإمكانية الاستخدام بلا إنترنت، طرحنا مؤخرًا Firebase API for Hybrid Inference.
في Jetpacker، تتيح ميزة مراجعة المطاعم للمستخدمين مراجعة مواضيع محدّدة وإنشاء مسودة مراجعة تلقائيًا. لإتاحة هذه الميزة لجميع المستخدمين، نعطي الأولوية للتنفيذ على الجهاز باستخدام Gemini Nano، ونلجأ إلى النماذج المستندة إلى السحابة الإلكترونية على الأجهزة التي لا تتوافق مع Gemini Nano.
// implementation("com.google.firebase:firebase-ai-logic") // implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta03") // Initialize the model with hybrid routing configuration val reviewModel = Firebase.ai.generativeModel( modelName = "gemini-3.1-flash-lite", onDeviceConfig = OnDeviceConfig( inferenceMode = InferenceMode.PREFER_ON_DEVICE ) )
تتيح واجهة برمجة التطبيقات Hybrid Inference API أربعة أوضاع توجيه مختلفة:
- PREFER_ON_DEVICE: يمنح الأولوية للتنفيذ المحلي، ويستخدم السحابة الإلكترونية كحلّ بديل في حال عدم توفّر Gemini Nano.
- PREFER_IN_CLOUD: يمنح الأولوية للتنفيذ على السحابة الإلكترونية، ويتم الرجوع إلى التنفيذ على الجهاز فقط إذا انقطع اتصال الجهاز بالإنترنت.
- ONLY_ON_DEVICE: يقتصر التنفيذ على الجهاز فقط.
- ONLY_IN_CLOUD: يحصر التنفيذ في السحابة الإلكترونية فقط.
بعد إنشاء المراجعة، ننسخها إلى الحافظة ونستخدم هدفًا لفتح "خرائط Google" مباشرةً إلى صفحة مراجعة المطعم، ما يوفّر تجربة سلسة للمستخدم:
private fun copyAndOpenMapsReview(context: Context, reviewText: String, placeId: String) { val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager val clip = ClipData.newPlainText("User Review", reviewText) clipboard.setPrimaryClip(clip) val uri = Uri.parse("https://search.google.com/local/writereview/mobile?placeid=$placeId") val intent = Intent(Intent.ACTION_VIEW, uri).apply { setPackage("com.google.android.apps.maps") } context.startActivity(intent) }
التوجيه المخصّص المختلط: ترجمة محادثات الدعم في الفنادق باستخدام شخصيات محاكاة
تم إنشاء ميزة الدردشة مع فريق دعم الفندق للسماح للمستخدمين بإنهاء الخدمات اللوجستية والاطّلاع على تفاصيل الفندق. تستخدم هذه الميزة تعليمات النظام لضبط إعدادات مساعد استقبال مخصّص. من خلال تمرير معلومات محدّدة، مثل اللغة المفضّلة ومعلومات الفندق، في التعليمات، يمكننا إعداد شخصية محادثة تمثّل فندقًا معيّنًا.
private val generativeModel = Firebase.ai(backend = GenerativeBackend.googleAI()) .generativeModel( systemInstruction = content { text(""" You are a helpful hotel receptionist at $hotelName only speaking $language. Answer politely in $language. The bar closes at 10pm and breakfast is from 7am to 10am. There's someone at the desk 24/7. You can retrieve your luggage from the storage room at the back of the lobby at any time. """) }, modelName = "gemini-3-flash-preview" )
بما أنّ ردود موظف الاستقبال تكون باللغة المحلية للفندق (على سبيل المثال، الفرنسية في فندق "لو موريس" في باريس)، علينا ترجمة الرسائل إلى اللغة المفضّلة للمستخدم.
في حين أنّ النماذج المختلطة يمكنها ضبط إعدادات بسيطة للتوجيه المفضّل، تتطلّب السيناريوهات المعقّدة منطق توجيه مخصّصًا. في Jetpacker، ننفّذ مجموعة توجيه مخصّصة تأخذ في الاعتبار ما يلي:
- تحديد اللغة: باستخدام واجهة برمجة التطبيقات Language Identification API في حزمة تعلُّم الآلة على الجهاز فقط، يمكننا رصد لغة الرسالة الواردة.
- الترجمة على الجهاز فقط (Gemini Nano): تتيح لنا واجهة برمجة التطبيقات Prompt API في حزمة تعلّم الآلة ترجمة أزواج اللغات الشائعة مباشرةً على الجهاز، ما يؤدي إلى توفير معدل نقل البيانات وتكاليف السحابة الإلكترونية.
- الترجمة السحابية (Gemini 3 Flash): نستخدم Gemini Flash 3 لترجمة اللغات الأكثر تعقيدًا بجودة أعلى.
// implementation("com.google.android.gms:play-services-mlkit-language-id:17.0.0") // ML Kit for Language Identification (powered by Google Play Services) private val languageIdentifier = LanguageIdentification.getClient() // On-device translator model (prefer Gemini Nano) for translating common language pairs private val hybridTranslationModel = Firebase.ai(backend = GenerativeBackend.googleAI()) .generativeModel( modelName = "gemini-3-flash", onDeviceConfig = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE) ) // Cloud translator model for more complex language pairs private val cloudTranslationModel = Firebase.ai(backend = GenerativeBackend.googleAI()) .generativeModel( modelName = "gemini-3-flash" )
عندما تحتاج رسالة إلى ترجمة، نحدّد اللغة المصدر ونطبّق منطق التوجيه المخصّص، وننفّذ الترجمة إما على الجهاز فقط أو على السحابة الإلكترونية:
fun translateMessage(message: SupportChatMessage) { viewModelScope.launch { // 1. Detect language using ML Kit Language Identification val sourceLang = try { Tasks.await(languageIdentifier.identifyLanguage(message.text)) } catch (e: Exception) { "Undefined" } // 2. Custom routing: we've verified the translation quality for English and Korean with Gemini Nano, and will translate message on-device for those two languages val routeToCloud = sourceLang != "en" && sourceLang != "kr" val prompt = "Translate the following text to $selectedLanguage. Just return the translated sentence: ${message.text}." val (translatedText, routePrefix) = if (routeToCloud) { val result = cloudTranslationModel.generateContent(prompt) result.text to "[Cloud]" } else { val result = hybridTranslationModel.generateContent(prompt) result.text to "[On-Device]" } if (translatedText != null) { _translations.update { current -> current + (message.id to "$routePrefix: $translatedText") } } } }
في هذا المثال، لا تأخذ منطق التوجيه المخصّص في الاعتبار سوى لغة النص الأصلي واللغة المستهدَفة للترجمة. ومع ذلك، استنادًا إلى حالة استخدام تطبيقك، يمكنك توسيع منطق التوجيه ليشمل عوامل أخرى، مثل إصدار النموذج على الجهاز فقط، والاتصال بالشبكة، وحالة البطارية، وغير ذلك.
تأمين مسارات الذكاء الاصطناعي: ميزة "فحص التطبيقات من Firebase"
أخيرًا، يتيح استخدام الذكاء الاصطناعي في السحابة إمكانية إساءة استخدام مفتاح واجهة برمجة التطبيقات أو الفوترة غير المصرح بها. لتأمين طلبات البيانات من واجهة برمجة التطبيقات، دمَجنا فحص التطبيقات من Firebase باستخدام كلّ من Play Integrity (في الإصدار العلني) ومقدّم خدمة تصحيح الأخطاء المحلي (للتطوير المحلي أو المحاكيات).
في ملف JetPackerApplication.kt، نثبِّت مقدّم خدمة تصحيح الأخطاء عند بدء التشغيل ونفعِّل المصادقة بدون الكشف عن الهوية لإنشاء جلسة مستخدم آمنة:
// implementation("com.google.firebase:firebase-appcheck-playintegrity") // implementation("com.google.firebase:firebase-appcheck-debug") // implementation("com.google.firebase:firebase-auth") override fun onCreate() { super.onCreate() Firebase.initialize(context = this) Firebase.appCheck.installAppCheckProviderFactory( DebugAppCheckProviderFactory.getInstance() ) Firebase.auth.signInAnonymously() }
عند إنشاء التطبيق محليًا على محاكي، تطبع خدمة فحص التطبيقات سر الرمز المميز المحلي إلى أداة Logcat:
Enter this debug secret into the allow list in the Firebase Console: a8c2dd4c-xxxx-xxxx-xxxx-ef6c114ba27e
بعد التسجيل في وحدة تحكّم Firebase، يتم التحقّق من صحة الطلبات المحلية ومصادقتها بالكامل من خلال ميزة "فحص التطبيقات"، ما يحمي الخلفية ويسمح لنا باختبار التطبيق محليًا.
الخاتمة
من خلال الجمع بين إمكانات النموذج المستند إلى السحابة الإلكترونية (تحديد المصدر، تعليمات النظام) والإمكانات المتوفّرة على الجهاز فقط (التوجيه المختلط، والترجمة، وعمليات فحص تطبيقات الأمان)، أنشأنا تطبيق سفر ذكيًا وآمنًا ومتاحًا بلا إنترنت.
يمكنك الاطّلاع على رمز المصدر الكامل لتطبيق Jetpacker على GitHub، واستكشاف مستندات Firebase للبدء:
مستندات Firebase AI Logic
Firebase Hybrid Inference API
مزيد من المعلومات
يمكنك الاطّلاع على الأجزاء الأخرى من سلسلة منشورات المدوّنة هذه:
الجزء 1: مقدّمة عن التطبيق ونظرة عامة شاملة
الجزء 2: الذكاء على الجهاز فقط التعمّق في واجهات برمجة التطبيقات المستندة إلى الذكاء الاصطناعي التوليدي في حزمة تعلّم الآلة وGemini Nano لإنشاء ميزات يركّز على الخصوصية، مثل تلخيص برامج الرحلات وتحليل الإيصالات ومعالجة الصوت محليًا
الجزء 3 (هذه المشاركة): الاستدلال المختلط والسحابي تعرَّف على كيفية استخدام Firebase AI Logic لتوفير إجابات نماذج اللغات الكبيرة (LLM) التي تستند إلى بيانات من العالم الحقيقي، مثل "خرائط Google" وسياق الويب.
الجزء 4: دمج الأنظمة. التكامل مع نظام Android الذكي باستخدام AppFunctions
الجزء 5 (سيتم إطلاقه قريبًا): مهام سير العمل المستنِدة إلى الذكاء الاصطناعي الوكيل داخل التطبيق توسيع نطاق التطبيق ليشمل مساعدًا لإجراء الحجوزات بشكل كامل باستخدام A2UI وADK
هل يهمّك معرفة المزيد عن تطوير تطبيقات Android؟ تابِع "مطوّرو تطبيقات Android" على YouTube أو LinkedIn.
تخضع جميع مقتطفات الرموز البرمجية في مشاركة المدونة هذه لإشعار حقوق الطبع والنشر التالي:
Copyright 2026 Google LLC. SPDX-License-Identifier: Apache-2.0
-
طرق التنفيذJetpacker هو تطبيق استعراضي تقني أنشأه فريقنا من البداية خصيصًا لمؤتمر Google I/O لهذا العام (تم إنشاؤه باستخدام Antigravity). يساعد تطبيق Jetpacker المستخدمين في التخطيط لمغامرتهم الكبيرة التالية واستكشافها والاستمتاع بها.
Jolanda Verhoef • مدّة القراءة: 4 دقائق -
طرق التنفيذمرحبًا بك مجددًا في سلسلة منشورات المدونة "إنشاء تطبيقات Android ذكية"، حيث نأخذ تطبيق Android أساسيًا ونحوّله إلى تجربة مخصّصة وذكية واستباقية. في مشاركتنا السابقة، قدّمنا Jetpacker، وهو تطبيق تجريبي سنستخدمه في هذه السلسلة.
Caren Chang • يستغرق الاطّلاع على المقال 6 دقائق -
طرق التنفيذمرحبًا بك مجددًا في سلسلة منشورات المدونة "إنشاء تطبيقات Android ذكية"، حيث نأخذ تطبيق Android أساسيًا ونحوّله إلى تجربة مخصّصة وذكية واستباقية. في مشاركتنا السابقة، استكشفنا كيفية الاستفادة من Firebase AI Logic لإنشاء ميزات مستنِدة إلى الذكاء الاصطناعي ومستضافة على السحابة الإلكترونية وميزات هجينة.
Ben Weiss • يستغرق الاطّلاع على المقال 6 دقائق
يمكنك تلقّي أحدث الإحصاءات حول تطوير تطبيقات Android في بريدك الوارد أسبوعيًا.