วิธีการ

สร้างแอป Android อัจฉริยะ: การอนุมานในอุปกรณ์

อ่าน 6 นาที
ดูโปรไฟล์ของ Caren Chang
Caren Chang วิศวกรนักพัฒนาซอฟต์แวร์สัมพันธ์

ยินดีต้อนรับกลับสู่ชุดบล็อกโพสต์ "สร้างแอป Android ที่ชาญฉลาด" ซึ่งเราจะนำแอป Android พื้นฐานมาเปลี่ยนให้เป็นประสบการณ์การใช้งานที่ปรับเปลี่ยนตามโปรไฟล์ของผู้ใช้ ชาญฉลาด และมีเอเจนต์ ในโพสต์ก่อนหน้า เราได้แนะนำ Jetpacker ซึ่งเป็นแอปเดโมที่เราจะใช้ตลอดทั้งชุดนี้ 

ในบล็อกโพสต์นี้ เราจะแชร์วิธีใช้ Gemini Nano ผ่าน Prompt API ของ ML Kit เพื่อสร้างฟีเจอร์อัจฉริยะในอุปกรณ์

การสร้างฟีเจอร์อัจฉริยะในอุปกรณ์หมายถึงความสามารถในการประมวลผลพรอมต์และข้อมูลในอุปกรณ์โดยตรงโดยไม่ต้องส่งข้อมูลไปยังเซิร์ฟเวอร์ ซึ่งมีข้อดีหลายประการ ดังนี้ 

  • ประมวลผลข้อมูลผู้ใช้ในเครื่องในอุปกรณ์ได้ ซึ่งจะช่วยรักษาความเป็นส่วนตัวของผู้ใช้
  • ฟังก์ชันการทำงานของโมเดลเชื่อถือได้แม้จะมีการเชื่อมต่ออินเทอร์เน็ตไม่สม่ำเสมอหรือไม่เชื่อมต่อเลย
  • ไม่มีค่าใช้จ่ายในการอนุมานบนระบบคลาวด์เพิ่มเติม เนื่องจากทุกอย่างทำงานบนฮาร์ดแวร์ของผู้ใช้

เราได้พิจารณาถึงประโยชน์ของการใช้งานในอุปกรณ์และระบุฟีเจอร์ 3 อย่างที่จะเพิ่มใน Jetpacker เพื่อปรับปรุงประสบการณ์ของผู้ใช้ ได้แก่ การสรุปแผนการเดินทาง การจัดการค่าใช้จ่าย และการบันทึกเสียง

Screenshot 2026-07-02 at 12.57.08 PM.png
ฟีเจอร์ในอุปกรณ์ใน Jetpacker: สรุปแผนการเดินทาง จัดการค่าใช้จ่าย และบันทึกเสียง

การสรุปข้อความสั้นๆ ที่ปรับแต่งมาอย่างมีคุณภาพ

หน้าจอแผนการเดินทางจะแสดงภาพรวมโดยย่อของกิจกรรมทั้งหมดสำหรับการเดินทางที่กำหนดให้แก่ผู้ใช้ เนื่องจากหน้าจอนี้มีข้อมูลจำนวนมาก จึงอาจทำให้คุณรู้สึกสับสนได้อย่างรวดเร็ว เราสามารถเพิ่มส่วน"เตรียมพร้อมสำหรับทริป"ไว้ที่ด้านบนเพื่อช่วยให้ผู้ใช้เตรียมตัวได้โดยไม่รู้สึกว่ามีข้อมูลมากเกินไป

Screenshot_20260702_111934.png
สรุปทริปปารีสสุดโรแมนติกเป็นการผจญภัยแบบปารีเซียงสุดคลาสสิกที่ผสมผสานศิลปะ สถานที่ท่องเที่ยว และอาหารอร่อยๆ นอกจากนี้ เรายังได้เพิ่มเคล็ดลับและวลีที่มีประโยชน์ด้วย

