Создание агентов ADK для Android

Библиотека Agent Development Kit (ADK) для Android позволяет создавать и интегрировать сложные агенты искусственного интеллекта непосредственно в ваши приложения Android. ADK — это фреймворк с открытым исходным кодом для разработчиков, предназначенный для создания агентов на основе ИИ, работающих локально, на размещенных сервисах и на мобильных устройствах Android. Фреймворк поддерживает языки программирования Kotlin и Java, что позволяет быстро начать создавать агентов и масштабировать их до сложных многоагентных приложений.

Библиотека ADK для Android предоставляет специализированные зависимости и поддержку среды выполнения, адаптированные для мобильных устройств. Вы можете создавать агентов, которые выполняют модели ИИ на устройстве, используя Gemini Nano и API ML Kit GenAI, что позволяет создавать ориентированные на конфиденциальность и низкозадержечные решения ИИ, способные функционировать без доступа к сети.

Используйте ADK Kotlin в проектах Android.

Вы можете использовать API агентов ADK Kotlin для создания агентов искусственного интеллекта, работающих внутри приложений Android. Код агента, который вы пишете, идентичен руководству по началу работы с ADK Kotlin. Различия заключаются в зависимости Gradle, конфигурации проекта и способе вызова агента во время выполнения.

Предварительные требования

Библиотека ADK для Android предъявляет следующие требования к разработке:

  • Android Studio
  • Android SDK (compileSdk 34 или выше, minSdk 24 или выше)

Настройте свой Android-проект

В build.gradle.kts вашего Android-проекта добавьте зависимость ADK Android и обработчик аннотаций 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)
}

Определите своего агента.

Код агента идентичен коду из руководства по быстрому запуску Kotlin в ADK. Пример кода HelloTimeAgent с синтаксисом @Tool , @Param и .generatedTools() работает без изменений на 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(),
    )
}

Запустите агент из вашего Android-приложения.

На устройствах под управлением Android используйте InMemoryRunner для вызова агента и сбора ответов от сопрограммы, как показано в следующем примере кода:

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

Встроенные в устройство модели с Gemini Nano

В состав ADK для Android входит поддержка выполнения вычислений на устройстве с использованием Gemini Nano через API ML Kit GenAI. Такой подход позволяет агентам работать без доступа к сети, сохраняя данные на устройстве.

Для использования модели, встроенной в устройство, создайте модель GenaiPrompt вместо Gemini , как показано в следующем примере кода:

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

В многоагентной системе также можно комбинировать облачные и встроенные модели: использовать облачную модель Gemini в качестве корневого оркестратора и встроенные модели GenaiPrompt для субагентов, обрабатывающих задачи, требующие защиты конфиденциальной информации.

Полную версию Activity и другие примеры можно найти в примерах ADK Kotlin на GitHub .