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

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

AppFunctions הן הגרסה לנייד של כלים בתוך Model Context Protocol‏ (MCP). בעוד ש-MCP בדרך כלל קובע סטנדרט לחיבור סוכנים לכלים בצד השרת, AppFunctions מספק את אותו מנגנון לאפליקציות ל-Android. כך תוכלו לחשוף את היכולות של האפליקציה כ'כלים' שניתן להפעיל ולתזמן, שאפליקציות מורשות (אפליקציות שקוראות ל-API) יכולות לגלות ולהפעיל כדי לממש כוונות של משתמשים. למתקשרים צריכה להיות הרשאת 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: הבקשה הזו משתמשת בפונקציות מכמה אפליקציות. קודם, המתקשר משתמש בפונקציית החיפוש של אפליקציית האימייל כדי לאחזר את התוכן. לאחר מכן, הוא מחלץ את המרכיבים הרלוונטיים ומפעיל פונקציה של אפליקציית רשימת קניות כדי לאכלס את הרשימה של המשתמש.
  • יומן ולוחות זמנים
    • בקשת משתמש: "תוסיף ליומן שלי את מסיבת יום ההולדת של אמא שלי ביום שני הבא בשעה 18:00".
    • פעולת AppFunction: אפליקציה עם יכולות של סוכן דיגיטלי שאושרה מפעילה את הפונקציה 'יצירת אירוע' באפליקציית היומן, ומנתחת את ההקשר הרלוונטי כמו 'יום שני הבא' ו'18:00' כדי ליצור את הרשומה בלי שהמשתמש יצטרך לפתוח את היומן באופן ידני.

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

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

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

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

ספריית AppFunctions Jetpack מפשטת את החשיפה של הפונקציונליות של האפליקציה. בעזרת מעבד אנוטציות (Annotation processor), המפתחים מוסיפים אנוטציות לפונקציות שהם רוצים לחשוף. לאחר מכן, המתקשרים יכולים לגלות ולהפעיל את הפונקציות המאונדקסות האלה באמצעות AppFunctionManager.

לפני שמפעילים פונקציה, המתקשרים צריכים לוודא שהמכשיר תומך בתכונה AppFunctions. לשם כך, הם צריכים לנסות לאחזר מופע של AppFunctionManager. אחרי שהתמיכה תהיה זמינה, המתקשרים יוכלו לאמת אם פונקציה מסוימת מופעלת באפליקציית היעד באמצעות isAppFunctionEnabled(packageName, functionId). כדי לשלוח שאילתה לגבי הסטטוס של פונקציות בחבילות אחרות, צריך את android.permission.EXECUTE_APP_FUNCTIONS permission.

האפליקציה לא נדרשת לאמת אם התכונה AppFunction נתמכת. הטיפול בזה מתבצע אוטומטית בספריית Jetpack. לדוגמה, אפשר להשתמש ב-AppFunctionManager כדי לבדוק אם התכונה נתמכת.

דוגמה ל-AppFunctions באפליקציה לסיכום פגישות עם אפשרויות ליצירה, לעריכה ולרשימה של הערות:

/**
 * A note app's [AppFunction]s.
 */
class NoteFunctions(
    private val noteRepository: NoteRepository
) {
    /**
     * 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 noteRepository.appNotes.ifEmpty { null }?.toList()
    }

    /**
     * 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 note's 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: Int,
        title: String?,
        content: String?,
    ): Note? {
        return noteRepository.updateNote(noteId, title, content)
    }
}

/**
 * A note.
 */
@AppFunctionSerializable(isDescribedByKDoc = true)
data class Note(
    /** The note's identifier */
    val id: Int,
    /** The note's title */
    val title: String,
    /** The note's content */
    val content: String
)

שאלות נפוצות

בקטע הבא מפורטות תשובות לשאלות נפוצות לגבי AppFunctions.

ש: אני מפתח אפליקציות. האם אפשר להטמיע את AppFunctions כבר היום?

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

ש: הטמעתי את AppFunctions באפליקציה שלי. למה לסוכן המערכת שלי אין גישה אליהן?

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

ש: אני מפתח סוכן. האם אפשר לגשת ל-AppFunctions שסופקו על ידי אפליקציות?

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

ש: לאילו סוכני מערכת יש גישה ל-AppFunctions?

תשובה: רק למספר מוגבל של סוכני מערכת יש גישה לצינור העיבוד כולו, כי AppFunctions הן תכונות ניסיוניות.

ש: איך אפשר להכין את האפליקציה לזמינות לכלל המשתמשים (GA) של AppFunctions?

תשובה: כדאי לחשוב אילו תכונות של האפליקציה רוצים לחשוף לאוטומציה סוכנית. אפשר להטמיע AppFunctions באפליקציה. כדי לעשות זאת, פועלים לפי השלבים בקטעים הקודמים בדף הזה ומוודאים שהם רשומים במכשיר על ידי קריאה ל-adb shell cmd app_function list-app-functions.

שאלה: האם אוכל לקבל גישה מוקדמת לחוויית פיתוח אג'נטית מקצה לקצה?

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

ש: איך אפשר לשלוח משוב על AppFunctions?

תשובה: אפשר לשלוח משוב על ה-API על ידי דיווח על בעיה ומילוי הטופס להרשמה לתוכנית הגישה המוקדמת.