Por que ADK para Kotlin e Android é Importante?

O ecossistema de IA está migrando para a borda. Com o Gemini Nano disponível em mais de 140 milhões de dispositivos Android, você pode rodar LLMs diretamente no hardware do celular — mais privacidade, menos latência e custos reduzidos. Mas construir sistemas agentes que funcionam entre nuvem e dispositivo é complexo.

O ADK resolve isso. Ele gerencia orquestração, contexto e tratamento de erros para você focar na lógica do app. A versão 0.1.0 para Kotlin e Android é o primeiro passo para um framework unificado de agentes mobile.

Fonte: Google Developers Blog - ADK Kotlin & Android

O que Você Vai Construir

Um assistente de viagens que:

  • Usa um orquestrador na nuvem (Gemini API) para entender perguntas do usuário.
  • Delega tarefas sensíveis (ex: verificar reserva) para um subagente no dispositivo rodando Gemini Nano.
  • Mantém dados privados offline enquanto usa o raciocínio da nuvem.

Pré-requisitos

  • Android Studio Hedgehog ou superior
  • Kotlin 1.9+
  • Uma chave de API para Gemini (modelos cloud)
  • Dispositivo ou emulador com Android 14+ (para suporte ao Gemini Nano)

Passo 1: Adicione as Dependências do ADK

No seu build.gradle.kts:

// ADK para Android (inclui modelos no dispositivo)
implementation("com.google.adk:google-adk-kotlin-core-android:0.1.0")

// Para projetos backend apenas cloud
// implementation("com.google.adk:google-adk-kotlin-core:0.1.0")
// ksp("com.google.adk:google-adk-kotlin-processor:0.1.0")

Sincronize o projeto. Pronto para construir agentes!

Passo 2: Crie o Agente Orquestrador na Nuvem

Este agente será o ponto de entrada principal. Ele usa um modelo cloud (Gemini 2.5 Flash) e tem acesso a ferramentas e subagentes.

val orchestrator = LlmAgent(
    name = "genius_orchestrator",
    model = Gemini(apiKey = apiKey, name = "gemini-2.5-flash"),
    instruction = Instruction("""
        Você é um assistente de viagens genial.
        Primeiro, use `get_trip_details` para obter o itinerário completo da viagem e
        entender quais eventos estão agendados.
        Depois, responda com uma mensagem de boas-vindas personalizada.
    """.trimIndent()),
    tools = listOf(GetTripDetailsTool(tripId)),
    subAgents = listOf(carRentalPipeline, hotelPipeline),
    disallowTransferToPeers = true,
    disallowTransferToParent = true
)

Explicação:

  • model: Conecta a um modelo Gemini na nuvem.
  • tools: Funções personalizadas que o agente pode chamar.
  • subAgents: Delega tarefas especializadas (aluguel de carro, hotel) para outros agentes.

Passo 3: Construa um Subagente no Dispositivo com Gemini Nano

Agora, crie um subagente que roda completamente no dispositivo usando Gemini Nano. Ideal para dados sensíveis (ex: confirmações de reserva armazenadas localmente).

val bookingVerifierAgent = LlmAgent(
    name = "BookingVerifier",
    description = "Verifica confirmações de reserva usando Gemini Nano no dispositivo.",
    model = GeminiNano(),  // Roda localmente — sem chamada de rede
    instruction = Instruction("""
        Você é um verificador de reservas no dispositivo.
        Dado um ID de reserva, extraia os detalhes da confirmação dos documentos locais do usuário.
        Retorne apenas o número de confirmação e o status.
    """.trimIndent()),
    tools = listOf(ExtractBookingTool())
)

Pontos-chave:

  • GeminiNano() é o modelo no dispositivo — nenhum dado sai do celular.
  • Esse agente é adicionado como subagente do orquestrador (subAgents = listOf(bookingVerifierAgent)).
  • O orquestrador pode delegar tarefas para ele quando a privacidade é crítica.

Passo 4: Defina Ferramentas com Anotações

O ADK usa anotações @Tool e @Param para descrever funções ao LLM. Exemplo inspirado no Guia do Mochileiro das Galáxias:

class ImprobabilityDriveService {
    /** Calcula a improbabilidade de um evento. */
    @Tool
    fun calculateImprobability(
        @Param("O evento para calcular a improbabilidade, ex: 'Uma xícara de chá se materializando'")
        event: String
    ): String {
        return "A improbabilidade de '$event' é aproximadamente 42 para 1 contra."
    }
}

Depois, gere as ferramentas para um agente:

val heartOfGoldAgent = LlmAgent(
    name = "HeartOfGold",
    description = "Lida com consultas sobre o Motor de Improbabilidade Infinita.",
    model = Gemini(apiKey = apiKey, name = "gemini-2.5-flash"),
    instruction = Instruction("""
        Você é o computador de bordo da Heart of Gold. Alegre, prestativo e levemente irritante.
        Use fatos reais sobre si mesmo se perguntado, mas mantenha o humor.
    """.trimIndent()),
    tools = ImprobabilityDriveService().generatedTools()
)

Passo 5: Orquestre Agentes Cloud + Dispositivo

Combine tudo em um agente raiz que roteia perguntas para o subagente certo:

val rootAgent = LlmAgent(
    name = "MissionControl",
    description = "Central de roteamento para consultas espaciais. Roteia para HeartOfGold.",
    subAgents = listOf(heartOfGoldAgent),
    model = Gemini(apiKey = apiKey, name = "gemini-2.5-flash"),
    instruction = Instruction("""
        Você é o Controle da Missão. O hub central de comunicações.
        - Se a consulta for sobre improbabilidade, Motor de Improbabilidade Infinita ou Heart of Gold, transfira para `HeartOfGold`.
        - Caso contrário, responda diretamente com uma personalidade profissional mas estressada.
    """.trimIndent())
)

Como funciona:

  • Usuário pergunta: "Qual a improbabilidade de uma xícara de chá se materializar?"
  • rootAgent reconhece o tópico → transfere para HeartOfGoldAgent.
  • HeartOfGoldAgent chama ImprobabilityDriveService.calculateImprobability() → retorna resultado.

Limitações e Cuidados

  • Experimental: ADK 0.1.0 é uma versão inicial. APIs podem mudar.
  • Modelo no dispositivo limitado: Gemini Nano é otimizado para tarefas específicas (sumarização, extração). Raciocínio complexo ainda exige modelos cloud.
  • Compatibilidade: Gemini Nano requer Android 14+ e hardware específico (Pixel 8, Samsung S24, etc.).

Próximos Passos

Conclusão

O ADK para Kotlin e Android abre as portas para agentes de IA que preservam a privacidade, rodam no dispositivo e colaboram perfeitamente com modelos na nuvem. Comece pequeno, experimente as anotações de ferramentas e construa hierarquias de agentes cada vez mais complexas. O futuro da IA em apps é agêntico — e roda em Kotlin.

Developer coding AI agent on Android phone with Kotlin and ADK library

Diagram showing cloud orchestrator delegating task to on-device Gemini Nano agent Development Concept Image

Android app interface with integrated AI trip assistant using ADK for Android Programming Illustration

Este conteúdo foi elaborado com o auxílio de ferramentas de IA, com base em fontes confiáveis, e revisado pela nossa equipe editorial antes da publicação. Não substitui o aconselhamento de um profissional especializado.