ยินดีต้อนรับกลับสู่ซีรีส์บล็อกโพสต์ "สร้างแอป Android อัจฉริยะ" ซึ่งเราจะนำแอป Android พื้นฐานมาเปลี่ยนให้เป็นประสบการณ์การใช้งานที่ปรับเปลี่ยนตามโปรไฟล์ของผู้ใช้ อัจฉริยะ และทำงานด้วยตัวเองได้ ในโพสต์ก่อนหน้านี้ เราได้พูดถึงวิธีสร้างฟีเจอร์อัจฉริยะในอุปกรณ์โดยใช้ Gemini Nano ผ่าน Prompt API ของ ML Kit
ในโพสต์นี้ เราจะมาดูวิธีใช้ประโยชน์จาก Firebase AI Logic เพื่อสร้างฟีเจอร์ AI ที่โฮสต์ในระบบคลาวด์และแบบไฮบริด
- ให้คำตอบอิงตามบริบทในโลกแห่งความเป็นจริง
- กำหนดเส้นทางคำขอแบบไดนามิกระหว่างการดำเนินการในระบบคลาวด์และการดำเนินการในเครื่องโดยใช้การอนุมานแบบไฮบริด
- แปลเนื้อหาด้วยระบบการกำหนดเส้นทางที่กำหนดเอง
บางครั้งกรณีการใช้งานก็ต้องใช้โมเดล AI ที่มีความรู้เกี่ยวกับโลกมากขึ้น มีหน้าต่างบริบทที่ใหญ่ขึ้นมาก หรือมีความสามารถในการจัดการคำค้นหาที่ซับซ้อน ในสถานการณ์ดังกล่าว เราสามารถใช้ประโยชน์จากโมเดลในระบบคลาวด์ได้
หรือบางครั้งคุณก็ต้องการสิ่งที่ดีที่สุดจากทั้ง 2 ระบบ นั่นคือใช้การอนุมานแบบไฮบริดเพื่อเรียกใช้ในอุปกรณ์เมื่อพร้อมใช้งานเพื่อลดต้นทุน ขณะเดียวกันก็ใช้ระบบคลาวด์เป็นตัวเลือกสำรองเพื่อให้มั่นใจว่าอุปกรณ์ทุกเครื่องจะใช้งานได้
มาดูวิธีที่เราใช้ฟีเจอร์ 3 อย่างในระบบคลาวด์และแบบไฮบริดใน Jetpacker กัน
- ผู้ช่วยพิพิธภัณฑ์ที่มีการอิงตามเว็บ
- การร่างรีวิวร้านอาหารแบบไฮบริด
- แชทสนับสนุนโรงแรมที่มีการแปลแบบเรียลไทม์ที่กำหนดเส้นทางเอง
ใช้การอิงตาม LLM เพื่อรับข้อมูลล่าสุด แชทบ็อตผู้ช่วยพิพิธภัณฑ์ที่มีการอิงตาม LLM
ผู้ช่วยพิพิธภัณฑ์ เป็นแชทบ็อตแบบอินเทอร์แอกทีฟที่ออกแบบมาเพื่อช่วยผู้ใช้วางแผนการมาเยี่ยมชมพิพิธภัณฑ์ โดยจะให้รายละเอียดล่าสุดแก่ผู้เข้าชมเกี่ยวกับนิทรรศการที่เฉพาะเจาะจง เวลาทำการปัจจุบัน ราคาตั๋ว และอื่นๆ
เมื่อสร้างฟีเจอร์ AI ความท้าทายที่พบบ่อยคือการทำให้โมเดลตอบคำถามด้วยข้อมูลที่สดใหม่ แม่นยำ และเฉพาะเจาะจงเกี่ยวกับโลกแห่งความเป็นจริง แม้ว่าโมเดลในระบบคลาวด์จะมีความรู้เกี่ยวกับโลกมากมาย แต่ก็อาจไม่ทราบเกี่ยวกับนิทรรศการตามฤดูกาลหรือเวลาทำการของวันนี้
เราสามารถใช้เทคนิคการอิงตามเพื่อเพิ่มบริบทพิเศษลงในหน้าต่างบริบทของโมเดลเพื่อลดช่องว่างนี้ Firebase AI Logic SDK รองรับการอิงตาม 3 ประเภท ได้แก่
- การอิงตาม URL: การอิงตามคำตอบโดยใช้เนื้อหาจากหน้าเว็บที่เฉพาะเจาะจง (เช่น ราค่าตั๋วปัจจุบันหรือกฎของพิพิธภัณฑ์)
- การอิงตาม Google Search: การอนุญาตให้โมเดลค้นหาดัชนีการค้นหาของ Google แบบเรียลไทม์เพื่อดูรายละเอียดล่าสุด
- การอิงตาม 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)
การอนุมานแบบไฮบริด: การสร้างรีวิวในอุปกรณ์ด้วยดีปลิงก์ของ 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" )
เนื่องจากคำตอบของพนักงานต้อนรับเป็นภาษาท้องถิ่นของโรงแรม (เช่น ภาษาฝรั่งเศสสำหรับ Hotel Le Meurice ในปารีส) เราจึงต้องแปลข้อความเป็นภาษาที่ผู้ใช้ต้องการ
แม้ว่าโมเดลแบบไฮบริดจะกำหนดค่ากำหนดการกำหนดเส้นทางแบบง่ายได้ แต่สถานการณ์ที่ซับซ้อนต้องใช้ตรรกะการกำหนดเส้นทางที่กำหนดเอง ใน 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 และ Gemini Nano ของ ML Kit เพื่อสร้างฟีเจอร์ที่ให้ความสำคัญกับความเป็นส่วนตัวเป็นอันดับแรก เช่น การสรุปแผนการเดินทาง การแยกวิเคราะห์ใบเสร็จ และการประมวลผลเสียงในเครื่อง
ส่วนที่ 3 (โพสต์นี้): การให้เหตุผลแบบไฮบริดและในระบบคลาวด์ สำรวจวิธีใช้ Firebase AI Logic เพื่อให้คำตอบของ LLM อิงตามข้อมูลในโลกแห่งความเป็นจริง เช่น Google Maps และบริบทเว็บ
ส่วนที่ 4: การผสานรวมระบบ การผสานรวมกับระบบอัจฉริยะของ Android โดยใช้ AppFunctions
ส่วนที่ 5 (เร็วๆ นี้): เวิร์กโฟลว์แบบทำงานด้วยตัวเองได้ในแอป ขยายแอปด้วยผู้ช่วยการจองแบบครบวงจรที่ขับเคลื่อนโดย 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 ล่าสุดส่งตรงถึงกล่องจดหมายของคุณ ทุกสัปดาห์