مقالات إرشادية

إنشاء تطبيقات Android ذكية: التكامل مع نظام الذكاء الاصطناعي في Android باستخدام AppFunctions

قراءة لمدة 6 دقائق
عرض الملف الشخصي لـ "بن فايس"
Ben Weiss مهندس علاقات المطوّرين

مرحبًا بك مجددًا في سلسلة منشورات المدونة "إنشاء تطبيقات Android ذكية"، حيث نأخذ تطبيق Android أساسيًا ونحوله إلى تجربة مخصّصة وذكية واستباقية. في المنشور السابق، استكشفنا كيفية الاستفادة من Firebase AI Logic لإنشاء ميزات الذكاء الاصطناعي المستضافة على السحابة الإلكترونية والميزات المختلطة.

تتفوق واجهات المستخدم التقليدية للأجهزة الجوّالة في المهام المركّزة والعملية، ويطرح نظام الذكاء الاصطناعي في Android ميزات تكميلية لتسهيل الإجراءات المعقدة والمتعددة الخطوات. من خلال استكمال واجهات المستخدم التقليدية، توفّر AppFunctions نقطة دخول جديدة وقوية: يمكن لوكيل مميّز على الجهاز الوصول إلى ميزات التطبيق في الخلفية. ويمكن أن يكون ذلك مفيدًا بشكل خاص عندما يكون المستخدمون يقودون السيارة أو يمشون أو يقومون بمهام متعددة أخرى.

في هذه المقالة، سنوضّح لك كيفية تصميم هذه الإمكانات ودمجها في تطبيق تخطيط السفر JetPacker باستخدام Android AppFunctions. سنستكشف الأساس المنطقي وراء خيارات الميزات، ونناقش الأدوات المتخصّصة التي استخدمناها لتسريع عملية التطوير، ونتعمّق في الرمز الذي يجعل كل ذلك ممكنًا.

تصميم ميزات جاهزة للذكاء الاصطناعي: اتخاذ خيارات مهمة للمستخدمين

لاختيار الميزات التي يجب توفيرها لنظام الذكاء الاصطناعي، بحثنا عن المهام التي تكون فيها الأوامر الصوتية أو النصية أسرع موضوعيًا من النقر على الشاشات. في تسجيل الشاشة جنبًا إلى جنب هذا، يمكنك رؤية هذا التباين تمامًا: على اليمين، مستخدم ينقر على شاشات متعددة لتسجيل نفقة؛ وعلى اليسار، يتم إكمال المهمة نفسها على الفور في الخلفية من خلال وكيل مميّز.

كان خيارنا الأول هو تتبُّع النفقات. عادةً ما يتطلب تسجيل نفقة القهوة أثناء الرحلة بضع نقرات: فتح قفل الهاتف، وفتح التطبيق، والعثور على الرحلة النشطة، والانتقال إلى علامة التبويب "النفقات"، والنقر على الزر "إضافة"، والتقاط صورة للإيصال، والتحقق من النتيجة. من خلال توفير ميزتَي addExpense وgetExpenses كـ AppFunctions، يتولى وكيل النظام المهام الصعبة. عندما يقول المستخدم: "أضِف نفقة قهوة بقيمة خمسة دولارات إلى رحلتي إلى باريس"، يبحث الوكيل تلقائيًا عن معرّف الرحلة الصحيح في الخلفية ويُدرِج النفقة، ويتخطى تدفق واجهة المستخدم اليدوي بالكامل.

أعطينا أيضًا الأولوية لإدارة خط سير الرحلة. عادةً ما يتطلب العثور على النشاط التالي في برنامج رحلة مزدحم التمرير خلال عرض المخطّط الزمني الكثيف. من خلال توفير getItinerary وaddItineraryEvent للنظام، يمكن للمستخدم ببساطة أن يسأل: "ماذا سأفعل بعد ذلك في باريس؟" ويحصل على إجابة فورية.

أخيرًا، ركّزنا على تسجيل الملاحظات بدون استخدام اليدَين. يصعب كتابة التذكيرات أو الملاحظات أثناء المشي في شارع مزدحم، كما أنّ ذلك غير آمن. يسمح عرض إمكانية الملاحظات الصوتية للمستخدم بقول: "كانت الرحلة رائعة، رأيتُ غروبًا جميلًا وتمكنتُ من النوم جيدًا"، ويقوم الوكيل المميّز تلقائيًا بنسخها وحفظها مباشرةً في قاعدة بيانات السفر باستخدام addVoiceNote AppFunction.

بروتوكول سياق النموذج (MCP) من Android المستند إلى AppFunctions

تم إنشاء هذه التجربة بالكامل على بروتوكول سياق النموذج (MCP) من Android. بموجب هذا التصميم، يعمل التطبيق كخادم MCP محلي. بدلاً من واجهات برمجة التطبيقات البعيدة، يمكنك توفير ميزات تطبيقك مباشرةً لنظام الذكاء الاصطناعي على الجهاز.

