مرحبًا بك مجددًا في سلسلة منشورات المدونة "إنشاء تطبيقات 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 )
عندما يطلب المستخدم من "المساعد" معلومات، إذا كانت ميزة "تحديد المصدر من عنوان 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" )
بما أنّ ردود موظف الاستقبال تكون باللغة المحلية للفندق (على سبيل المثال، الفرنسية في فندق Le Meurice في باريس)، علينا ترجمة الرسائل إلى اللغة المفضّلة للمستخدم.
في حين أنّ النماذج المختلطة يمكنها ضبط إعدادات بسيطة لتوجيه المكالمات، تتطلّب السيناريوهات المعقّدة منطق توجيه مخصّصًا. في Jetpacker، ننفّذ مجموعة توجيه مخصّصة تأخذ في الاعتبار ما يلي:
- تحديد اللغة: باستخدام واجهة برمجة التطبيقات لتحديد اللغة في حزمة تعلُّم الآلة على الجهاز فقط، يمكننا رصد لغة الرسالة الواردة.
- الترجمة على الجهاز فقط (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 Developers على YouTube أو LinkedIn.
تخضع جميع مقتطفات الرموز البرمجية في مشاركة المدونة هذه لإشعار حقوق الطبع والنشر التالي:
Copyright 2026 Google LLC. SPDX-License-Identifier: Apache-2.0
-
طرق التنفيذمرحبًا بك مجددًا في سلسلة منشورات المدونة "إنشاء تطبيقات Android ذكية"، حيث نأخذ تطبيق Android أساسيًا ونحوّله إلى تجربة مخصّصة وذكية واستباقية. في مشاركتنا السابقة، قدّمنا Jetpacker، وهو التطبيق التجريبي الذي سنستخدمه في هذه السلسلة.
Caren Chang • مدّة القراءة: 6 دقائق -
طرق التنفيذJetpacker هو تطبيق عرض تقني أنشأه فريقنا من البداية لحضور مؤتمر Google I/O لهذا العام (تم إنشاؤه باستخدام Antigravity). يساعد Jetpacker المستخدمين في التخطيط لمغامرتهم الكبيرة التالية واستكشافها والاستمتاع بها.
Jolanda Verhoef • مدّة القراءة: 4 دقائق -
طرق التنفيذمرحبًا بك مجددًا في سلسلة منشورات المدونة "إنشاء تطبيقات Android ذكية"، حيث نأخذ تطبيق Android أساسيًا ونحوّله إلى تجربة مخصّصة وذكية واستباقية. في مشاركتنا السابقة، استكشفنا كيفية الاستفادة من Firebase AI Logic لإنشاء ميزات الذكاء الاصطناعي المستضافة على السحابة الإلكترونية والميزات الهجينة.
Ben Weiss • مدّة القراءة: 6 دقائق
يمكنك تلقّي أحدث الإحصاءات حول تطوير تطبيقات Android في بريدك الوارد أسبوعيًا.