تتيح لك مكتبة حزمة تطوير الوكلاء (ADK) لنظام التشغيل Android إنشاء وكلاء ذكاء اصطناعي متطوّرين ودمجهم مباشرةً في تطبيقات Android. ADK هي إطار عمل مفتوح المصدر للمطوّرين يتيح إنشاء وكلاء مستندين إلى الذكاء الاصطناعي يعملون محليًا وعلى الخدمات المستضافة وعلى أجهزة Android الجوّالة. يتوافق إطار العمل مع لغتَي البرمجة Kotlin وJava، ما يتيح لك البدء بسرعة في إنشاء وكلاء وتوسيع نطاق التطبيقات لتشمل تطبيقات معقّدة ومتعددة الوكلاء.
توفّر مكتبة ADK لنظام التشغيل Android عناصر تابعة متخصّصة ودعمًا لوقت التشغيل مصمَّمًا خصيصًا للبيئات على الأجهزة الجوّالة. يمكنك إنشاء وكلاء ينفّذون نماذج الذكاء الاصطناعي على الجهاز فقط باستخدام Gemini Nano من خلال واجهات برمجة التطبيقات الخاصة بالذكاء الاصطناعي التوليدي في حزمة تعلّم الآلة، ما يتيح لك إنشاء تجارب ذكاء اصطناعي تركّز على الخصوصية وتتسم بزمن استجابة منخفض ويمكن أن تعمل بدون الوصول إلى الشبكة.
استخدام ADK Kotlin في مشاريع Android
يمكنك استخدام واجهة برمجة التطبيقات ADK Kotlin agent API لإنشاء وكلاء مستندين إلى الذكاء الاصطناعي يعملون داخل تطبيقات Android. إنّ رمز الوكيل الذي تكتبه مطابق لدليل البدء في ADK Kotlin. وتتمثّل الاختلافات في تبعية Gradle وإعدادات المشروع وطريقة استدعاء الوكيل في وقت التشغيل.
المتطلبات الأساسية
تتضمّن مكتبة ADK لنظام التشغيل Android متطلبات التطوير التالية:
- استوديو Android
- حزمة تطوير البرامج (SDK) لنظام التشغيل Android (الإصدار 34 أو إصدار أحدث من compileSdk، والإصدار 24 أو إصدار أحدث من minSdk)
ضبط إعدادات مشروع 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
}
}
}
استخدام الوكلاء لإنشاء واجهة مستخدم
عندما يحتاج الوكيل إلى عرض واجهات مستخدم تفاعلية ومنظَّمة، مثل البطاقات أو النماذج أو القوائم، بدلاً من النص العادي، استخدِم بروتوكول الوكيل إلى واجهة المستخدم (A2UI).
يمكنك استخدام Jetpack Compose A2UI Renderer لعرض استجابات A2UI تلقائيًا كمكوّنات أصلية من Jetpack Compose وMaterial 3 في التسلسل الهرمي لواجهة المستخدم في تطبيقك. للبدء، يُرجى الاطّلاع على دليل إمكانية الوصول إلى واجهة المستخدم في Jetpack Compose.
النماذج التي تعمل على الجهاز فقط من خلال 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 تعمل على الجهاز فقط للوكلاء الفرعيين الذين يتعاملون مع المهام الحساسة للخصوصية. لمزيد من المعلومات حول هذا النمط، يُرجى الاطّلاع على منشور المدوّنة حول "حزمة تطوير التطبيقات على Android" للغة Kotlin وAndroid.
للحصول على نشاط كامل وأمثلة إضافية، يمكنك الاطّلاع على أمثلة ADK Kotlin على GitHub.