Android

Blog do Desenvolvedor Android: Construa aplicativos Android inteligentes: Inferência no dispositivo

O blog post da Android Developers apresenta como usar o Gemini Nano através do ML Kit’s Prompt API para criar recursos inteligentes e offline em aplicativos Android, como resumir itinerários de viagem, gerenciar despesas e capturar notas de voz. Esses recursos garantem a privacidade dos dados locais, confiabilidade mesmo sem conexão com a internet e economia de custos de nuvem, além de oferecer baixa latência.

Compartilhar
Android Developers Blog: Build intelligent Android apps: On-device inference

Bem-vindo de volta à série de posts do blog "Construa aplicativos Android inteligentes", onde transformamos um aplicativo básico em uma experiência personalizada, inteligente e agêntica. No nosso post anterior introduzimos o Jetpacker, o aplicativo de demonstração que usaremos nesta série.

Neste post do blog, compartilharemos como você pode usar Gemini Nano através da API de Prompt do ML Kit para construir recursos inteligentes no dispositivo.

A construção de recursos inteligentes no dispositivo refere-se à capacidade de processar prompts e dados diretamente em um dispositivo sem enviar os dados a um servidor. Isso oferece alguns benefícios:

  • Dados do usuário podem ser processados localmente no dispositivo, preservando a privacidade do usuário
  • A funcionalidade do modelo é confiável, mesmo com conexão de internet esporádica ou ausente
  • Nenhuma cobrança adicional por inferência em nuvem, pois tudo funciona no hardware do usuário

Com os benefícios de recursos no dispositivo em mente, identificamos três características para adicionar ao Jetpacker que podem melhorar a experiência do usuário: resumo de itinerários de viagem, gerenciamento de gastos e captação de notas de voz.

Recursos no dispositivo no Jetpacker: Resumos de itinerários de viagem, gerenciamento de despesas e notas de voz

Alta qualidade de resumo personalizado para textos curtos

A tela do itinerário fornece aos usuários uma visão rápida de todas as atividades para uma determinada viagem. Como esta tela contém muita informação, pode rapidamente se tornar sobrecarregante. Para ajudar os usuários a se prepararem sem sentir-se sobrecarregados, podemos adicionar uma seção 'Prepare-se para sua viagem' no topo.

A viagem romântica em Paris é resumida como uma aventura parisiense clássica que combina arte, pontos turísticos e comida deliciosa. Um conselho e algumas frases úteis também são adicionados.

Com a entrada de um itinerário de viagem e pedindo a um LLM para resumir, podemos gerar um resumo rápido da viagem junto com dicas de preparação e frases locais úteis. Isso é uma excelente caso de uso para um modelo no dispositivo por várias razões:

  • Desempenho e qualidade: Tanto o texto de entrada quanto a saída são relativamente curtos. Com isso, podemos esperar que o desempenho e a qualidade da solução em dispositivo sejam comparáveis às modelos mais poderosos na nuvem.
  • Escalabilidade: A mudança para inferência no dispositivo nos permite escalar essa funcionalidade de alguns usuários para milhões sem preocupações sobre gerenciar custos crescentes de inferência na nuvem.
  • Baixa latência e confiabilidade: A inferência em dispositivo garante baixa latência, proporcionando uma experiência confiável mesmo quando os usuários estão offline.

Para construir com no dispositivo, usamos Gemini Nano, o modelo mais eficiente da Google otimizado para dispositivos móveis. Gemini Nano foi introduzido há alguns anos e está agora em funcionamento em mais de 140 milhões de dispositivos. A versão mais recente do modelo, Gemini Nano 4, é construída sobre a arquitetura da Gemma 4 recém-lançada e está ainda mais otimizada para eficiência de bateria e desempenho.

Usando a API de Prompt do ML Kit, podemos tirar proveito das novas capacidades do Gemini Nano 4 para prototipar nossos recursos no dispositivo. Criaremos um prompt que inclui o itinerário de uma viagem e pediremos ao modelo para gerar um resumo junto com quaisquer dicas de preparação.

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

// Define the configuration for Gemini Nano 4 E2B preview model
val previewFastConfig = generationConfig {
    modelConfig = modelConfig {
        releaseStage = ModelReleaseStage.PREVIEW
        preference = ModelPreference.FAST
    }
}

val geminiNano2BPreviewModel = Generation.getClient(previewFastConfig)

val tripItinerary = ...

