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.
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?"
rootAgentreconhece o tópico → transfere paraHeartOfGoldAgent.HeartOfGoldAgentchamaImprobabilityDriveService.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
- Explore os demos do ADK para Android no GitHub.
- Veja como a Meta construiu uma plataforma unificada de agentes de IA: How Meta Built a Unified AI Agent Platform.
- Para inferência otimizada em GPU, confira: Maximizing GPU Utilization for LLM Inference.
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.


