Tạo các ứng dụng Android thông minh: Suy luận trên đám mây và suy luận kết hợp
Đọc trong 8 phút
Chào mừng bạn quay lại loạt bài đăng trên blog "Xây dựng ứng dụng Android thông minh". Trong loạt bài này, chúng ta sẽ lấy một ứng dụng Android cơ bản và biến đổi ứng dụng đó thành một trải nghiệm được cá nhân hoá, thông minh và dựa trên tác nhân. Trong bài đăng trước, chúng ta đã khám phá cách tạo các tính năng thông minh trên thiết bị bằng Gemini Nano thông qua Prompt API của Bộ công cụ học máy.
Trong bài đăng này, chúng ta sẽ xem xét cách bạn có thể tận dụng Firebase AI Logic để tạo các tính năng AI kết hợp và được lưu trữ trên đám mây:
- Đưa ra câu trả lời dựa trên bối cảnh thực tế
- Định tuyến yêu cầu một cách linh hoạt giữa quá trình thực thi trên đám mây và cục bộ bằng cách sử dụng suy luận kết hợp
- Dịch nội dung bằng hệ thống định tuyến tuỳ chỉnh
Đôi khi, một trường hợp sử dụng đòi hỏi các mô hình AI có kiến thức sâu rộng hơn về thế giới, cửa sổ ngữ cảnh lớn hơn nhiều hoặc khả năng xử lý các câu hỏi phức tạp. Trong những trường hợp đó, chúng ta có thể tận dụng các mô hình trên đám mây.
Trong những trường hợp khác, bạn muốn tận dụng cả hai: sử dụng suy luận kết hợp để chạy trên thiết bị khi có thể nhằm giảm chi phí, đồng thời chuyển sang đám mây để đảm bảo khả năng tương thích cho tất cả các thiết bị.
Hãy cùng xem cách chúng tôi triển khai 3 tính năng đám mây và kết hợp trong Jetpacker:
- trợ lý bảo tàng có kiến thức nền tảng trên web
- bản nháp đánh giá nhà hàng kết hợp
- trò chuyện hỗ trợ khách sạn có tính năng dịch trực tiếp được định tuyến tuỳ chỉnh.
Sử dụng cơ sở LLM để biết thông tin mới nhấtBot trò chuyện trợ lý bảo tàng có cơ sở LLM
Trợ lý bảo tàng là một chatbot tương tác được thiết kế để giúp người dùng lên kế hoạch tham quan bảo tàng. Trang này cung cấp cho khách tham quan thông tin chi tiết mới nhất về các cuộc triển lãm cụ thể, giờ mở cửa hiện tại, giá vé và nhiều thông tin khác.
Khi xây dựng các tính năng AI, việc yêu cầu mô hình trả lời bằng thông tin thực tế mới, chính xác và cụ thể là một thách thức thường gặp. Mặc dù các mô hình đám mây có lượng kiến thức khổng lồ về thế giới, nhưng chúng có thể không biết về các triển lãm theo mùa hoặc giờ mở cửa trong ngày.
Để thu hẹp khoảng cách này, chúng ta có thể sử dụng các kỹ thuật cơ sở để thêm ngữ cảnh bổ sung vào cửa sổ ngữ cảnh của mô hình. SDK Firebase AI Logic hỗ trợ 3 loại cơ sở:
- Căn cứ vào URL: Căn cứ vào nội dung của một trang web cụ thể để đưa ra câu trả lời (ví dụ: giá vé hiện tại hoặc quy tắc của bảo tàng).
- Cơ sở dữ liệu của Google Tìm kiếm: Cho phép mô hình truy vấn chỉ mục tìm kiếm theo thời gian thực của Google để biết thông tin chi tiết mới nhất.
- Căn cứ vào Maps: Sử dụng dữ liệu vị trí trên Google Maps.
Trong Jetpacker, chúng tôi tạo các công cụ có sẵn một cách linh hoạt dựa trên các cờ tính năng đã bật và khởi chạy mô hình tạo sinh bằng SDK AI của Firebase:
// 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 )
Khi người dùng truy vấn trợ lý, nếu tính năng căn cứ vào URL được bật, chúng tôi sẽ trực tiếp thêm các URL tài nguyên cụ thể của bảo tàng vào câu lệnh:
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)
Suy luận kết hợp: Tạo bài đánh giá trên thiết bị bằng đường liên kết sâu đến Maps
Không phải tác vụ AI nào cũng cần mô hình dựa trên đám mây và không phải thiết bị nào cũng kết nối mạng. Để giúp nhà phát triển cân bằng độ trễ, chi phí và khả năng sử dụng khi không có mạng, gần đây, chúng tôi đã ra mắt API Firebase để suy luận kết hợp.
Trong Jetpacker, tính năng đánh giá nhà hàng cho phép người dùng đánh giá các chủ đề đã chọn và tự động soạn thảo bài đánh giá. Để bật tính năng này cho tất cả người dùng, chúng tôi ưu tiên thực thi cục bộ bằng Gemini Nano và chuyển sang các mô hình đám mây trên những thiết bị không hỗ trợ 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 hỗ trợ 4 chế độ định tuyến riêng biệt:
- PREFER_ON_DEVICE: Ưu tiên thực thi cục bộ và quay lại dùng đám mây nếu Gemini Nano không hoạt động.
- PREFER_IN_CLOUD: Ưu tiên thực thi trên đám mây và chuyển về thực thi trên thiết bị nếu thiết bị chuyển sang chế độ ngoại tuyến.
- ONLY_ON_DEVICE: Chỉ cho phép thực thi trên thiết bị.
- ONLY_IN_CLOUD: Chỉ cho phép thực thi trên đám mây.
Sau khi tạo bài đánh giá, chúng tôi sẽ sao chép bài đánh giá đó vào bảng nhớ tạm và dùng một ý định để mở Google Maps trực tiếp đến trang bài đánh giá của nhà hàng, mang đến trải nghiệm liền mạch cho người dùng:
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) }
Định tuyến kết hợp tuỳ chỉnh: Dịch nội dung trò chuyện hỗ trợ khách sạn bằng các nhân vật mô phỏng
Tính năng trò chuyện hỗ trợ khách sạn được tạo ra để giúp người dùng hoàn tất thông tin hậu cần và kiểm tra thông tin chi tiết về khách sạn. Tính năng này sử dụng các chỉ dẫn của hệ thống để thiết lập một trợ lý lễ tân theo ngôn ngữ địa phương. Bằng cách truyền thông tin cụ thể (chẳng hạn như ngôn ngữ ưu tiên và thông tin về khách sạn) trong hướng dẫn, chúng tôi có thể thiết lập một nhân vật trò chuyện đại diện cho một khách sạn cụ thể.
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" )
Vì câu trả lời của nhân viên lễ tân bằng ngôn ngữ địa phương của khách sạn (ví dụ: tiếng Pháp cho khách sạn Le Meurice ở Paris), nên chúng ta cần dịch các tin nhắn sang ngôn ngữ mà người dùng ưu tiên.
Mặc dù các mô hình kết hợp có thể định cấu hình các lựa chọn định tuyến đơn giản, nhưng các tình huống phức tạp đòi hỏi phải có logic định tuyến tuỳ chỉnh. Trong Jetpacker, chúng ta triển khai một ngăn xếp định tuyến tuỳ chỉnh có tính đến:
- Nhận dạng ngôn ngữ: Bằng cách sử dụng API Nhận dạng ngôn ngữ của Bộ công cụ học máy trên thiết bị, chúng ta có thể phát hiện ngôn ngữ của tin nhắn đến.
- Dịch trên thiết bị (Gemini Nano): Prompt API của Bộ công cụ học máy cho phép chúng tôi dịch các cặp ngôn ngữ phổ biến ngay trên thiết bị, giúp tiết kiệm băng thông và chi phí trên đám mây.
- Bản dịch trên đám mây (Gemini 3 Flash): Đối với những ngôn ngữ phức tạp hơn, chúng tôi sử dụng Gemini Flash 3 để có bản dịch chất lượng cao hơn.
// 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" )
Khi cần dịch một thông báo, chúng tôi sẽ xác định ngôn ngữ gốc và áp dụng logic định tuyến tuỳ chỉnh, thực hiện bản dịch trên thiết bị hoặc trên đám mây:
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") } } } }
Trong ví dụ này, logic định tuyến tuỳ chỉnh chỉ xem xét ngôn ngữ nguồn và ngôn ngữ đích của bản dịch. Tuy nhiên, dựa trên trường hợp sử dụng của ứng dụng, bạn có thể mở rộng logic định tuyến để bao gồm các yếu tố khác như phiên bản mô hình trên thiết bị, khả năng kết nối mạng, trạng thái pin, v.v.
Bảo mật các quy trình AI: Kiểm tra ứng dụng Firebase
Cuối cùng, việc sử dụng AI trên đám mây có thể dẫn đến tình trạng lạm dụng khoá API hoặc tính phí trái phép. Để bảo mật các lệnh gọi API, chúng tôi đã tích hợp Kiểm tra ứng dụng Firebase bằng cả Play Integrity (giai đoạn phát hành chính thức) và Trình cung cấp gỡ lỗi cục bộ (để phát triển cục bộ hoặc trình mô phỏng).
Trong tệp JetPackerApplication.kt, chúng ta cài đặt nhà cung cấp dịch vụ gỡ lỗi khi khởi động và kích hoạt quy trình xác thực ẩn danh để thiết lập một phiên người dùng an toàn:
// 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() }
Khi tạo cục bộ trên một trình mô phỏng, Kiểm tra ứng dụng sẽ in một khoá bí mật của mã thông báo cục bộ vào Logcat:
Enter this debug secret into the allow list in the Firebase Console: a8c2dd4c-xxxx-xxxx-xxxx-ef6c114ba27e
Sau khi được đăng ký trong bảng điều khiển của Firebase, các yêu cầu cục bộ sẽ được Kiểm tra ứng dụng xác minh và xác thực đầy đủ, giúp bảo vệ phần phụ trợ của chúng tôi trong khi cho phép chúng tôi kiểm thử ứng dụng cục bộ.
Kết luận
Bằng cách kết hợp các chức năng của mô hình đám mây (căn cứ, hướng dẫn hệ thống) với các chức năng trên thiết bị (định tuyến kết hợp, dịch, kiểm tra ứng dụng bảo mật), chúng tôi đã tạo ra một ứng dụng du lịch thông minh, an toàn và có thể sử dụng khi không có mạng.
Hãy xem toàn bộ mã nguồn của Jetpacker trên GitHub và khám phá tài liệu về Firebase để bắt đầu:
Tài liệu về Firebase AI Logic
Firebase Hybrid Inference API
Tìm hiểu thêm
Hãy xem các phần khác trong loạt bài đăng này trên blog:
Phần 1: Giới thiệu về ứng dụng và thông tin tổng quan cấp cao.
Phần 2: Thông tin tình báo trên thiết bị. Tìm hiểu sâu về các API GenAI của Bộ công cụ học máy và Gemini Nano để tạo các tính năng ưu tiên quyền riêng tư như tóm tắt hành trình, phân tích biên nhận và xử lý âm thanh cục bộ.
Phần 3 (bài đăng này!): Suy luận kết hợp và suy luận trên đám mây. Khám phá cách sử dụng Firebase AI Logic để đưa ra câu trả lời dựa trên LLM trong dữ liệu thực tế như Google Maps và bối cảnh trên web.
Phần 4: Tích hợp hệ thống. Tích hợp với hệ thống thông minh Android bằng AppFunctions.
Phần 5 (sắp ra mắt): Quy trình công việc dựa trên tác nhân trong ứng dụng. Mở rộng ứng dụng bằng một trợ lý đặt phòng toàn diện dựa trên A2UI và ADK.
Bạn muốn tìm hiểu thêm về hoạt động phát triển trên Android? Theo dõi Android Developers trên YouTube hoặc LinkedIn!
Tất cả đoạn mã trong bài đăng này trên blog đều tuân theo thông báo bản quyền sau đây:
Copyright 2026 Google LLC. SPDX-License-Identifier: Apache-2.0
-
Hướng dẫnChào mừng bạn quay lại loạt bài đăng trên blog "Tạo ứng dụng Android thông minh", nơi chúng ta sẽ lấy một ứng dụng Android cơ bản và biến đổi ứng dụng đó thành một trải nghiệm được cá nhân hoá, thông minh và có tác nhân. Trong bài đăng trước, chúng tôi đã giới thiệu Jetpacker, ứng dụng minh hoạ mà chúng tôi sẽ sử dụng trong suốt loạt bài này.
Caren Chang • 6 phút đọc -
Hướng dẫnJetpacker là một ứng dụng trình diễn kỹ thuật do nhóm của chúng tôi xây dựng từ đầu cho Google I/O năm nay (được xây dựng bằng Antigravity). Về cơ bản, Jetpacker giúp người dùng lên kế hoạch, khám phá và tận hưởng chuyến phiêu lưu lớn tiếp theo.
Jolanda Verhoef • 4 phút đọc -
Hướng dẫnChào mừng bạn quay lại loạt bài đăng trên blog "Tạo ứng dụng Android thông minh", nơi chúng ta sẽ lấy một ứng dụng Android cơ bản và biến đổi ứng dụng đó thành một trải nghiệm được cá nhân hoá, thông minh và có tác nhân. Trong bài đăng trước, chúng ta đã tìm hiểu cách tận dụng Firebase AI Logic để tạo các tính năng AI kết hợp và được lưu trữ trên đám mây.
Ben Weiss • 6 phút đọc
Nhận thông tin chi tiết mới nhất về hoạt động phát triển trên Android trong hộp thư đến của bạn mỗi tuần.