סקירה כללית של AppFunctions

התכונה AppFunctions מאפשרת לאפליקציית Android לשתף פונקציות ספציפיות שהמערכת וסוכני ועוזרים וירטואליים שונים מבוססי-AI יכולים לגלות ולהפעיל. הגדרת הפונקציות האלה מאפשרת לאפליקציה לספק שירותים, נתונים ופעולות למערכת ההפעלה Android, וכך המשתמשים יכולים להשלים משימות באמצעות סוכני AI ואינטראקציות ברמת המערכת.

‫AppFunctions הן הגרסה לנייד של כלים בתוך Model Context Protocol‏ (MCP). בדרך כלל, MCP קובע תקן לאופן שבו סוכנים מתחברים לכלים בצד השרת, אבל AppFunctions מספק את אותו מנגנון לאפליקציות ל-Android. כך תוכלו לחשוף את היכולות של האפליקציה כ'כלים' שניתן להפעיל, שאפליקציות מורשות (מבצעות קריאות) יכולות לגלות ולהפעיל כדי לממש כוונות של משתמשים. למתקשרים צריכה להיות ההרשאה EXECUTE_APP_FUNCTIONS כדי לגלות ולהפעיל פונקציות של אפליקציות, והם יכולים לכלול סוכנים, אפליקציות ועוזרים מבוססי-AI כמו Gemini.

התכונה AppFunctions פועלת במכשירים עם Android מגרסה 16 ואילך.

תרחישים לדוגמה

‫AppFunctions מספקות מנגנון יעיל לאוטומציה של משימות ולייעול האינטראקציות של המשתמשים. חשיפת היכולות של האפליקציה מאפשרת למשתמשים להשיג מטרות מורכבות באמצעות שפה טבעית, ולעיתים קרובות היא מייתרת את הצורך בניווט ידני מפורט בממשק המשתמש.

התרחישים הבאים ממחישים איך אפשר להשתמש ב-AppFunctions כדי לשפר את חוויית המשתמש במגוון קטגוריות של אפליקציות:

  • ניהול משימות ופרודוקטיביות
    • בקשת משתמש: "תזכיר לי לאסוף את החבילה מהעבודה היום ב-17:00".
    • פעולת AppFunction: המתקשר מזהה את האפליקציה הרלוונטית לניהול משימות ומפעיל פונקציה ליצירת משימה, ומאכלס באופן אוטומטי את השדות של הכותרת, השעה והמיקום על סמך ההנחיה של המשתמש.
  • מדיה ובידור
    • בקשת משתמש: "צור פלייליסט חדש עם אלבומי הג'אז המובילים מהשנה".
    • פעולת AppFunction: המתקשר מפעיל פונקציה ליצירת פלייליסט באפליקציית מוזיקה, ומעביר הקשר כמו 'אלבומי הג&#39אז הטובים ביותר לשנת 2026' כשאילתת החיפוש נועדה ליצור ולהפעיל את התוכן באופן מיידי.
  • תהליכי עבודה בין אפליקציות
    • בקשת משתמש: "Find the noodle recipe from Lisa's email and add the ingredients to my shopping list".
    • פעולת AppFunction: הבקשה הזו משתמשת בפונקציות מכמה אפליקציות. קודם כל, המתקשר משתמש בפונקציית החיפוש של אפליקציית האימייל כדי לאחזר את התוכן. לאחר מכן, הוא מחלץ את המרכיבים הרלוונטיים ומפעיל פונקציה של אפליקציית רשימת קניות כדי לאכלס את הרשימה של המשתמש.
  • יומן ולוחות זמנים
    • בקשת משתמש: "Add Mom's birthday party to my calendar for next Monday at 6 PM".
    • פעולת AppFunction: אפליקציה עם יכולות של סוכן AI מאושרת מפעילה את הפונקציה 'יצירת אירוע' באפליקציית היומן, ומנתחת את ההקשר הרלוונטי כמו 'יום שני הבא' ו'18:00' כדי ליצור את הרשומה בלי שהמשתמש יצטרך לפתוח את היומן באופן ידני.

איך פועלות פונקציות של אפליקציות

AppFunctions היא תכונת פלטפורמה של Android 16 וספריית Jetpack נלווית שמאפשרת לאפליקציות לחשוף פונקציות ספציפיות כדי שגורמים מתקשרים, כמו אפליקציות של סוכנים, יוכלו לגשת אליהן ולבצע אותן במכשיר.

בתרשים הבא מוצג התהליך האופייני של שיתוף AppFunctions מאפליקציות עם סוכן, ולאחר מכן הפעלתן. סביר להניח שסוכנים יתייחסו גם לכלים מרוחקים של MCP בצד השרת וגם ל-AppFunctions מקומיות כשהם מטפלים בבקשות של משתמשים. התהליך המפורט לשימוש ב-AppFunctions מקומיות הוא כדלקמן:

  • הצהרה על AppFunction: אפליקציית Android בנויה כך שהיא חושפת את ה-AppFunctions שלה, כמו 'יצירת הערה' או 'שליחת הודעה'.
  • יצירת סכימה: ספריית AppFunctions Jetpack יוצרת קובץ סכימת XML שמפרט את כל פונקציות האפליקציה שהוגדרו באפליקציה. מערכת Android OS משתמשת בקובץ הזה כדי ליצור אינדקס של פונקציות האפליקציה הזמינות.
  • אחזור מטא-נתונים: הסוכן יכול לאחזר מטא-נתונים של AppFunction על ידי שליחת שאילתה.
  • בחירה והפעלה של AppFunction: על סמך ההנחיות של המשתמש, הסוכן יבחר ויפעיל את AppFunction המתאים עם הפרמטרים המתאימים.
תרשים שמציג את התהליך האופייני של AppFunctions מחשיפה לאפליקציה ועד להפעלת הסוכן.
תרשים 1: רצף הפעולות האופייני של חשיפת AppFunctions וביצוען על ידי סוכן.

ספריית 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)
    }
}