Android AppFunctions هي واجهة برمجة التطبيقات التي تجعل هذا المفهوم حقيقة. وهي تقرأ دوال Kotlin التي تم وضع علامات توضيحية عليها وتُجمّعها في تعريفات أدوات آمنة ومحدّدة النوع في بيئة معزولة يمكن للوكيل المميّز اكتشافها واستدعاؤها محليًا على الجهاز.

Android MCP diagram.png
مخطّط بياني يوضّح تنسيق تطبيقاتنا ونظام Android الأساسي ووكلاء النظام لـ AppFunctions

بموجب نموذج بروتوكول سياق النموذج (MCP) من Android، يعمل تطبيقك كخادم MCP محلي يعرض أدوات منظَّمة، بينما تعمل منصة Android كسجلّ مركزي للأدوات. على جانب عميل MCP، يتم تسجيل تطبيقات الوكلاء في نظام الذكاء الاصطناعي بعد منحها أذونات مميّزة على مستوى النظام للوصول إلى السجلّ.

عندما يتفاعل المستخدم مع وكيل مسجَّل، يحدّد النموذج اللغوي الكبير (LLM) ما إذا كان يمكن معالجة الطلب من خلال AppFunction، ويطلب بيانات الوصف من المنصة، ويُنفّذ الدوال المسجَّلة المناسبة في الخلفية. يمنحك تصميم عميل-خادم MCP المحلي هذا تحكّمًا كاملاً: يمكنك اختيار الميزات التي يمكن للوكيل الوصول إليها بالضبط، مع الحفاظ على خصوصية بقية بيانات تطبيقك.

كيفية تسريع عملية التطوير باستخدام مهارات Android

لتبسيط عملية التكامل، استفدنا من مهارة تطوير AppFunctions. مهارة تطوير AppFunctions هي أداة تطوير كاملة. وقد أرشدتنا خلال دورة الحياة بأكملها: ربط فئات بيانات Kotlin لتسلسل المَعلمات، وإنشاء نقاط دخول Service الضرورية، وتحسين مستندات KDoc لضمان فهم النموذج اللغوي الكبير لحدود المَعلمات، وإعداد الاختبار الآلي باستخدام ADB.

توفير ميزات التطبيق لنظام الذكاء الاصطناعي

لننتقل من النظرية إلى التنفيذ.

الإعداد وإعداد التبعيات

نبدأ بإضافة تبعيات AppFunctions. إحداها لواجهة برمجة التطبيقات والأخرى لمُجمِّع Kotlin Symbol Processing.

implementation("androidx.appfunctions:appfunctions:1.0.0-alpha10")
ksp("androidx.appfunctions:appfunctions-compiler:1.0.0-alpha10")

نمذجة أنواع البيانات المخصّصة

يجب وضع علامة @AppFunctionSerializable على أي عنصر مخصّص يتم تبادله مع الوكيل. في ملف TripSerializable.kt، نحدّد نموذج بيانات الرحلة:

@AppFunctionSerializable(isDescribedByKDoc = true)
data class TripSerializable(
    /** The trip's unique identifier. */
    val id: String,
    /** The trip's title. */
    val title: String,
    /** The trip's destination location. */
    val location: String,
    /** The trip's start date in milliseconds. */
    val startDate: Long,
    /** The trip's end date in milliseconds. */
    val endDate: Long,
    /** A list of participants. */
    val participants: List<String>,
)

توفير الميزات باستخدام العلامة التوضيحية ‎ @AppFunction

بعد ذلك، كتبت المهارة دوال Kotlin التي تُنفّذ طلبات البحث في قاعدة البيانات ووضعت علامة @AppFunction عليها. يمكننا عرض ذلك في searchTrip:

/**
 * Looks for trips based on optional filters like id, title (name), location, and dates.
 *
 * @param id The unique identifier of the trip.
 * @param title The title or name of the trip.
 * @param location The destination location.
 * @param startDate The minimum start date in milliseconds.
 * @param endDate The maximum end date in milliseconds.
 * @return A list of trips matching the filters.
 */
