Comienza a usar los flujos de trabajo de agentes

En esta página, se describe cómo configurar tu proyecto de Android, configurar la biblioteca de genai-agent y crear tu primer agente integrado en el dispositivo.

Requisitos previos

Antes de compilar flujos de trabajo de agentes con Gemini Nano, asegúrate de que tu entorno cumpla con los siguientes requisitos:

Configura tu proyecto

Agrega la dependencia genai-agent al archivo build.gradle.kts de tu 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")
}

Crea tu primer agente

Un agente tiene dos componentes principales:

  • Definición del agente: Instrucciones y protecciones que configuran el comportamiento del agente.
  • Ejecutor de agentes: Es el motor de ejecución que se comunica con AICore y administra las conversaciones.

1. Configura el agente y el ejecutor

En la siguiente muestra de código, se indica cómo definir tu agente con instrucciones del sistema y, luego, inicializar la clase 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. Ejecuta una conversación

Las conversaciones de varios turnos conservan el historial de diálogo entre turnos con una instancia de AgentSession. Une el texto de tu instrucción en un objeto Content y recopila la respuesta transmitida:

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 las consultas únicas en las que no necesitas conservar el historial de conversaciones, puedes llamar al método runner.runSingleTurnAsync(prompt) directamente:

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

3. Limpia los recursos

La clase AgentRunner implementa la interfaz AutoCloseable. Cuando se destruya tu componente ViewModel o Activity, cierra el ejecutor para liberar las sesiones activas y cancelar las corrutinas en segundo plano:

runner.close()

Próximos pasos