การป้อนแผนการเดินทางและขอให้ LLM สรุปแผนดังกล่าวจะช่วยให้เราสร้างสรุปการเดินทางอย่างรวดเร็วพร้อมเคล็ดลับการจัดกระเป๋าและวลีท้องถิ่นที่เป็นประโยชน์ได้ นี่เป็นกรณีการใช้งานที่ยอดเยี่ยมสำหรับโมเดลในอุปกรณ์ด้วยเหตุผลหลายประการ 

  • ประสิทธิภาพและคุณภาพ: ทั้งข้อความอินพุตและเอาต์พุตค่อนข้างสั้น ด้วยเหตุนี้ เราจึงคาดหวังได้ว่าประสิทธิภาพและคุณภาพของโซลูชันในอุปกรณ์จะเทียบเท่ากับโมเดลบนคลาวด์ที่มีประสิทธิภาพมากกว่า
  • ความสามารถในการปรับขนาด: การเปลี่ยนการอนุมานในอุปกรณ์ช่วยให้เราขยายฟีเจอร์นี้จากผู้ใช้เพียงไม่กี่รายเป็นผู้ใช้หลายล้านรายได้โดยไม่ต้องกังวลเรื่องการจัดการต้นทุนการอนุมานบนคลาวด์ที่เพิ่มขึ้น
  • เวลาในการตอบสนองต่ำและความน่าเชื่อถือ: การอนุมานในอุปกรณ์รับประกันเวลาในการตอบสนองต่ำ ซึ่งจะมอบประสบการณ์ที่เชื่อถือได้แม้ว่าผู้ใช้จะออฟไลน์อยู่ก็ตาม

หากต้องการสร้างด้วยโมเดลในอุปกรณ์ เราจะใช้ Gemini Nano ซึ่งเป็นโมเดลที่มีประสิทธิภาพที่สุดของ Google ที่ได้รับการเพิ่มประสิทธิภาพสำหรับอุปกรณ์เคลื่อนที่ เราเปิดตัว Gemini Nano เป็นครั้งแรกเมื่อ 2-3 ปีก่อน และตอนนี้ Gemini Nano ทำงานบนอุปกรณ์กว่า 140 ล้านเครื่อง โมเดลเวอร์ชันล่าสุดอย่าง Gemini Nano 4 สร้างขึ้นบนพื้นฐานสถาปัตยกรรมของโมเดล Gemma 4 ที่เพิ่งเปิดตัว และได้รับการเพิ่มประสิทธิภาพเพิ่มเติมเพื่อประสิทธิภาพสูงสุดของแบตเตอรี่และประสิทธิภาพ 

การใช้ Prompt API ของ ML Kit ช่วยให้เราใช้ประโยชน์จากความสามารถของโมเดลใหม่ของ Gemini Nano 4 เพื่อสร้างต้นแบบฟีเจอร์ในอุปกรณ์ได้ เราจะสร้างพรอมต์ที่มีแผนการเดินทางและขอให้โมเดลสร้างข้อมูลสรุปพร้อมเคล็ดลับการเตรียมตัว

โดยปกติแล้วการค้นหาพรอมต์ที่เหมาะสมที่สุดมักจะต้องมีการทำซ้ำ และแอป AICore ก็เหมาะสำหรับขั้นตอนนี้ในกระบวนการ หลังจากเลือกใช้ตัวเลือกเวอร์ชันตัวอย่างสำหรับนักพัฒนาซอฟต์แวร์ของ AICore แล้ว เราจะดาวน์โหลดโมเดลเวอร์ชันตัวอย่าง เช่น Gemini Nano 4 เพื่อทดสอบพรอมต์และดูเอาต์พุตที่คาดหวังของโมเดลได้ การปรับพรอมต์เพียงไม่กี่ครั้งช่วยให้เราปรับปรุงความเร็วในการตอบกลับจาก 13 วินาทีเป็นไม่ถึง 2 วินาทีได้ ดูการติดตั้งโค้ดขั้นสุดท้ายและพรอมต์ได้ที่นี่

[ASSET HERE - FILE TOO LARGE ATM]

การประมวลผลข้อมูลในเครื่องสำหรับข้อมูลจากผู้ใช้ที่ละเอียดอ่อน

จากนั้น เราจะสร้างเครื่องมือจัดการค่าใช้จ่ายที่ใช้งานง่ายเพื่อช่วยให้ผู้ใช้เพลิดเพลินกับการเดินทางมากยิ่งขึ้น ซึ่งจะช่วยลดภาระงานในการคัดแยกใบเสร็จและคำนวณงบประมาณ 

เนื่องจากใบเสร็จอาจมีข้อมูลที่ละเอียดอ่อน เช่น หมายเลขบัตรเครดิตและที่อยู่ จึงเป็นอีกหนึ่งกรณีการใช้งานที่ยอดเยี่ยมสำหรับโซลูชันในอุปกรณ์ เมื่อใช้ในอุปกรณ์ ผู้ใช้จะมั่นใจได้ว่าระบบจะประมวลผลข้อมูลส่วนตัวในอุปกรณ์โดยไม่ต้องส่งข้อมูลไปยังระบบคลาวด์