@AppFunction(isDescribedByKDoc = true)
suspend fun searchTrip(
    id: String? = null,
    title: String? = null,
    location: String? = null,
    startDate: Long? = null,
    endDate: Long? = null
): List<TripSerializable> {
    return withContext(Dispatchers.IO) {
    // implementation
}

بما أنّ AppFunctions يتم تشغيلها على سلسلة التعليمات البرمجية لواجهة المستخدم تلقائيًا، نستخدم withContext(Dispatchers.IO) للتبديل إلى أداة توزيع في الخلفية. بالإضافة إلى ذلك، نحسّن KDoc لاستخدام أفعال واضحة وأمرية وتحديد قيود المَعلمات. يتم تجميع هذه المستندات مباشرةً في مخطط الأداة، الذي يستخدمه الوكيل المميّز لحلّ المَعلمات ومعالجة أخطاء وقت التشغيل.

نقطة دخول الخدمة وتكامل Hilt

لتسجيل هذه الميزات في نظام الذكاء، ننشئ صنفًا أساسيًا مجرّدًا يوسّع AppFunctionService. نضع علامة @AppFunctionServiceEntryPoint عليها:

@RequiresApi(36)
@AndroidEntryPoint
@AppFunctionServiceEntryPoint(
    serviceName = "JetPackerAppFunctionService",
    appFunctionXmlFileName = "jetpacker_app_function_service"
)
abstract class BaseJetPackerAppFunctionService : AppFunctionService() {
    @Inject internal lateinit var tripDao: TripDao
    // DAOs and database references are injected here...
}

أثناء التجميع، ينشئ KSP فئة الخدمة الفرعية الملموسة النهائية، JetPackerAppFunctionService، كما تم الإعلان عنها باستخدام المَعلمة serviceName. نسجّل أيضًا app_metadata.xml في ملف بيان التطبيق. يوفّر هذا الملف قواعد التشغيل العامة لـ AppFunctions المُعلَن عنها في JetPacker.

اختبار AppFunctions والتحقّق منها

بعد التنفيذ، عليك التحقّق من أنّ AppFunctions مسجَّلة وتعمل بشكل صحيح.

على الأجهزة أو المحاكيات التي تعمل بنظام التشغيل Android 17 أو إصدار أحدث، يمكنك استخدام أوامر ADB من المحطة لعرض الدوال واستدعاؤها. يعرض تشغيل adb shell cmd app_function list-app-functions جميع الدوال المسجَّلة لحزمتك. يمكنك بعد ذلك تنفيذ دالة معيّنة واختبار تكاملها مع قاعدة البيانات من خلال تشغيل adb shell cmd app_function execute-app-function أثناء تمرير سلسلة مَعلمات JSON غير مُعالَجة.

بدلاً من أوامر ADB هذه، يمكنك أيضًا استخدام وكيل اختبار AppFunctions لفحص الإعداد، وعرض AppFunctions وتنفيذها، وحتى معرفة كيفية تصرّف AppFunctions في تدفق محادثة حقيقي.

الخلاصة

عند التفكير في ميزات التطبيق التي يمكن المساهمة بها في نظام الذكاء الاصطناعي باستخدام AppFunctions، يجب إجراء تغيير طفيف في طريقة التفكير في الرمز والمستندات. تتيح لك AppFunctions استخدام نموذج التفاعل الجديد هذا للتطبيقات، ما يسمح باستخدام وكيل للوصول إلى ميزات التطبيق.

أولاً، مهارة تطوير AppFunctions هي أداة أساسية لدورة الحياة، ما يساعدك في اكتشاف الميزات وتنفيذ AppFunctions وتحسينها لتطبيقاتك. ثانيًا، تعليقات KDoc هي مادة عرض مُجمَّعة لواجهة برمجة التطبيقات؛ تؤثر الأوصاف الواضحة للمَعلمات بشكل مباشر في دقة تنفيذ وكيل النظام. أخيرًا، يوفّر بروتوكول سياق النموذج (MCP) من Android التنفيذ الذي يركّز على الجهاز أولاً، ما يسمح للتطبيقات بالتعاون بأمان مع وكلاء الذكاء الاصطناعي.

تساهم ميزات التطبيق من خلال AppFunctions في جعل تطبيقك جاهزًا لنظام الذكاء الاصطناعي. يُرجى إعلامنا بكيفية تكييف تطبيقاتك مع العصر الاستباقي.

مزيد من المعلومات

يمكنك الاطّلاع على الأجزاء الأخرى من سلسلة منشورات المدوّنة هذه:
الجزء 1: تقديم التطبيق ونظرة عامة عالية المستوى.
الجزء 2: الذكاء الاصطناعي على الجهاز فقط. تعمّق في واجهات برمجة التطبيقات GenAI من ML Kit وGemini Nano لإنشاء ميزات يركّز على الخصوصية، مثل تلخيص برنامج الرحلة وتحليل الإيصالات ومعالجة الصوت المحلي.
الجزء 3: الاستدلال المختلط والمستند إلى السحابة الإلكترونية استكشِف كيفية استخدام Firebase AI Logic لربط إجابات النموذج اللغوي الكبير (LLM) بالبيانات الواقعية، مثل "خرائط Google" وسياق الويب.
الجزء 4 (هذا المنشور): تكامل النظام التكامل مع نظام الذكاء الاصطناعي في Android باستخدام AppFunctions.
الجزء 5 (سيتم نشره قريبًا): سير العمل الاستباقي داخل التطبيق يمكنك توسيع التطبيق باستخدام مساعد حجز شامل مستند إلى A2UI وADK.

هل تريد معرفة المزيد عن تطوير تطبيقات Android؟ يمكنك متابعة Android Developers على YouTube أو LinkedIn.

تخضع جميع مقتطفات الرموز في منشور المدونة هذا لإشعار حقوق الطبع والنشر التالي:

Copyright 2026 Google LLC.
SPDX-License-Identifier: Apache-2.0
من تأليف:
متابعة القراءة