기본 Android 앱을 맞춤설정, 지능형, 에이전트 환경으로 변환하는 '지능형 Android 앱 빌드' 블로그 시리즈에 다시 오신 것을 환영합니다. 이전 게시물에서 이 시리즈 전체에서 사용할 데모 앱인 Jetpacker를 소개했습니다.
이 블로그 게시물에서는 ML Kit의 프롬프트 API를 통해 Gemini Nano를 사용하여 지능형 온디바이스 기능을 빌드하는 방법을 공유합니다.
지능형 기기 내 기능 빌드는 데이터를 서버로 보내지 않고 기기에서 직접 프롬프트와 데이터를 처리하는 기능을 의미합니다. 이렇게 하면 다음과 같은 몇 가지 이점이 있습니다.
- 사용자 개인 정보를 보호하면서 기기에서 로컬로 사용자 데이터를 처리할 수 있습니다.
- 인터넷 연결이 불안정하거나 연결되지 않은 경우에도 모델의 기능이 안정적입니다.
- 모든 것이 사용자의 하드웨어에서 실행되므로 추가 클라우드 추론 비용이 없습니다.
기기 내의 이점을 고려하여 사용자 환경을 개선할 수 있는 세 가지 기능을 Jetpacker에 추가했습니다. 여행 일정 요약, 비용 관리, 음성 메모 캡처입니다.
짧은 텍스트의 맞춤형 고품질 요약
여행 일정 화면에서는 특정 여행의 모든 활동을 간략하게 확인할 수 있습니다. 이 화면에는 많은 정보가 포함되어 있으므로 빠르게 압도될 수 있습니다. 사용자가 부담감을 느끼지 않고 준비할 수 있도록 상단에 '여행 준비' 섹션을 추가할 수 있습니다.
여행 일정을 입력하고 LLM에 요약을 요청하면 짐 싸기 팁과 유용한 현지 문구와 함께 여행을 빠르게 요약할 수 있습니다. 이는 다음과 같은 여러 이유로 온디바이스 모델에 적합한 사용 사례입니다.
- 성능 및 품질: 입력 및 출력 텍스트가 모두 비교적 짧습니다. 이를 통해 온디바이스 솔루션의 성능과 품질이 더 강력한 클라우드 모델과 비슷해질 것으로 예상됩니다.
- 확장성: 기기 내 추론으로 전환하면 증가하는 클라우드 추론 비용을 관리하지 않고도 이 기능을 소수의 사용자에서 수백만 명의 사용자로 확장할 수 있습니다.
- 짧은 지연 시간과 안정성: 기기 내 추론은 짧은 지연 시간을 보장하여 사용자가 오프라인일 때도 안정적인 환경을 제공합니다.
온디바이스로 빌드하기 위해 Google은 모바일 기기에 최적화된 가장 효율적인 모델인 Gemini Nano를 사용합니다. Gemini Nano는 몇 년 전에 처음 도입되었으며 현재 1억 4천만 대 이상의 기기에서 실행되고 있습니다. 최신 버전의 모델인 Gemini Nano 4는 최근 출시된 Gemma 4 모델의 아키텍처를 기반으로 빌드되었으며, 배터리 및 성능 효율성을 극대화하기 위해 추가로 최적화되었습니다.
ML Kit의 프롬프트 API를 사용하면 Gemini Nano 4의 새로운 모델 기능을 활용하여 온디바이스 기능을 프로토타입으로 제작할 수 있습니다. 여행 일정이 포함된 프롬프트를 만들어 모델에 준비 팁과 함께 요약을 생성해 달라고 요청합니다.
최적의 프롬프트를 찾으려면 일반적으로 몇 번의 반복이 필요하며 AICore 앱은 이 단계에 적합합니다. AICore 개발자 프리뷰 옵션을 선택한 후 Gemini Nano 4와 같은 프리뷰 모델을 다운로드하여 프롬프트를 테스트하고 모델의 예상 출력을 확인할 수 있습니다. 프롬프트를 몇 번 반복한 결과 대답 속도를 13초에서 2초 미만으로 개선할 수 있었습니다. 여기에서 최종 코드 구현과 프롬프트를 확인하세요.
[ASSET HERE - FILE TOO LARGE ATM]
민감한 사용자 입력의 로컬 처리
다음으로 사용자가 여행을 더욱 즐길 수 있도록 영수증을 분류하고 예산을 계산하는 수동 작업을 없애는 간단한 비용 관리자를 빌드합니다.
영수증에는 신용카드 번호, 주소와 같은 민감한 정보가 포함될 수 있으므로 온디바이스 솔루션의 또 다른 좋은 사용 사례입니다. 기기 내 기능을 사용하면 데이터가 클라우드로 전송되지 않고 비공개 정보가 기기에서 로컬로 처리되므로 안심할 수 있습니다.
또한 Gemini Nano 4는 멀티모달리티, 특히 OCR 및 시각적 데이터 추출과 같은 이미지 이해 작업을 위한 모델 기능을 개선하여 영수증에서 정보를 추출하는 것과 같은 작업에 적합한 솔루션입니다.
이 사용 사례에서는 프롬프트가 영수증 이미지를 분석하고 생성된 제목, 지출 금액, 비용 카테고리와 같은 정보를 출력합니다. 모델이 원하는 형식으로 정보를 출력하도록 하려면 ML Kit의 구조화된 출력 API를 사용하여 정의한 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멀티모달 입력하기
마지막으로 사용자가 여행 중에 오디오 메모를 녹음할 수 있도록 완전한 온디바이스 음성 메모 기능을 빌드해 보겠습니다. ML Kit의 음성 인식 API를 사용하여 사용자가 텍스트로 자동 변환되는 짧은 음성 메모를 녹음할 수 있도록 합니다. 전사된 텍스트를 사용하여 ML Kit의 프롬프트 API로 녹음된 음성 메모와 연결된 여행 활동을 식별하므로 사용자가 여행 일정을 스크롤하면서 여행을 쉽게 요약할 수 있습니다.
ML Kit GenAI 음성 인식 API를 사용하면 두 가지 고유한 모드를 사용하여 오디오 콘텐츠를 기기에서 완전히 텍스트로 변환할 수 있습니다. 기본 모드는 기존의 기기 내 음성 인식 모델을 사용하며 API 수준 31 이상의 대부분의 Android 기기에서 사용할 수 있습니다. 고급 모드는 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)
}결론
ML Kit의 생성형 AI API를 사용하여 Gemini Nano를 활용하여 JetPacker 앱을 위한 완전한 온디바이스 지능형 기능을 개발하고 추가 클라우드 비용 없이 개선된 사용자 환경을 제공할 수 있었습니다.
GitHub에서 Jetpacker의 전체 소스 코드를 확인하고 Google AI로 지능형 Android 앱 빌드 동영상을 시청하여 온디바이스 모델, 클라우드 기반 추론, 최신 에이전트 프레임워크를 사용하여 지능형 기능을 앱에 직접 통합하는 방법을 자세히 알아보세요.
자세히 알아보기
이 블로그 게시물 시리즈의 다른 부분을 확인하세요.
파트 1: 앱 소개 및 대략적인 개요
파트 2 (이 게시물): 온디바이스 인텔리전스 ML Kit의 GenAI API와 Gemini Nano를 자세히 살펴보고 여행 일정 요약, 영수증 파싱, 로컬 오디오 처리와 같은 개인 정보 보호 우선 기능을 빌드하세요.
3부: 하이브리드 및 클라우드 추론 Firebase AI Logic을 사용하여 LLM 대답을 Google 지도 및 웹 컨텍스트와 같은 실제 데이터에 그라운딩하는 방법을 알아봅니다.
파트 4: 시스템 통합 AppFunctions를 사용하여 Android 인텔리전스 시스템과 통합
파트 5 (출시 예정): 인앱 에이전트 워크플로 A2UI 및 ADK로 구동되는 엔드 투 엔드 예약 어시스턴트로 앱을 확장합니다.
Android 개발에 대해 자세히 알아보고 싶으신가요? YouTube 또는 LinkedIn에서 Android Developers를 팔로우하세요.
이 블로그 게시물의 모든 코드 스니펫에는 다음 저작권 고지가 적용됩니다.
Copyright 2026 Google LLC. SPDX-License-Identifier: Apache-2.0
-
방법기본 Android 앱을 맞춤형의 지능적인 에이전트 환경으로 변환하는 블로그 게시물 시리즈 '지능형 Android 앱 빌드'에 다시 오신 것을 환영합니다.
Thomas Ezan, Jolanda Verhoef, Caren Chang • 전문 길이: 8분 -
방법Jetpacker는 올해 Google I/O를 위해 Google 팀이 처음부터 구축한 기술 쇼케이스 앱입니다 (Antigravity를 사용하여 빌드됨). Jetpacker는 사용자가 다음 모험을 계획하고, 탐색하고, 즐길 수 있도록 지원합니다.
Jolanda Verhoef • 4분 읽음 -
방법기본 Android 앱을 맞춤형의 지능적인 에이전트 환경으로 변환하는 블로그 게시물 시리즈 '지능형 Android 앱 빌드'에 다시 오신 것을 환영합니다. 이전 게시물에서는 Firebase AI Logic을 활용하여 클라우드 호스팅 및 하이브리드 AI 기능을 빌드하는 방법을 살펴봤습니다.
Android 개발 관련 최신 정보를 이메일로 받아 보세요.