Crea agenti ADK per Android

La libreria Agent Development Kit (ADK) per Android ti consente di creare e integrare agenti AI sofisticati direttamente nelle tue app Android. ADK è un framework di sviluppo open source per la creazione di agenti basati sull'AI che vengono eseguiti localmente, su servizi ospitati e su dispositivi mobili Android. Il framework supporta i linguaggi di programmazione Kotlin e Java, consentendoti di iniziare rapidamente a creare agenti e di fare lo scale up fino ad applicazioni multi-agente complesse.

La libreria ADK per Android fornisce dipendenze specializzate e supporto di runtime personalizzati per gli ambienti mobile. Puoi creare agenti che eseguono modelli di AI sul dispositivo utilizzando Gemini Nano tramite le API GenAI di ML Kit, consentendoti di creare esperienze di AI a bassa latenza e incentrate sulla privacy che possono funzionare senza accesso alla rete.

Utilizzare ADK Kotlin nei progetti Android

Puoi utilizzare l'API dell'agente ADK Kotlin per creare agenti AI che vengono eseguiti all'interno delle app Android. Il codice dell'agente che scrivi è identico alla guida introduttiva di ADK Kotlin Get started. Le differenze sono la dipendenza Gradle, la configurazione del progetto e il modo in cui richiami l'agente in fase di runtime.

Prerequisiti

La libreria ADK per Android presenta i seguenti requisiti di sviluppo:

  • Android Studio
  • SDK Android (compileSdk 34 o versioni successive, minSdk 24 o versioni successive)

Configurare il progetto Android

In build.gradle.kts del progetto Android, aggiungi la dipendenza ADK Android e il processore di annotazione KSP:

plugins {
    id("com.android.application")
    kotlin("android")
    id("com.google.devtools.ksp") version "2.1.20-2.0.1"
}

android {
    namespace = "com.example.agent"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.agent"
        minSdk = 24
        targetSdk = 34
    }
}

dependencies {
    implementation("com.google.adk:google-adk-kotlin-core-android:0.1.0")
    ksp("com.google.adk:google-adk-kotlin-processor:0.1.0")
}

kotlin {
    jvmToolchain(17)
}

Definire l'agente

Il codice dell'agente è identico alla guida rapida di ADK Kotlin. L'esempio di codice HelloTimeAgent con la sintassi @Tool, @Param e .generatedTools() funziona senza modifiche su Android:

package com.example.agent
import com.google.adk.kt.agents.Instruction
import com.google.adk.kt.agents.LlmAgent
import com.google.adk.kt.annotations.Param
import com.google.adk.kt.annotations.Tool
import com.google.adk.kt.models.Gemini
class TimeService {
    /** Mock tool implementation */
    @Tool
    fun getCurrentTime(
        @Param("Name of the city to get the time for") city: String
    ): Map<String, String> {
        return mapOf("city" to city, "time" to "The time is 10:30am.")
    }
}
object HelloTimeAgent {
    @JvmField
    val rootAgent = LlmAgent(
        name = "hello_time_agent",
        description = "Tells the current time in a specified city.",
        model = Gemini(
            name = "gemini-flash-latest",
            apiKey = System.getenv("GOOGLE_API_KEY")
                ?: error("GOOGLE_API_KEY environment variable not set."),
        ),
        instruction = Instruction(
            "You are a helpful assistant that tells the current time in a city. "
                + "Use the 'getCurrentTime' tool for this purpose."
        ),
        tools = TimeService().generatedTools(),
    )
}

Eseguire l'agente dall'app per Android

Sui dispositivi con Android, utilizza InMemoryRunner per richiamare l'agente e raccogliere le risposte da una coroutine, come mostrato nel seguente esempio di codice:

import com.google.adk.kt.runners.InMemoryRunner
import com.google.adk.kt.sessions.InMemorySessionService
import com.google.adk.kt.types.Content
import com.google.adk.kt.types.Part
import com.google.adk.kt.types.Role
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
// Create a runner and session service
val sessionService = InMemorySessionService()
val runner = InMemoryRunner(
    agent = HelloTimeAgent.rootAgent,
    sessionService = sessionService,
)
// Call the agent from a coroutine (e.g. in a ViewModel or Activity)
scope.launch {
    runner.runAsync(
        userId = "user-123",
        sessionId = "session-123",
        newMessage = Content(
            role = Role.USER,
            parts = listOf(Part(text = "What time is it in New York?")),
        ),
    ).collect { event ->
        val text = event.content?.parts?.firstOrNull()?.text
        if (!text.isNullOrBlank()) {
            // Update your UI with the agent's response
        }
    }
}

Modelli on-device con Gemini Nano

L'artefatto ADK per Android include il supporto per l'inferenza on-device utilizzando Gemini Nano tramite l'API GenAI di ML Kit. Questo approccio consente agli agenti di essere eseguiti senza accesso alla rete, mantenendo i dati sul dispositivo.

Per utilizzare un modello on-device, crea un modello GenaiPrompt anziché Gemini, come mostrato nel seguente esempio di codice:

import com.google.adk.kt.models.mlkit.GenaiPrompt
import com.google.mlkit.genai.prompt.GenerativeModel
// Create an ML Kit GenerativeModel for on-device inference
val generativeModel: GenerativeModel = // ... initialize using ML Kit
val onDeviceModel = GenaiPrompt.create(
    generativeModel = generativeModel,
    name = "gemini-nano",
)
val agent = LlmAgent(
    name = "on_device_agent",
    model = onDeviceModel,
    instruction = Instruction("You are a helpful assistant."),
)

Puoi anche combinare modelli cloud e on-device in un sistema multi-agente: utilizza un modello Gemini basato sul cloud per l'orchestratore principale e modelli GenaiPrompt on-device per i sotto-agenti che gestiscono attività sensibili alla privacy.

Per un'attività funzionante completa e altri esempi, consulta gli esempi di ADK Kotlin su GitHub.