val getReadyForYourTripSummary = geminiNano2BPreviewModel
generateContent("Given this trip itinerary: $tripItinerary, 
generate the following: overall vibe, tips on how to prepare for this
trip, and common short phrases to learn for the trip.")

A descoberta da melhor prompt geralmente requer algumas iterações, e o aplicativo AICore é perfeito para essa etapa do processo. Após optar pelo modo de visualização do desenvolvedor para AICore, podemos baixar modelos de prévia como Gemini Nano 4 para testar prompts e ver as saídas esperadas do modelo. Com algumas iterações no prompt, conseguimos melhorar a velocidade da resposta de 13 segundos para menos de 2 segundos! Confira a implementação final do código e o prompt aqui.

A primeira iteração do nosso prompt gerou muitos tokens demais, e a otimização dele ajudou a manter as respostas rápidas e diretas.

Processamento local para entrada de usuário sensível

A seguir, para ajudar os usuários a aproveitar ainda mais suas viagens, construiremos um gerenciador simples de despesas que tira o trabalho manual da classificação de recibos e cálculo de orçamentos.

Tirando uma foto do recibo de um restaurante, os dados são analisados e exibidos na tela de resumo das despesas do aplicativo.

Como recibos podem conter informações confidenciais como números de cartão de crédito e endereços, é outro caso de uso excelente para uma solução local. Com a solução local, os usuários podem ter certeza de que as informações privadas serão processadas localmente no dispositivo sem nenhuma de suas informações ser enviada à nuvem.

Além disso, o Gemini Nano 4 melhorou as capacidades do modelo para multimodalidade, especialmente para tarefas de compreensão de imagens como OCR e extração visual de dados, tornando-o uma ótima solução para tarefas como a extração de informações de recibos.

Para este caso de uso, o prompt analisará uma imagem do recibo e emitirá informações como: um título gerado, valor gasto e categoria da despesa. Para garantir que o modelo gere as informações no formato preferido, podemos usar a API de Saída Estruturada do ML Kit para emitir um objeto Kotlin definido por nós de maneira suave.

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

@Generable("Informações extraídas de um recibo de despesas")
data class ParsedReceipt(
  @Guide("Título gerado para a despesa com menos de 6 palavras. Baseado no nome do restaurante ou atividade.")
  val title: String,
  @Guide("Valor total da despesa. Procure valores na parte inferior e palavras como total ou saldo devido.")
  val amount: Double,
  @Guide("Tipo de despesa", enumValues = ["viagem", "alimentação", "compras", "entretenimento", "outros"])
  val category: String,
)

val prompt = "Determine se a imagem é um recibo ou uma despesa. 
    Se NÃO for um recibo ou despesa, saída o texto 'NOT_A_RECEIPT'.
    Caso contrário, analise as informações do recibo.";

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

// Defina a configuração para o modelo Gemini Nano 4 E4B preview
// Ao selecionar modelos, você pode especificar quais características de desempenho são mais importantes
//  para seu caso de uso. Use ModelPreference.FULL quando desejar priorizar poder de raciocínio sobre velocidade.
//  Use ModelPreference.FAST quando complexidade lógica não é necessária e latência é uma prioridade.
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

Entrada multimodal

Agora, para ajudar os usuários a gravar memos de áudio durante as viagens, vamos construir uma funcionalidade completa de notas de voz totalmente no dispositivo. Usando API de Reconhecimento de Voz do ML Kit, permitiremos que os usuários gravem curtos áudios que são automaticamente transcritos para texto. Com o texto transcrito, usaremos a API de Prompt do ML Kit para identificar qual atividade da viagem está associada à nota de voz gravada, permitindo aos usuários recapitular facilmente sua viagem ao rolar pelo itinerário da viagem.

O itinerário da viagem romana mostra extratos de notas de voz.

A API de Reconhecimento de Voz do ML Kit GenAI permite transcrever conteúdo de áudio para texto totalmente no dispositivo usando dois modos distintos. O modo básico usa um modelo tradicional de reconhecimento de voz no dispositivo e está disponível em dispositivos Android com nível da API 31 ou superior. O modo avançado usa o Gemini Nano para oferecer uma cobertura linguística mais ampla e melhor qualidade, e é atualmente suportado nos dispositivos Pixel 10.

Para nossa funcionalidade, combinamos a API de Reconhecimento de Voz com a API de Prompt do ML Kit:

Conclusão

Usando as APIs GenAI do ML Kit, conseguimos aproveitar o Gemini Nano para desenvolver recursos inteligentes totalmente no dispositivo para o aplicativo JetPacker e fornecer uma experiência de usuário melhorada sem custos adicionais em nuvem.

Confira o código-fonte completo do Jetpacker no Github, e assista ao vídeo Construa aplicativos Android inteligentes com a IA da Google para saber mais sobre como integrar recursos inteligentes diretamente em seu aplicativo usando modelos de dispositivo, raciocínio alimentado por nuvem e os últimos frameworks agênticos.

Saiba Mais

Confira as outras partes desta série de posts do blog:

Parte 1:

Introdução ao aplicativo e uma visão geral geral.

Parte 2 (este post!):

No dispositivo inteligente. Profundidade no ML Kit’s GenAI APIs e Gemini Nano para construir recursos de privacidade-first como resumo do itinerário, análise de recibos e processamento local de áudio.

Parte 3:

Raciocínio híbrido e em nuvem. Explore como usar o Firebase AI Logic para fundamentar as respostas de LLM em dados do mundo real, como Google Maps e contexto da web.

Parte 4:

Integração com o sistema de inteligência do Android usando AppFunctions.

Parte 5 (em breve): Fluxos agênticos em aplicativos. Estenda o aplicativo com um assistente de reserva end-to-end alimentado por A2UI e ADK.

Interessado em mais sobre desenvolvimento Android? Siga os Desenvolvedores Android no YouTube ou LinkedIn!

Direitos autorais 2026 Google LLC.
SPDX-License-Identifier: Apache-2.0

Fonte original

Conteúdo traduzido e adaptado pela redação do Notícias Mobile. Confira também a matéria na fonte original.

Leia a matéria completa