Обзор функций приложения

Функции AppFunctions позволяют вашему Android-приложению совместно использовать определенные элементы функциональности, которые система, а также различные агенты и помощники искусственного интеллекта могут обнаруживать и вызывать. Определяя эти функции, вы позволяете своему приложению предоставлять сервисы, данные и действия операционной системе Android, позволяя пользователям выполнять задачи с помощью агентов ИИ и взаимодействия на системном уровне.

AppFunctions служат мобильным аналогом инструментов в рамках протокола Model Context Protocol (MCP) . В то время как MCP традиционно стандартизирует способы подключения агентов к серверным инструментам, AppFunctions предоставляют тот же механизм для приложений Android. Это позволяет вам предоставлять доступ к возможностям вашего приложения в виде оркестрируемых «инструментов», которые авторизованные приложения (вызывающие стороны) могут обнаруживать и выполнять для удовлетворения намерений пользователя. Вызывающие стороны должны иметь разрешение EXECUTE_APP_FUNCTIONS для обнаружения и выполнения AppFunctions и могут включать агентов, приложения и ИИ-помощников, таких как Gemini.

AppFunctions работает на устройствах под управлением Android 16 и выше.

Примеры вариантов использования

AppFunctions предоставляют мощный механизм для автоматизации задач и оптимизации взаимодействия с пользователем. Раскрывая возможности вашего приложения, вы позволяете пользователям достигать сложных целей, используя естественный язык, часто обходя необходимость пошаговой ручной навигации по пользовательскому интерфейсу.

Следующие сценарии иллюстрируют, как AppFunctions можно использовать для управления пользовательским опытом в различных категориях приложений:

  • Управление задачами и повышение производительности
    • Запрос пользователя : " Напомните мне забрать мою посылку на работе сегодня в 17:00 ".
    • Действие AppFunction : Вызывающая сторона определяет соответствующее приложение для управления задачами и вызывает функцию для создания задачи, автоматически заполняя поля заголовка, времени и местоположения на основе запроса пользователя.
  • СМИ и развлечения
    • Запрос пользователя : " Создать новый плейлист с лучшими джазовыми альбомами этого года ".
    • Действие AppFunction : Вызывающая сторона выполняет функцию создания плейлиста в музыкальном приложении, передавая контекст, например, "лучшие джазовые альбомы 2026 года", в качестве запроса для немедленной генерации и запуска контента.
  • Межприкладные рабочие процессы
    • Запрос пользователя : " Найти рецепт лапши в электронном письме Лизы и добавить ингредиенты в свой список покупок ".
    • AppFunction action : This request uses functions from multiple apps. First, the caller uses an email app's search function to retrieve the content. Then, it extracts the relevant ingredients and invokes a shopping list app's function to populate the user's list.
  • Календарь и расписание
    • Запрос пользователя : " Добавить вечеринку по случаю дня рождения мамы в мой календарь на следующий понедельник в 18:00 ".
    • AppFunction action : The approved agentic app invokes the calendar app's "create event" function, parsing the relevant context like "next Monday" and "6 PM" to create the entry without the user needing to manually open the calendar.

Как работают функции приложения

AppFunctions — это функция платформы Android 16 и сопутствующая библиотека Jetpack , которая позволяет приложениям предоставлять доступ к определенным функциям для абонентов, например, приложениям операторов, и выполнять их на устройстве.

Следующая диаграмма иллюстрирует типичный процесс обмена функциями приложений (AppFunctions) между приложениями и агентом, а затем их выполнения. Агенты, как правило, рассматривают как удаленные инструменты MCP на стороне сервера, так и локальные функции приложений при обработке запросов пользователей. Подробный процесс использования локальных функций приложений выглядит следующим образом:

  • Объявление AppFunction : Приложение для Android создано таким образом, чтобы предоставлять доступ к своим функциям AppFunction, таким как «Создать заметку» или «Отправить сообщение».
  • Генерация схемы : Библиотека AppFunctions Jetpack генерирует XML-файл схемы, в котором перечислены все объявленные функции AppFunctions в приложении. Этот файл используется операционной системой Android для индексации доступных функций AppFunctions.
  • Получение метаданных : Агент может получить метаданные AppFunction, отправив запрос.
  • Выбор и выполнение функции приложения : На основе подсказок пользователя агент выберет и выполнит соответствующую функцию приложения с соответствующими параметрами.
Диаграмма, показывающая типичный поток выполнения функций приложения (AppFunctions) от момента запуска приложения до выполнения агентом.
Рисунок 1 : Типичная схема предоставления и последующего выполнения AppFunctions агентом.

Библиотека AppFunctions Jetpack упрощает предоставление доступа к функциональности вашего приложения. С помощью обработчика аннотаций разработчики аннотируют функции, которые они хотят предоставить. Затем вызывающие стороны могут обнаруживать и вызывать эти индексированные функции, используя AppFunctionManager .

Your app is not required to verify whether the AppFunction feature is supported; this is automatically handled within the Jetpack library. For example, AppFunctionManager can verify whether or not the feature is supported.

Вот пример 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)
    }
}