چگونه‌ها

ساخت برنامه‌های هوشمند اندروید: استنتاج ابری و ترکیبی

۸ دقیقه مطالعه
۳ نویسنده
Thomas Ezan, Jolanda Verhoef, Caren Chang

به مجموعه پست‌های وبلاگ « ساخت برنامه‌های هوشمند اندروید » خوش آمدید، جایی که ما یک برنامه اندروید پایه را می‌گیریم و آن را به یک تجربه شخصی‌سازی‌شده ، هوشمند و عامل‌گرا تبدیل می‌کنیم. در پست قبلی خود، نحوه ساخت ویژگی‌های هوشمند روی دستگاه را با استفاده از Gemini Nano از طریق Prompt API کیت ML بررسی کردیم.

در این پست، به چگونگی استفاده از منطق هوش مصنوعی فایربیس خواهیم پرداخت. برای ساخت ویژگی‌های هوش مصنوعی ابری و ترکیبی:

  • پاسخ‌های پایه در بستر دنیای واقعی
  • مسیریابی پویای درخواست‌ها بین اجرای ابری و محلی با استفاده از استنتاج ترکیبی
  • ترجمه محتوا با سیستم‌های مسیریابی سفارشی

گاهی اوقات یک مورد استفاده به مدل‌های هوش مصنوعی با دانش جهانی بیشتر، پنجره زمینه بسیار بزرگتر یا توانایی مدیریت پرس‌وجوهای پیچیده نیاز دارد. در این سناریوها، می‌توانیم از مدل‌های ابری بهره ببریم.

در مواقع دیگر، شما بهترین‌های هر دو دنیا را می‌خواهید: استفاده از استنتاج ترکیبی برای اجرا روی دستگاه در صورت امکان برای کاهش هزینه‌ها، در حالی که برای اطمینان از سازگاری با همه دستگاه‌ها، به فضای ابری بازمی‌گردید.

ویژگی‌ها.png
ویژگی‌های ابری و ترکیبی در جت‌پکر: دستیار موزه با قابلیت اتصال به اینترنت، نگارش هیبریدی نقد رستوران و چت پشتیبانی با قابلیت ترجمه زنده سفارشی.

بیایید نگاهی به نحوه پیاده‌سازی سه ویژگی ابری و ترکیبی در Jetpacker بیندازیم:

  • دستیار موزه با اتصال به زمین وب
  • تهیه پیش نویس بررسی رستوران ترکیبی
  • چت پشتیبانی هتل با ترجمه زنده سفارشی.

برای اطلاعات به‌روز از LLM grounding استفاده کنید. چت‌بات دستیار موزه با LLM grounding

دستیار موزه یک چت‌بات تعاملی است که برای کمک به کاربران در برنامه‌ریزی بازدید از موزه طراحی شده است. این ربات جزئیات به‌روزی در مورد نمایشگاه‌های خاص، ساعات کاری فعلی، قیمت بلیط و موارد دیگر را در اختیار بازدیدکنندگان قرار می‌دهد.

دستیار_موزه_ارتقا_یافته.png
دستیار موزه یک چت‌بات است که به سوالاتی مانند «چگونه می‌توانم تخفیف بلیط موزه لوور بگیرم؟» پاسخ می‌دهد.

هنگام ساخت ویژگی‌های هوش مصنوعی، وادار کردن مدل به پاسخگویی با اطلاعات تازه، دقیق و خاص دنیای واقعی یک چالش رایج است. در حالی که مدل‌های ابری دارای حجم عظیمی از دانش جهانی هستند، ممکن است از نمایشگاه‌های فصلی یا ساعات کاری روز جاری اطلاعی نداشته باشند.

اتصال به زمین.png
داده‌های پایه به پنجره زمینه اضافه می‌شوند تا مدل بتواند به درستی و با دقت به سؤالات پاسخ دهد.

برای پر کردن این شکاف، می‌توانیم از تکنیک‌های اتصال به زمین برای اضافه کردن زمینه اضافی به پنجره زمینه مدل استفاده کنیم. کیت توسعه نرم‌افزار Firebase AI Logic از سه نوع اتصال به زمین پشتیبانی می‌کند:

در Jetpacker، ما به صورت پویا ابزارهای موجود را بر اساس feature flag های فعال شده می‌سازیم و مدل مولد را با استفاده از Firebase AI SDK مقداردهی اولیه می‌کنیم:

// 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 grounding فعال باشد، ما آدرس‌های اینترنتی منابع خاص موزه را مستقیماً به اعلان اضافه می‌کنیم:

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)

هر وظیفه هوش مصنوعی به یک مدل مبتنی بر ابر نیاز ندارد و هر دستگاهی آنلاین نیست. برای کمک به توسعه‌دهندگان در ایجاد تعادل بین تأخیر، هزینه و دسترسی آفلاین، ما اخیراً API فایربیس را برای استنتاج ترکیبی معرفی کرده‌ایم.

