Android için ADK aracıları oluşturma

Android kitaplığı için Agent Development Kit (ADK), gelişmiş yapay zeka ajanlarını doğrudan Android uygulamalarınıza oluşturup entegre etmenize olanak tanır. ADK, yerel olarak, barındırılan hizmetlerde ve Android mobil cihazlarda çalışan yapay zeka destekli temsilciler oluşturmak için kullanılan açık kaynaklı bir geliştirici çerçevesidir. Kotlin ve Java programlama dillerini destekleyen bu çerçeve sayesinde, hızlı bir şekilde ajan oluşturmaya başlayabilir ve karmaşık, çok ajanlı uygulamalara ölçeği artırabilirsiniz.

Android için ADK kitaplığı, mobil ortamlara özel bağımlılıklar ve çalışma zamanı desteği sağlar. ML Kit GenAI API'lerini kullanarak Gemini Nano ile cihaz üzerinde yapay zeka modellerini çalıştıran aracıları oluşturabilirsiniz. Bu sayede, ağ erişimi olmadan çalışabilen, gizliliğe odaklı ve düşük gecikmeli yapay zeka deneyimleri oluşturabilirsiniz.

Android projelerinde ADK Kotlin'i kullanma

Android uygulamalarında çalışan yapay zeka temsilcileri oluşturmak için ADK Kotlin Agent API'yi kullanabilirsiniz. Yazdığınız aracı kodu, ADK Kotlin Başlangıç kılavuzuyla aynıdır. Farklılıklar; Gradle bağımlılığı, proje yapılandırması ve aracıyı çalışma zamanında çağırma şeklinizdir.

Ön koşullar

Android için ADK kitaplığının aşağıdaki geliştirme şartları vardır:

  • Android Studio
  • Android SDK (compileSdk 34 veya üstü, minSdk 24 veya üstü)

Android projenizi yapılandırma

Android projenizin build.gradle.kts bölümüne ADK Android bağımlılığını ve KSP ek açıklama işleyicisini ekleyin:

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

Ajanınızı tanımlama

Aracı kodu, ADK Kotlin Hızlı Başlangıç ile aynıdır. @Tool, @Param ve .generatedTools() söz dizimine sahip HelloTimeAgent kod örneği, Android'de değişiklik yapılmadan çalışır:

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 uygulamanızdan aracıyı çalıştırma

Android destekli cihazlarda, aşağıdaki kod örneğinde gösterildiği gibi, ajanı çağırmak ve bir eş yordamdan yanıt toplamak için InMemoryRunner kullanın:

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 ile cihaz üzerinde modeller

Android için ADK yapısı, ML Kit GenAI API aracılığıyla Gemini Nano kullanılarak cihaz üzerinde çıkarım yapılmasını destekler. Bu yaklaşım, aracıların ağ erişimi olmadan çalışmasına ve verilerin cihazda kalmasına olanak tanır.

Cihaz üzerinde modeli kullanmak için aşağıdaki kod örneğinde gösterildiği gibi Gemini yerine GenaiPrompt modeli oluşturun:

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

Ayrıca, çoklu aracı sisteminde bulut ve cihaz üzerinde modelleri birleştirebilirsiniz: Kök düzenleyici için bulut tabanlı Gemini, gizliliğe duyarlı görevleri işleyen alt aracılar için ise cihaz üzerinde GenaiPrompt modellerini kullanın.

Tamamen çalışan bir etkinlik ve daha fazla örnek için GitHub'daki ADK Kotlin örneklerine bakın.