ساخت عوامل ADK برای اندروید

کتابخانه‌ی «کیت توسعه‌ی عامل » (ADK) برای اندروید به شما امکان می‌دهد عامل‌های هوش مصنوعی پیشرفته را مستقیماً در برنامه‌های اندروید خود بسازید و ادغام کنید. ADK یک چارچوب توسعه‌دهنده‌ی متن‌باز برای ساخت عامل‌های مبتنی بر هوش مصنوعی است که به صورت محلی، روی سرویس‌های میزبانی‌شده و روی دستگاه‌های تلفن همراه اندروید اجرا می‌شوند. این چارچوب از زبان‌های برنامه‌نویسی کاتلین و جاوا پشتیبانی می‌کند و به شما امکان می‌دهد به سرعت عامل‌ها را بسازید و آن‌ها را به برنامه‌های پیچیده و چندعاملی ارتقا دهید.

کتابخانه ADK برای اندروید، وابستگی‌های تخصصی و پشتیبانی زمان اجرا را متناسب با محیط‌های موبایل ارائه می‌دهد. شما می‌توانید با استفاده از Gemini Nano و با استفاده از APIهای GenAI ML Kit، عامل‌هایی بسازید که مدل‌های هوش مصنوعی را روی دستگاه اجرا می‌کنند و به شما امکان می‌دهند تجربیات هوش مصنوعی متمرکز بر حریم خصوصی و با تأخیر کم ایجاد کنید که می‌توانند بدون دسترسی به شبکه کار کنند.

استفاده از ADK Kotlin در پروژه‌های اندروید

شما می‌توانید از API عامل ADK Kotlin برای ساخت عامل‌های هوش مصنوعی که درون برنامه‌های اندروید اجرا می‌شوند، استفاده کنید. کد عاملی که می‌نویسید با راهنمای شروع به کار ADK Kotlin یکسان است. تفاوت‌ها در وابستگی Gradle، پیکربندی پروژه و نحوه فراخوانی عامل در زمان اجرا است.

پیش‌نیازها

کتابخانه ADK برای اندروید الزامات توسعه زیر را دارد:

  • اندروید استودیو
  • کیت توسعه نرم‌افزار اندروید (compileSdk نسخه ۳۴ یا بالاتر، minSdk نسخه ۲۴ یا بالاتر)

پروژه اندروید خود را پیکربندی کنید

در build.gradle.kts پروژه اندروید خود، وابستگی 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)
}

نماینده خود را تعریف کنید

کد عامل (agent) با ADK Kotlin Quickstart یکسان است. مثال کد HelloTimeAgent با سینتکس‌های @Tool ، @Param و .generatedTools() بدون تغییر در اندروید کار می‌کند:

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

عامل را از برنامه اندروید خود اجرا کنید

در دستگاه‌های اندروید، از 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 برای اندروید شامل پشتیبانی از استنتاج روی دستگاه با استفاده از Gemini Nano از طریق ML Kit GenAI API است. این رویکرد به عامل‌ها اجازه می‌دهد بدون دسترسی به شبکه اجرا شوند و داده‌ها را روی دستگاه نگه دارند.

برای استفاده از یک مدل روی دستگاه، به جای Gemini ، یک مدل GenaiPrompt ایجاد کنید، همانطور که در مثال کد زیر نشان داده شده است:

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 مراجعه کنید.