Pierwsze kroki z przepływami pracy opartymi na agentach

Na tej stronie dowiesz się, jak skonfigurować projekt aplikacji na Androida, skonfigurować bibliotekę genai-agent i utworzyć pierwszego agenta na urządzeniu.

Wymagania wstępne

Zanim utworzysz przepływy pracy oparte na agentach za pomocą Gemini Nano, upewnij się, że Twoje środowisko spełnia te wymagania:

Skonfiguruj projekt

Dodaj zależność genai-agent do pliku build.gradle.kts modułu:

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")
}

Tworzenie pierwszego agenta

Agent składa się z 2 głównych komponentów:

  • Definicja agenta: instrukcje i ograniczenia konfigurujące zachowanie agenta.
  • Agent runner: silnik wykonawczy, który komunikuje się z AICore i zarządza rozmowami.

1. Konfigurowanie agenta i modułu uruchamiającego

Poniższy przykładowy kod pokazuje, jak zdefiniować agenta za pomocą instrukcji systemowych i zainicjować klasę 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. Prowadzenie rozmowy

Rozmowy wieloetapowe zachowują historię dialogu między etapami za pomocą instancji AgentSession. Umieść tekst prompta w obiekcie Content i zbierz odpowiedź przesyłaną strumieniowo:

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)
        }
}

W przypadku jednorazowych zapytań, gdy nie musisz zachowywać historii rozmów, możesz bezpośrednio wywołać metodę runner.runSingleTurnAsync(prompt):

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

3. Czyszczenie zasobów

Klasa AgentRunner implementuje interfejs AutoCloseable. Gdy komponent ViewModel lub Activity zostanie zniszczony, zamknij runnera, aby zwolnić aktywne sesje i anulować współprogramy działające w tle:

runner.close()

Dalsze kroki

  • Dodawanie funkcji za pomocą narzędzi: daj agentowi możliwość podejmowania działań lub wysyłania zapytań o dane aplikacji za pomocą funkcji aplikacji na Androida. Więcej informacji znajdziesz w sekcji Definiowanie narzędzi.
  • Zachowywanie sesji podczas rotacji: dowiedz się, jak zachować instancję AgentSession w klasie ViewModel podczas zmian konfiguracji w sekcji Zarządzanie sesjami i cyklem życia.
  • Połączenie z Compose: przesyłanie strumieniowe zdarzeń i renderowanie interaktywnych dymków czatu w sekcji Przesyłanie strumieniowe zdarzeń i integracja interfejsu.