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 per Android. ADK è un framework per sviluppatori 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 a creare rapidamente agenti e di fare lo scale up fino ad applicazioni multi-agente complesse.

La libreria ADK per Android fornisce dipendenze e supporto di runtime specializzati su misura per gli ambienti mobile. Puoi creare agenti che eseguono modelli di AI sul dispositivo utilizzando Gemini Nano con le API ML Kit GenAI, il che ti consente 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 ADK Kotlin agent per creare agenti AI che vengono eseguiti all'interno delle app per Android. Il codice dell'agente che scrivi è identico alla guida Inizia di ADK Kotlin. Le differenze riguardano 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

Nel file build.gradle.kts del tuo progetto Android, aggiungi la dipendenza ADK Android e il processore di annotazioni 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)
}

Definisci l'agente

Il codice dell'agente è identico alla guida rapida di Kotlin di ADK. 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 basati su 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 ML Kit GenAI. 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 basati sul cloud e sul dispositivo in un sistema multi-agente: utilizza un Gemini basato sul cloud per l'orchestratore principale e modelli GenaiPrompt sul dispositivo per i sub-agenti che gestiscono attività sensibili alla privacy. Per saperne di più su questo pattern, consulta il post del blog sull'ADK per Kotlin e Android.

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