นอกจากนี้ Gemini Nano 4 ยังปรับปรุงความสามารถของโมเดลสำหรับความสามารถในการประมวลผลข้อมูลหลายรูปแบบ โดยเฉพาะอย่างยิ่งสำหรับงานด้านการทำความเข้าใจรูปภาพ เช่น OCR และการดึงข้อมูลภาพ ซึ่งทำให้เป็นโซลูชันที่ยอดเยี่ยมสำหรับงานต่างๆ เช่น การดึงข้อมูลจากใบเสร็จ

สำหรับกรณีการใช้งานนี้ พรอมต์จะวิเคราะห์รูปภาพใบเสร็จ และแสดงข้อมูล เช่น ชื่อที่สร้างขึ้น จำนวนเงินที่ใช้จ่าย และหมวดหมู่ของค่าใช้จ่าย หากต้องการให้โมเดลแสดงข้อมูลในรูปแบบที่ต้องการ เราสามารถใช้ Structured Output API ของ ML Kit เพื่อแสดงออบเจ็กต์ข้อมูล Kotlin ที่เรากำหนดได้อย่างราบรื่น

// implementation("com.google.mlkit:genai-prompt:1.0.0-beta3")
// ksp("com.google.mlkit:genai-schema-compiler:1.0.0-alpha1")

@Generable("Information extracted from an expense receipt")
data class ParsedReceipt(
  @Guide("Generated title for the expense less than 6 words. Based on restaurant or activity name.")
  val title: String,
  @Guide("Total amount of the expense. Look for values at the bottom and words like total or balance due.")
  val amount: Double,
  @Guide("Type of expense", enumValues = ["travel", "food", "shopping", "entertainment", "other"])
  val category: String,
)

val prompt = "Determine if the image is a receipt or expense. 
    If it is NOT a receipt or expense, output the text 'NOT_A_RECEIPT'.
    Otherwise, parse the receipt information."

val request = generateContentRequest(ImagePart(bitmap), TextPart(prompt)) {}
val requestWithStructuredOutput = generateTypedContentRequest(request, ParsedReceipt::class)

// Define the configuration for Gemini Nano 4 E4B preview model  
// When selecting models, you can specify which performance charactertists are most important
//  for your use case. Use ModelPreference.FULL when you want to prioritize reasoning power over speed. 
//  Use ModelPreference.FAST when complex logic is not required and latency is a priority.
val previewFullConfig = generationConfig {
    modelConfig = modelConfig {
        releaseStage = ModelReleaseStage.PREVIEW
        preference = ModelPreference.FULL
    }
}

val geminiNano4BPreviewModel = Generation.getClient(previewFullConfig)
val response = geminiNano4BPreviewModel.generateContent(requestWithStructuredOutput)
val parsedReceipt: ParsedReceipt? = response.candidates.firstOrNull()?.response

อินพุตหลายรูปแบบ

สุดท้ายนี้ เพื่อช่วยให้ผู้ใช้บันทึกเสียงช่วยเตือนระหว่างการเดินทาง เรามาสร้างฟีเจอร์บันทึกเสียงที่ทำงานบนอุปกรณ์อย่างเต็มรูปแบบกัน เราจะช่วยให้ผู้ใช้บันทึกเสียงสั้นๆ ที่จะถอดเสียงเป็นข้อความโดยอัตโนมัติได้โดยใช้ Speech Recognition API ของ ML Kit เมื่อมีข้อความที่ถอดเสียงแล้ว เราจะใช้ Prompt API ของ ML Kit เพื่อระบุกิจกรรมในทริปที่เชื่อมโยงกับบันทึกเสียงที่บันทึกไว้ ซึ่งจะช่วยให้ผู้ใช้สรุปทริปได้อย่างง่ายดายขณะเลื่อนดูแผนการเดินทางของทริป 

Screenshot_20260702_115529.png
แผนการเดินทางในวันหยุดที่กรุงโรมแสดงข้อความที่ดึงมาจากบันทึกเสียง

API การจดจำเสียง GenAI ของ ML Kit ช่วยให้คุณถอดเสียงเนื้อหาเสียงเป็นข้อความในอุปกรณ์ได้อย่างสมบูรณ์โดยใช้ 2 โหมดที่แตกต่างกัน โหมดพื้นฐานใช้โมเดลการจดจำเสียงแบบดั้งเดิมในอุปกรณ์ และพร้อมใช้งานในอุปกรณ์ Android ส่วนใหญ่ที่มีระดับ API 31 ขึ้นไป โหมดขั้นสูงใช้ Gemini Nano เพื่อให้ครอบคลุมภาษาได้กว้างขึ้นและมีคุณภาพดีขึ้น โดยขณะนี้รองรับในอุปกรณ์ Pixel 10

