مرور کلی AppFunctions

AppFunctions به برنامه اندروید شما اجازه می‌دهد تا بخش‌های خاصی از عملکرد را که سیستم و عوامل و دستیاران مختلف هوش مصنوعی می‌توانند کشف و فراخوانی کنند، به اشتراک بگذارد. با تعریف این توابع، شما برنامه خود را قادر می‌سازید تا خدمات، داده‌ها و اقدامات را به سیستم عامل اندروید ارائه دهد و به کاربران اجازه می‌دهد تا وظایف را از طریق عوامل هوش مصنوعی و تعاملات سطح سیستم انجام دهند.

AppFunctions به عنوان معادل موبایل ابزارهای درون پروتکل Model Context (MCP) عمل می‌کنند. در حالی که MCP به طور سنتی نحوه اتصال عامل‌ها به ابزارهای سمت سرور را استاندارد می‌کند، AppFunctions همان مکانیسم را برای برنامه‌های اندروید ارائه می‌دهد. این به شما امکان می‌دهد قابلیت‌های برنامه خود را به عنوان "ابزارهای" قابل تنظیم که برنامه‌های مجاز (تماس‌گیرندگان) می‌توانند آنها را کشف و اجرا کنند تا اهداف کاربر را برآورده کنند، در معرض نمایش قرار دهید. تماس‌گیرندگان باید مجوز EXECUTE_APP_FUNCTIONS را برای کشف و اجرای AppFunctions داشته باشند و می‌توانند شامل عامل‌ها، برنامه‌ها و دستیاران هوش مصنوعی مانند Gemini باشند.

AppFunctions با دستگاه‌هایی که اندروید ۱۶ یا بالاتر دارند کار می‌کند.

موارد استفاده مثال

AppFunctions مکانیزم قدرتمندی برای خودکارسازی وظایف و ساده‌سازی تعاملات کاربر فراهم می‌کند. با افشای قابلیت‌های برنامه خود، به کاربران این امکان را می‌دهید که با استفاده از زبان طبیعی به اهداف پیچیده دست یابند و اغلب نیاز به پیمایش گام به گام و دستی با رابط کاربری خود را کنار می‌گذارند.

سناریوهای زیر نشان می‌دهند که چگونه می‌توان از AppFunctions برای ایجاد تجربه‌های جدید در دسته‌های مختلف برنامه‌ها استفاده کرد:

  • مدیریت وظایف و بهره‌وری
    • درخواست کاربر : « به من یادآوری کن که امروز ساعت ۵ بعد از ظهر بسته‌ام را از محل کارم تحویل بگیرم ».
    • اکشن AppFunction : فراخوانی‌کننده، برنامه مدیریت وظیفه مربوطه را شناسایی کرده و تابعی را برای ایجاد یک وظیفه فراخوانی می‌کند و به طور خودکار فیلدهای عنوان، زمان و مکان را بر اساس درخواست کاربر پر می‌کند.
  • رسانه و سرگرمی
    • درخواست کاربر : « ایجاد یک لیست پخش جدید با برترین آلبوم‌های جاز امسال ».
    • اکشن AppFunction : فراخوانی‌کننده یک تابع ایجاد لیست پخش را در یک برنامه موسیقی اجرا می‌کند و متنی مانند «برترین آلبوم‌های جاز برای سال ۲۰۲۶» را به عنوان کوئری برای تولید و اجرای فوری محتوا ارسال می‌کند.
  • گردش‌های کاری بین اپلیکیشنی
    • درخواست کاربر : « دستور پخت نودل را از ایمیل لیزا پیدا کن و مواد لازم را به لیست خرید من اضافه کن ».
    • اکشن AppFunction : این درخواست از توابع چندین برنامه استفاده می‌کند. ابتدا، فراخوانی‌کننده از تابع جستجوی برنامه ایمیل برای بازیابی محتوا استفاده می‌کند. سپس، مواد تشکیل‌دهنده مرتبط را استخراج کرده و تابع یک برنامه لیست خرید را برای پر کردن لیست کاربر فراخوانی می‌کند.
  • تقویم و برنامه‌ریزی
    • درخواست کاربر : « جشن تولد مامان را برای دوشنبه آینده ساعت ۶ بعد از ظهر به تقویم من اضافه کن ».
    • اقدام AppFunction : برنامه عامل تأیید شده، تابع «ایجاد رویداد» برنامه تقویم را فراخوانی می‌کند و زمینه مرتبط مانند «دوشنبه آینده» و «6 بعد از ظهر» را تجزیه و تحلیل می‌کند تا ورودی را بدون نیاز به باز کردن دستی تقویم توسط کاربر ایجاد کند.

