Começar a usar Agentic Workflows

Nesta página, descrevemos como configurar seu projeto do Android, configurar a biblioteca genai-agent e criar seu primeiro agente no dispositivo.

Pré-requisitos

Antes de criar Agentic Workflows com o Gemini Nano, verifique se o ambiente atende aos seguintes requisitos:

Configurar seu projeto

Adicione a dependência genai-agent ao arquivo build.gradle.kts do módulo:

dependencies {
    // Gemini Nano agentic workflows
    implementation("com.google.mlkit:genai-agent:1.0.0-alpha1")

    // Optional: Only required when defining tools using Android AppFunctions
    implementation("androidx.appfunctions:appfunctions:1.0.0-alpha13")
    ksp("androidx.appfunctions:appfunctions-compiler:1.0.0-alpha13")
}

Criar seu primeiro agente

Um agente tem dois componentes principais:

  • Definição do agente: instruções e proteções que configuram o comportamento do agente.
  • Executor de agente: o mecanismo de execução que se comunica com o AICore e gerencia conversas.

1. Configurar o agente e o executor

O exemplo de código a seguir mostra como definir seu agente com instruções do sistema e inicializar a classe AgentRunner:

import com.google.mlkit.genai.agent.Agent
import com.google.mlkit.genai.agent.AgentRunner

// 1. Build the agent configuration
val agent = Agent.builder()
    .setName("Assistant")
    .setInstructions("You are a helpful on-device assistant.")
    .build()

// 2. Initialize the runner
val runner = AgentRunner(agent)

2. Iniciar uma conversa

As conversas multiturno mantêm o histórico de diálogo entre os turnos usando uma instância AgentSession. Coloque o texto do comando em um objeto Content e colete a resposta de streaming:

import android.util.Log
import androidx.lifecycle.lifecycleScope
import com.google.mlkit.genai.agent.textTokens
import com.google.mlkit.genai.prompt.Content
import kotlinx.coroutines.launch

// Create or retrieve a conversation session
val session = runner.getOrCreateSession("chat_session")

val prompt = Content.builder()
    .text("Hello! Can you help me organize my day?")
    .build()

// Collect streamed tokens in a coroutine
lifecycleScope.launch {
    session.runAsync(prompt)
        .textTokens()
        .collect { token ->
            Log.d("Agent", token)
        }
}

Para consultas únicas em que você não precisa reter o histórico de conversas, chame o método runner.runSingleTurnAsync(prompt) diretamente:

lifecycleScope.launch {
    runner.runSingleTurnAsync(prompt)
        .textTokens()
        .collect { token ->
            Log.d("Agent", token)
        }
}

3. Limpar recursos

A classe AgentRunner implementa a interface AutoCloseable. Quando o componente ViewModel ou Activity for destruído, feche o executor para liberar sessões ativas e cancelar corrotinas em segundo plano:

runner.close()

Próximas etapas