در جت‌پکر، ویژگی نقد و بررسی رستوران به کاربران اجازه می‌دهد موضوعات انتخابی را بررسی کنند و به‌طور خودکار یک نقد را پیش‌نویس کنند. برای فعال کردن این قابلیت برای همه کاربران، ما اجرای محلی را با Gemini Nano در اولویت قرار می‌دهیم و در دستگاه‌هایی که از Gemini Nano پشتیبانی نمی‌کنند، به مدل‌های ابری بازمی‌گردیم.

بررسی_ارتقاء_یافته.png
ویژگی نقد و بررسی رستوران از استنتاج ترکیبی برای تهیه پیش‌نویس نقد و بررسی بر اساس موضوعات استفاده می‌کند.
// 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: اجرا را اکیداً به فضای ابری محدود می‌کند.

پس از ایجاد نظر، آن را در کلیپ‌بورد کپی می‌کنیم و از یک اینتنت برای باز کردن مستقیم نقشه‌های گوگل به صفحه نظر رستوران استفاده می‌کنیم و یک تجربه کاربری یکپارچه ارائه می‌دهیم:

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 در پاریس، فرانسوی)، باید پیام‌ها را به زبان دلخواه کاربر ترجمه کنیم.

translation_upscaled.png
پیام‌های چت پشتیبانی هتل به طور خودکار به زبان دلخواه کاربر ترجمه می‌شوند

در حالی که مدل‌های ترکیبی می‌توانند تنظیمات مسیریابی ساده را پیکربندی کنند، سناریوهای پیچیده نیاز به منطق مسیریابی سفارشی دارند. در Jetpacker، ما یک پشته مسیریابی سفارشی پیاده‌سازی می‌کنیم که موارد زیر را در نظر می‌گیرد:

  • شناسایی زبان: با استفاده از API شناسایی زبان کیت یادگیری ماشین روی دستگاه، می‌توانیم زبان پیام ورودی را تشخیص دهیم.
  • ترجمه روی دستگاه (Gemini Nano): رابط برنامه‌نویسی کاربردی Prompt کیت ML به ما امکان می‌دهد جفت‌های زبانی رایج را مستقیماً روی دستگاه ترجمه کنیم و در پهنای باند و هزینه ابری صرفه‌جویی کنیم.
  • ترجمه ابری (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

در نهایت، استفاده از هوش مصنوعی در فضای ابری، امکان سوءاستفاده از کلید API یا صدور صورتحساب غیرمجاز را فراهم می‌کند. برای ایمن‌سازی فراخوانی‌های API، ما Firebase App Check را با استفاده از Play Integrity (در محیط تولید) و Debug Provider محلی (برای توسعه محلی یا شبیه‌سازها) ادغام کردیم.

در فایل 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()
}

هنگام ساخت به صورت محلی روی یک شبیه‌ساز، App Check یک رمز توکن محلی را برای logcat چاپ می‌کند:

Enter this debug secret into the allow list in the Firebase Console: a8c2dd4c-xxxx-xxxx-xxxx-ef6c114ba27e

پس از ثبت در کنسول Firebase، درخواست‌های محلی توسط App Check کاملاً تأیید و احراز هویت می‌شوند و از backend ما محافظت می‌کنند و در عین حال به ما اجازه می‌دهند برنامه را به صورت محلی آزمایش کنیم.

نتیجه‌گیری

By combining cloud model capabilities (grounding, system instructions) with on-device capabilities (hybrid routing, translation, security app checks), we created a travel app that is smart, secure, and available offline.

کد منبع کامل Jetpacker را در GitHub بررسی کنید و برای شروع، مستندات Firebase را بررسی کنید:

مستندات منطق هوش مصنوعی فایربیس
رابط برنامه‌نویسی استنتاج ترکیبی فایربیس

بیشتر بدانید

بخش‌های دیگر این مجموعه پست‌های وبلاگ را ببینید:

بخش اول : معرفی برنامه و مروری کلی بر آن.
بخش ۲ : هوش درون دستگاهی. برای ساخت ویژگی‌های اولویت‌دار حریم خصوصی مانند خلاصه‌سازی برنامه سفر، تجزیه رسید و پردازش صوتی محلی، به بررسی عمیق APIهای GenAI کیت ML و Gemini Nano بپردازید.
بخش ۳ (این پست!): استدلال ترکیبی و ابری. نحوه استفاده از منطق هوش مصنوعی فایربیس را برای پایه‌ریزی پاسخ‌های LLM در داده‌های دنیای واقعی مانند نقشه‌های گوگل و زمینه وب بررسی کنید.
قسمت ۴: ادغام سیستم. ادغام با سیستم هوشمند اندروید با استفاده از AppFunctions.
بخش ۵ (به زودی): گردش‌های کاری درون‌برنامه‌ای. برنامه را با یک دستیار رزرو سرتاسری که توسط A2UI و ADK پشتیبانی می‌شود، گسترش دهید.

به اطلاعات بیشتری در مورد توسعه اندروید علاقه دارید؟ توسعه‌دهندگان اندروید را در یوتیوب یا لینکدین دنبال کنید!

تمام قطعه کدهای موجود در این پست وبلاگ، از اطلاعیه حق نشر زیر پیروی می‌کنند:

Copyright 2026 Google LLC.
SPDX-License-Identifier: Apache-2.0
نوشته شده توسط:
ادامه مطلب