Inizia a utilizzare gli agentic workflow

Questa pagina descrive come configurare il tuo progetto Android, configurare la libreria genai-agent e creare il tuo primo agente on-device.

Prerequisiti

Prima di creare agentic workflow con Gemini Nano, assicurati che il tuo ambiente soddisfi i seguenti requisiti:

Configura il tuo progetto

Aggiungi la dipendenza genai-agent al file build.gradle.kts del tuo modulo:

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 il tuo primo agente

Un agente ha due componenti principali:

  • Definizione dell'agente: istruzioni e guardrail che configurano il comportamento dell'agente.
  • Agent runner: il motore di esecuzione che comunica con AICore e gestisce le conversazioni.

1. Configura l'agente e il runner

Il seguente esempio di codice mostra come definire l'agente con le istruzioni di sistema e inizializzare la 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. Avvia una conversazione

Le conversazioni multi-turno conservano la cronologia dei dialoghi tra i turni utilizzando un'istanza AgentSession. Racchiudi il testo del prompt in un oggetto Content e raccogli la risposta in 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)
        }
}

Per query una tantum in cui non è necessario conservare la cronologia delle conversazioni, puoi chiamare direttamente il metodo runner.runSingleTurnAsync(prompt):

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

3. Esegui la pulizia delle risorse

La classe AgentRunner implementa l'interfaccia AutoCloseable. Quando il componente ViewModel o Activity viene eliminato, chiudi l'esecutore per rilasciare le sessioni attive e annullare le coroutine in background:

runner.close()

Passaggi successivi