نحوه عملکرد AppFunctions

AppFunctions یک ویژگی پلتفرم اندروید ۱۶ و یک کتابخانه Jetpack همراه است که به برنامه‌ها اجازه می‌دهد توابع خاصی را برای تماس‌گیرندگان، مانند برنامه‌های عامل، در دسترس قرار دهند تا روی دستگاه اجرا شوند.

نمودار زیر جریان معمول نحوه اشتراک‌گذاری AppFunctionها توسط برنامه‌ها با یک عامل و متعاقباً اجرا شدن آنها را نشان می‌دهد. عامل‌ها احتمالاً هنگام رسیدگی به درخواست‌های کاربر، هم ابزارهای MCP از راه دور سمت سرور و هم AppFunctionهای محلی را با هم در نظر می‌گیرند. جریان دقیق استفاده از AppFunctionهای محلی به شرح زیر است:

  • اعلان AppFunction : برنامه اندروید طوری ساخته شده است که AppFunctionهای خود، مانند «ایجاد یادداشت» یا «ارسال پیام» را نمایش دهد.
  • تولید طرحواره : کتابخانه AppFunctions Jetpack یک فایل طرحواره XML تولید می‌کند که تمام AppFunctionهای اعلام‌شده در برنامه را فهرست می‌کند. این فایل توسط سیستم عامل اندروید برای فهرست‌بندی AppFunctionهای موجود استفاده می‌شود.
  • بازیابی فراداده : عامل می‌تواند فراداده AppFunction را با پرس‌وجو از آن بازیابی کند.
  • انتخاب و اجرای AppFunction : بر اساس درخواست‌های کاربر، عامل AppFunction مناسب را با پارامترهای مناسب انتخاب و اجرا می‌کند.
نموداری که جریان معمول AppFunctions را از مواجهه با برنامه تا اجرای عامل نشان می‌دهد.
شکل ۱ : جریان معمول نحوه نمایش و اجرای AppFunctionها توسط یک عامل.

کتابخانه AppFunctions Jetpack نمایش قابلیت‌های برنامه شما را ساده می‌کند. با استفاده از پردازنده حاشیه‌نویسی، توسعه‌دهندگان توابعی را که می‌خواهند نمایش داده شوند، حاشیه‌نویسی می‌کنند. سپس فراخوانی‌کنندگان می‌توانند این توابع اندیس‌گذاری شده را با استفاده از AppFunctionManager کشف و فراخوانی کنند.

برنامه شما نیازی به تأیید پشتیبانی از ویژگی AppFunction ندارد؛ این کار به طور خودکار در کتابخانه Jetpack انجام می‌شود. برای مثال، AppFunctionManager می‌تواند تأیید کند که آیا از این ویژگی پشتیبانی می‌شود یا خیر.

در اینجا مثالی از AppFunctions برای یک برنامه یادداشت‌برداری با قابلیت‌های ایجاد، ویرایش و فهرست کردن یادداشت‌ها آورده شده است.

class NoteFunctions(
  private val noteRepository: NoteRepository
) {
    /**
     * A note.
     *
     * @param id The note's ID.
     * @param title The note's title.
     * @param content The note's content.
     */
    @AppFunctionSerializable(isDescribedByKDoc = true)
    data class Note(val id: Int, val title: String, val content: String)

    /**
     * Lists all available notes.
     *
     * @param appFunctionContext The context in which the AppFunction is executed.
     */
    @AppFunction(isDescribedByKDoc = true)
    suspend fun listNotes(appFunctionContext: AppFunctionContext): List<Note>? {
        return if (noteRepository.appNotes.isEmpty()) null else viewModel.appNotes
    }

    /**
     * Adds a new note to the app.
     *
     * @param appFunctionContext The context in which the AppFunction is executed.
     * @param title The title of the note.
     * @param content The note's content.
     */
    @AppFunction(isDescribedByKDoc = true)
    suspend fun createNote(
      appFunctionContext: AppFunctionContext,
      title: String,
      content: String
    ): Note {
        return noteRepository.createNote(title, content)
    }

    /**
     * Edits a single note.
     *
     * @param appFunctionContext The context in which the AppFunction is executed.
     * @param noteId The target note's ID.
     * @param title The new title if it should be updated.
     * @param content The new content if it should be updated.
     */
    @AppFunction(isDescribedByKDoc = true)
    suspend fun editNote(
      appFunctionContext: AppFunctionContext,
      noteId: String,
      title: String?,
      content: String,
    ): Note? {
        return noteRepository.updateNote(noteId, title, content)
    }
}