تتيح لك مكتبة Agent Development Kit (ADK) لنظام Android إنشاء وكلاء ذكاء اصطناعي متطوّرين ودمجهم مباشرةً في تطبيقات Android. ADK هو إطار عمل مفتوح المصدر للمطوّرين يتيح إنشاء وكلاء مدعومين بالذكاء الاصطناعي يعملون محليًا وعلى الخدمات المستضافة وعلى أجهزة Android الجوّالة. يدعم إطار العمل لغتَي البرمجة Kotlin وJava، ما يتيح لك البدء بسرعة في إنشاء الوكلاء والتوسّع إلى تطبيقات معقّدة ومتعددة الوكلاء.
توفّر مكتبة ADK لنظام Android تبعيات متخصّصة ودعمًا لوقت التشغيل مصمّمًا خصيصًا للبيئات على الأجهزة الجوّالة. يمكنك إنشاء وكلاء ينفّذون نماذج الذكاء الاصطناعي على الجهاز فقط باستخدام Gemini Nano من خلال واجهات برمجة التطبيقات GenAI في حزمة تعلّم الآلة، ما يتيح لك إنشاء تجارب ذكاء اصطناعي تركز على الخصوصية وتتسم بزمن استجابة منخفض ويمكنها العمل بدون الوصول إلى الشبكة.
استخدام ADK Kotlin في مشاريع Android
يمكنك استخدام واجهة برمجة التطبيقات للوكيل في ADK Kotlin لإنشاء وكلاء ذكاء اصطناعي يعملون داخل تطبيقات Android. إنّ رمز الوكيل الذي تكتبه مطابق لدليل البدء في ADK Kotlin . تتمثّل الاختلافات في تبعية Gradle وإعداد المشروع وكيفية استدعاء الوكيل في وقت التشغيل.
المتطلبات الأساسية
تتطلّب مكتبة ADK لنظام Android متطلبات التطوير التالية:
- استوديو Android
- حزمة تطوير البرامج (SDK) لنظام Android (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)
}
تحديد الوكيل
إنّ رمز الوكيل مطابق للبدء السريع في ADK Kotlin. يعمل مثال الرمز 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 من خلال واجهة برمجة التطبيقات 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 على الجهاز للوكلاء الفرعيين الذين يعالجون المهام التي تتسم بالحساسية للخصوصية.
للاطّلاع على نشاط كامل وعملي والمزيد من الأمثلة، يُرجى الاطّلاع على أمثلة ADK Kotlin على GitHub.