สำหรับฟีเจอร์นี้ เราได้รวม Speech Recognition API เข้ากับ ML Kit GenAI Prompt API ดังนี้

// implementation("com.google.mlkit:genai-prompt:1.0.0-beta3")
// implementation("com.google.mlkit:genai-speech-recognition:1.0.0-alpha1")

val tripEvents = ... 

// Set up speech recognition
val speechRecognizerOptions =
    speechRecognizerOptions {
        locale = Locale.US
        preferredMode = SpeechRecognizerOptions.Mode.MODE_ADVANCED
    }
val speechRecognizer: SpeechRecognizer = SpeechRecognition.getClient(speechRecognizerOptions)

suspend fun transcribeVoiceNote(recognizer: SpeechRecognizer) {
    // Display partial text as the user is recording audio
    var partialTextResponse = ""

    // Display the full text once user is finished recording audio
    var transcription = ""

    val request: SpeechRecognizerRequest
        = speechRecognizerRequest { audioSource = AudioSource.fromMic() }
    recognizer.startRecognition(request).collect { response ->
        when (response) {
            is SpeechRecognizerResponse.PartialTextResponse -> {
                partialTextResponse = response.text
            }
            is SpeechRecognizerResponse.FinalTextResponse -> {
                transcription = response.text
                processAndCategorizeVoiceNote(transcription, tripEvents)
            }
        }
    }
}

fun processAndCategorizeVoiceNote(transcribedVoiceNote: String, events: List<Event>) {
    val prompt = "Given the voice note $transcribedVoiceNote
     and the following events for this trip: $events, rewrite this transcription
     to remove filler words. Then, identify which events from the
     list this rewritten transcription matches to."

     // Utilize ML Kit's Prompt API to process voice note and tag it with the relevant trip activities
     Generation.getClient().generateContent(prompt)
}

บทสรุป

การใช้ GenAI API ของ ML Kit ช่วยให้เราใช้ประโยชน์จาก Gemini Nano เพื่อพัฒนาฟีเจอร์อัจฉริยะในอุปกรณ์อย่างเต็มรูปแบบสำหรับแอป JetPacker และมอบประสบการณ์การใช้งานที่ดียิ่งขึ้นโดยไม่มีค่าใช้จ่ายเพิ่มเติมในระบบคลาวด์

ดูซอร์สโค้ดทั้งหมดของ Jetpacker ใน Github และดูวิดีโอสร้างแอป Android อัจฉริยะด้วย AI ของ Google เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีผสานรวมฟีเจอร์อัจฉริยะเข้ากับแอปโดยตรงโดยใช้โมเดลในอุปกรณ์ การให้เหตุผลที่ขับเคลื่อนด้วยระบบคลาวด์ และเฟรมเวิร์กแบบเอเจนต์ล่าสุด

ดูข้อมูลเพิ่มเติม

ดูส่วนอื่นๆ ของซีรีส์บล็อกโพสต์นี้ได้ที่

ส่วนที่ 1: บทนำของแอปและภาพรวมระดับสูง

ส่วนที่ 2 (โพสต์นี้) ความชาญฉลาดในอุปกรณ์ เจาะลึก GenAI API ของ ML Kit และ Gemini Nano เพื่อสร้างฟีเจอร์ที่เน้นความเป็นส่วนตัวเป็นอันดับแรก เช่น การสรุปแผนการเดินทาง การแยกวิเคราะห์ใบเสร็จ และการประมวลผลเสียงในเครื่อง

ส่วนที่ 3: การให้เหตุผลแบบไฮบริดและบนคลาวด์ ดูวิธีใช้ตรรกะ AI ของ Firebase เพื่ออ้างอิงคำตอบของ LLM จากข้อมูลในโลกแห่งความเป็นจริง เช่น Google Maps และบริบทของเว็บ

ส่วนที่ 4: การผสานรวมระบบ การผสานรวมกับระบบอัจฉริยะของ Android โดยใช้ AppFunctions

ส่วนที่ 5 (เร็วๆ นี้): เวิร์กโฟลว์ของ Agent ในแอป ขยายแอปด้วยผู้ช่วยการจองแบบครบวงจรที่ขับเคลื่อนโดย A2UI และ ADK

หากสนใจดูข้อมูลเพิ่มเติมเกี่ยวกับการพัฒนาแอป Android ติดตาม Android Developers บน YouTube หรือ LinkedIn

ข้อมูลโค้ดทั้งหมดในบล็อกโพสต์นี้เป็นไปตามการแจ้งเตือนลิขสิทธิ์ต่อไปนี้

Copyright 2026 Google LLC.
SPDX-License-Identifier: Apache-2.0
เขียนโดย
อ่านต่อ