ADK-Agenten für Android erstellen

Mit der Agent Development Kit-Bibliothek (ADK) für Android können Sie komplexe KI-Agenten erstellen und direkt in Ihre Android-Apps einbinden. Das ADK ist ein Open-Source-Entwickler-Framework zum Erstellen von KI-gestützten Agenten, die lokal, auf gehosteten Diensten und auf Android-Mobilgeräten ausgeführt werden. Das Framework unterstützt die Programmiersprachen Kotlin und Java, sodass Sie schnell mit der Entwicklung von Agenten beginnen und komplexe Multi-Agenten-Anwendungen erstellen können.

Die ADK for Android-Bibliothek bietet spezielle Abhängigkeiten und Laufzeitunterstützung, die auf mobile Umgebungen zugeschnitten sind. Mit den ML Kit GenAI APIs können Sie Agents erstellen, die KI-Modelle mit Gemini Nano auf dem Gerät ausführen. So können Sie datenschutzorientierte KI-Funktionen mit geringer Latenz entwickeln, die ohne Netzwerkzugriff funktionieren.

ADK Kotlin in Android-Projekten verwenden

Mit der ADK Kotlin Agent API können Sie KI-Agents erstellen, die in Android-Apps ausgeführt werden. Der von Ihnen geschriebene Agentencode ist identisch mit dem Leitfaden für die ersten Schritte für das ADK Kotlin. Die Unterschiede liegen in der Gradle-Abhängigkeit, der Projektkonfiguration und der Art und Weise, wie Sie den Agenten zur Laufzeit aufrufen.

Vorbereitung

Für die ADK for Android-Bibliothek gelten die folgenden Entwicklungsanforderungen:

  • Android Studio
  • Android SDK (compileSdk 34 oder höher, minSdk 24 oder höher)

Android-Projekt konfigurieren

Fügen Sie in der build.gradle.kts Ihres Android-Projekts die ADK-Android-Abhängigkeit und den KSP-Annotation Processor hinzu:

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

KI-Agenten definieren

Der Agentencode ist mit dem ADK-Kotlin-Schnellstart identisch. Das HelloTimeAgent-Codebeispiel mit der Syntax @Tool, @Param und .generatedTools() funktioniert ohne Änderungen auf 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(),
    )
}

Agent über Ihre Android-App ausführen

Auf Android-Geräten verwenden Sie InMemoryRunner, um den Agent aufzurufen und Antworten aus einer Coroutine zu erfassen, wie im folgenden Codebeispiel gezeigt:

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

Agenten zum Generieren der Benutzeroberfläche verwenden

Wenn Ihr Agent strukturierte, interaktive Benutzeroberflächen wie Karten, Formulare oder Listen anstelle von Nur-Text zurückgeben muss, verwenden Sie das Agent-to-UI-Protokoll (A2UI).

Mit dem Jetpack Compose A2UI Renderer können Sie A2UI-Antworten automatisch als native Jetpack Compose- und Material 3-Komponenten in der UI-Hierarchie Ihrer App rendern. Leitfaden für A2UI mit Jetpack Compose

On-Device-Modelle mit Gemini Nano

Das ADK for Android-Artefakt unterstützt die On-Device-Inferenz mit Gemini Nano über die ML Kit GenAI API. Bei diesem Ansatz können KI-Agenten ohne Netzwerkzugriff ausgeführt werden, sodass die Daten auf dem Gerät bleiben.

Wenn Sie ein On-Device-Modell verwenden möchten, erstellen Sie ein GenaiPrompt-Modell anstelle von Gemini, wie im folgenden Codebeispiel gezeigt:

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."),
)

Sie können auch Cloud- und On-Device-Modelle in einem Multi-Agenten-System kombinieren: Verwenden Sie ein cloudbasiertes Gemini für den Root-Orchestrator und On-Device-GenaiPrompt-Modelle für untergeordnete Agents, die datenschutzrelevante Aufgaben übernehmen. Weitere Informationen zu diesem Muster finden Sie im Blogpost zum ADK für Kotlin und Android.

Eine vollständige funktionierende Activity und weitere Beispiele finden Sie in den ADK-Kotlin-Beispielen auf GitHub.