ยินดีต้อนรับกลับสู่ชุดบล็อกโพสต์ "สร้างแอป Android ที่ชาญฉลาด" ซึ่งเราจะนำแอป Android พื้นฐานมาเปลี่ยนให้เป็นประสบการณ์การใช้งานที่ปรับเปลี่ยนตามโปรไฟล์ของผู้ใช้ ชาญฉลาด และมีเอเจนต์ ในโพสต์ก่อนหน้า เราได้พูดถึงวิธีสร้างฟีเจอร์อัจฉริยะบนอุปกรณ์โดยใช้ Gemini Nano ผ่าน Prompt API ของ ML Kit
ในโพสต์นี้ เราจะมาดูวิธีใช้ประโยชน์จาก Firebase AI Logic เพื่อสร้างฟีเจอร์ AI แบบไฮบริดและที่โฮสต์ในระบบคลาวด์
- อิงคำตอบตามบริบทในโลกแห่งความเป็นจริง
- การกำหนดเส้นทางคำขอแบบไดนามิกระหว่างการดำเนินการในระบบคลาวด์และการดำเนินการในเครื่องโดยใช้การอนุมานแบบไฮบริด
- การแปลเนื้อหาด้วยระบบการกำหนดเส้นทางที่กำหนดเอง
บางครั้ง Use Case อาจต้องใช้โมเดล AI ที่มีความรู้รอบตัวมากขึ้น หน้าต่างบริบทที่ใหญ่ขึ้นมาก หรือความสามารถในการจัดการคำค้นหาที่ซับซ้อน ในกรณีดังกล่าว เราสามารถใช้ประโยชน์จากโมเดลระบบคลาวด์ได้
ในบางครั้ง คุณอาจต้องการสิ่งที่ดีที่สุดจากทั้ง 2 ระบบ นั่นคือใช้การอนุมานแบบไฮบริดเพื่อเรียกใช้ในอุปกรณ์เมื่อพร้อมใช้งานเพื่อลดต้นทุน ในขณะเดียวกันก็กลับไปใช้ระบบคลาวด์เพื่อให้มั่นใจว่าอุปกรณ์ทั้งหมดจะใช้งานร่วมกันได้
มาดูวิธีที่เราใช้ฟีเจอร์ระบบคลาวด์และไฮบริด 3 รายการใน Jetpacker กัน
- ผู้ช่วยพิพิธภัณฑ์ที่มีการเชื่อมต่อแหล่งข้อมูลเว็บ
- การร่างรีวิวร้านอาหารแบบไฮบริด
- แชทสนับสนุนโรงแรมที่มีการแปลสดที่กำหนดเส้นทางเอง
ใช้การอ้างอิง LLM เพื่อรับข้อมูลล่าสุดแชทบ็อตผู้ช่วยในพิพิธภัณฑ์ที่มีการอ้างอิง LLM
ผู้ช่วยพิพิธภัณฑ์ เป็นแชทบ็อตแบบอินเทอร์แอกทีฟที่ออกแบบมาเพื่อช่วยผู้ใช้วางแผนการเยี่ยมชมพิพิธภัณฑ์ โดยจะให้รายละเอียดล่าสุดแก่ผู้เข้าชมเกี่ยวกับนิทรรศการที่เฉพาะเจาะจง เวลาทำการปัจจุบัน ราคาตั๋ว และอื่นๆ
เมื่อสร้างฟีเจอร์ AI ความท้าทายที่พบบ่อยคือการทำให้โมเดลตอบด้วยข้อมูลที่อัปเดต ถูกต้อง และเฉพาะเจาะจงจากโลกแห่งความเป็นจริง แม้ว่าโมเดลระบบคลาวด์จะมีความรู้เกี่ยวกับโลกมากมาย แต่ก็อาจไม่ทราบเกี่ยวกับนิทรรศการตามฤดูกาลหรือเวลาเปิดทำการของวันนี้
เราสามารถใช้เทคนิคการอ้างอิงเพื่อเพิ่มบริบทพิเศษให้กับหน้าต่างบริบทของโมเดลเพื่อลดช่องว่างนี้ Firebase AI Logic SDK รองรับการอ้างอิง 3 ประเภท ได้แก่
- การอ้างอิง URL: อ้างอิงคำตอบโดยใช้เนื้อหาจากหน้าเว็บที่เฉพาะเจาะจง (เช่น ราคาตั๋วปัจจุบันหรือกฎของพิพิธภัณฑ์)
- การอ้างอิง Google Search: อนุญาตให้โมเดลค้นหาดัชนี Google Search แบบเรียลไทม์เพื่อดูรายละเอียดล่าสุด
- การอ้างอิงจาก Maps: การใช้ข้อมูลตำแหน่งของ Google Maps
ใน Jetpacker เราจะสร้างเครื่องมือที่มีอยู่แบบไดนามิกตามฟีเจอร์แฟล็กที่เปิดใช้ และเริ่มต้นโมเดล Generative โดยใช้ 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 เราจะต่อท้าย 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)
การอนุมานแบบไฮบริด: การสร้างรีวิวในอุปกรณ์ด้วย Deep Link ของ Maps
งาน AI บางอย่างไม่จำเป็นต้องใช้โมเดลบนคลาวด์ และอุปกรณ์บางอย่างก็ไม่ได้ออนไลน์ เมื่อเร็วๆ นี้ เราได้เปิดตัว Firebase API สำหรับการอนุมานแบบไฮบริดเพื่อช่วยให้นักพัฒนาแอปปรับสมดุลเวลาในการตอบสนอง ต้นทุน และความพร้อมใช้งานแบบออฟไลน์
ใน 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 รองรับโหมดการกำหนดเส้นทางที่แตกต่างกัน 4 โหมด ดังนี้
- PREFER_ON_DEVICE: ให้ความสำคัญกับการดำเนินการในเครื่องและเปลี่ยนไปใช้ระบบคลาวด์หาก Gemini Nano ไม่พร้อมใช้งาน
- PREFER_IN_CLOUD: ให้ความสำคัญกับการดำเนินการในระบบคลาวด์และกลับไปใช้ในอุปกรณ์หากอุปกรณ์ออฟไลน์
- ONLY_ON_DEVICE: จำกัดการดำเนินการเฉพาะในอุปกรณ์เท่านั้น
- ONLY_IN_CLOUD: จำกัดการดำเนินการเฉพาะในระบบคลาวด์
เมื่อสร้างรีวิวแล้ว เราจะคัดลอกรีวิวไปยังคลิปบอร์ดและใช้ Intent เพื่อเปิด Google Maps ไปยังหน้ารีวิวของร้านอาหารโดยตรง ซึ่งจะช่วยให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ราบรื่น
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 เราใช้สแต็กการกำหนดเส้นทางที่กำหนดเองซึ่งคำนึงถึงสิ่งต่อไปนี้
- การระบุภาษา: เราสามารถตรวจหาภาษาของข้อความขาเข้าได้โดยใช้ ML Kit Language Identification API ในอุปกรณ์
- การแปลในอุปกรณ์ (Gemini Nano): Prompt API ของ ML Kit ช่วยให้เราแปลคู่ภาษาทั่วไปได้โดยตรงในอุปกรณ์ ซึ่งช่วยประหยัดแบนด์วิดท์และค่าใช้จ่ายในระบบคลาวด์
- การแปลในระบบคลาวด์ (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") } } } }
ในตัวอย่างนี้ ตรรกะการกำหนดเส้นทางที่กำหนดเองจะพิจารณาเฉพาะภาษาต้นฉบับและภาษาเป้าหมายของการแปล อย่างไรก็ตาม คุณสามารถขยายตรรกะการกำหนดเส้นทางให้รวมปัจจัยอื่นๆ เช่น เวอร์ชันโมเดลในอุปกรณ์ การเชื่อมต่อเครือข่าย สถานะแบตเตอรี่ และอื่นๆ ได้โดยอิงตามกรณีการใช้งานของแอป
การรักษาความปลอดภัยให้ไปป์ไลน์ AI: Firebase App Check
สุดท้ายนี้ การใช้ AI ในระบบคลาวด์จะเปิดโอกาสให้มีการละเมิดคีย์ API หรือการเรียกเก็บเงินที่ไม่ได้รับอนุญาต เราได้ผสานรวม Firebase App Check โดยใช้ทั้ง Play Integrity (เวอร์ชันที่ใช้งานจริง) และผู้ให้บริการแก้ไขข้อบกพร่องในเครื่อง (สำหรับการพัฒนาในเครื่องหรือโปรแกรมจำลอง) เพื่อรักษาความปลอดภัยให้กับการเรียก API
ในไฟล์ 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 ซึ่งจะปกป้องแบ็กเอนด์ของเราในขณะที่ให้เราทดสอบแอปในเครื่องได้
บทสรุป
เราได้สร้างแอปการเดินทางที่ชาญฉลาด ปลอดภัย และพร้อมใช้งานแบบออฟไลน์ด้วยการรวมความสามารถของโมเดลระบบคลาวด์ (การอ้างอิง คำสั่งของระบบ) เข้ากับความสามารถบนอุปกรณ์ (การกำหนดเส้นทางแบบไฮบริด การแปล การตรวจสอบแอปความปลอดภัย)
ดูซอร์สโค้ดทั้งหมดของ Jetpacker บน GitHub และสำรวจเอกสารประกอบของ Firebase เพื่อเริ่มต้นใช้งาน
เอกสารประกอบของ Firebase AI Logic
Firebase Hybrid Inference API
ดูข้อมูลเพิ่มเติม
ดูส่วนอื่นๆ ของซีรีส์บล็อกโพสต์นี้ได้ที่
ส่วนที่ 1: การแนะนำแอปและภาพรวมระดับสูง
ส่วนที่ 2: ข้อมูลอัจฉริยะในอุปกรณ์ เจาะลึก GenAI API ของ ML Kit และ Gemini Nano เพื่อสร้างฟีเจอร์ที่คำนึงถึงความเป็นส่วนตัวเป็นอันดับแรก เช่น การสรุปแผนการเดินทาง การแยกวิเคราะห์ใบเสร็จ และการประมวลผลเสียงในเครื่อง
ตอนที่ 3 (โพสต์นี้): การให้เหตุผลแบบไฮบริดและแบบคลาวด์ ดูวิธีใช้ Firebase AI Logic เพื่อเชื่อมต่อแหล่งข้อมูลคำตอบของ LLM จากข้อมูลในโลกแห่งความเป็นจริง เช่น Google Maps และบริบทของเว็บ
ตอนที่ 4: การผสานรวมระบบ การผสานรวมกับระบบอัจฉริยะของ Android โดยใช้ AppFunctions
ส่วนที่ 5 (เร็วๆ นี้): เวิร์กโฟลว์ของ Agent ในแอป ขยายแอปด้วยผู้ช่วยการจองแบบครบวงจรที่ขับเคลื่อนโดย A2UI และ ADK
หากสนใจดูข้อมูลเพิ่มเติมเกี่ยวกับการพัฒนาแอป Android ติดตามนักพัฒนาแอป Android บน 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 เพื่อสร้างฟีเจอร์ AI แบบไฮบริดและแบบโฮสต์ในระบบคลาวด์
Ben Weiss • อ่าน 6 นาที
รับข้อมูลเชิงลึกด้านการพัฒนาแอป Android ล่าสุดส่งตรงถึงกล่องจดหมายของคุณทุกสัปดาห์