Funkcje aplikacji umożliwiają udostępnianie przez aplikację na Androida określonych funkcji, które system oraz różne agenty i asystenci AI mogą wykrywać i wywoływać. Definiując te funkcje, umożliwiasz aplikacji udostępnianie usług, danych i działań systemowi operacyjnemu Android, co pozwala użytkownikom wykonywać zadania za pomocą agentów AI i interakcji na poziomie systemu.
Funkcje aplikacji są mobilnym odpowiednikiem narzędzi w ramach protokołu kontekstu modelu (MCP). MCP tradycyjnie standaryzuje sposób łączenia się agentów z narzędziami po stronie serwera, a AppFunctions zapewnia ten sam mechanizm w przypadku aplikacji na Androida. Dzięki temu możesz udostępniać funkcje aplikacji jako „narzędzia”, które mogą być używane w ramach orkiestracji i które autoryzowane aplikacje (wywołujące) mogą wykrywać i wykonywać, aby realizować intencje użytkowników. Osoby dzwoniące muszą mieć uprawnienie EXECUTE_APP_FUNCTIONS do wykrywania i wykonywania funkcji aplikacji. Mogą to być agenci, aplikacje i asystenci AI, np. Gemini.
Funkcje aplikacji działają na urządzeniach z Androidem 16 lub nowszym.
Przykładowe przypadki użycia
Funkcje aplikacji to zaawansowany mechanizm automatyzacji zadań i usprawniania interakcji z użytkownikiem. Udostępniając funkcje aplikacji, umożliwiasz użytkownikom realizowanie złożonych celów za pomocą języka naturalnego, często bez konieczności ręcznego poruszania się po interfejsie.
Poniższe scenariusze pokazują, jak funkcje aplikacji mogą wpływać na wrażenia użytkowników w różnych kategoriach aplikacji:
- Zarządzanie zadaniami i produktywność
- Prośba użytkownika: „Przypomnij mi, żebym odebrał paczkę w pracy o 17:00”.
- Działanie AppFunction: wywołujący identyfikuje odpowiednią aplikację do zarządzania zadaniami i wywołuje funkcję tworzenia zadania, automatycznie wypełniając pola tytułu, czasu i lokalizacji na podstawie promptu użytkownika.
- Media i rozrywka
- Prośba użytkownika: „Utwórz nową playlistę z najlepszymi albumami jazzowymi z tego roku”.
- Działanie AppFunction: osoba wywołująca wykonuje funkcję tworzenia playlisty w aplikacji muzycznej, przekazując kontekst, np. „najlepsze albumy jazzowe z 2026 r.”, jako zapytanie, aby natychmiast wygenerować i uruchomić treści.
- Przepływy pracy w różnych aplikacjach
- Prośba użytkownika: „Znajdź przepis na makaron z e-maila Lisy i dodaj składniki do mojej listy zakupów”.
- Działanie AppFunction: to żądanie korzysta z funkcji z wielu aplikacji. Najpierw osoba dzwoniąca używa funkcji wyszukiwania w aplikacji poczty e-mail, aby pobrać treść. Następnie wyodrębnia odpowiednie składniki i wywołuje funkcję aplikacji listy zakupów, aby wypełnić listę użytkownika.
- Kalendarz i harmonogram
- Prośba użytkownika: „Dodaj do mojego kalendarza przyjęcie urodzinowe mamy w najbliższy poniedziałek o 18:00”.
- Działanie AppFunction: zatwierdzona aplikacja agentowa wywołuje funkcję „utwórz wydarzenie” aplikacji kalendarza, analizując odpowiedni kontekst, np. „w najbliższy poniedziałek” i „o 18:00”, aby utworzyć wpis bez konieczności ręcznego otwierania kalendarza przez użytkownika.
Jak działają AppFunctions
AppFunctions to funkcja platformy Android 16 i powiązana z nią biblioteka Jetpack, która umożliwia aplikacjom udostępnianie określonych funkcji, takich jak aplikacje agenta, aby mogły one uzyskiwać do nich dostęp i wykonywać je na urządzeniu.
Ten diagram ilustruje typowy proces udostępniania funkcji aplikacji agentowi i ich wykonywania. Podczas obsługi żądań użytkowników agenci prawdopodobnie będą korzystać zarówno z narzędzi MCP po stronie serwera, jak i z lokalnych funkcji aplikacji. Szczegółowy proces korzystania z lokalnych funkcji aplikacji wygląda tak:
- Deklaracja AppFunction: aplikacja na Androida jest tak skonstruowana, aby udostępniać swoje funkcje AppFunction, takie jak „Utwórz notatkę” czy „Wyślij wiadomość”.
- Generowanie schematu: biblioteka AppFunctions Jetpack generuje plik schematu XML, który zawiera listę wszystkich zadeklarowanych funkcji aplikacji. Ten plik jest używany przez system Android do indeksowania dostępnych funkcji aplikacji.
- Pobieranie metadanych: agent może pobierać metadane funkcji aplikacji, wysyłając do nich zapytania.
- Wybieranie i wykonywanie funkcji aplikacji: na podstawie promptów użytkownika agent wybierze i wykona odpowiednią funkcję aplikacji z odpowiednimi parametrami.
Biblioteka Jetpack AppFunctions ułatwia udostępnianie funkcji aplikacji.
Za pomocą procesora adnotacji deweloperzy dodają adnotacje do funkcji, które chcą udostępnić. Dzwoniący mogą następnie odkrywać i wywoływać te zindeksowane funkcje za pomocą funkcji AppFunctionManager.
Aplikacja nie musi sprawdzać, czy funkcja AppFunction jest obsługiwana. Jest to automatycznie obsługiwane w bibliotece Jetpack. Na przykład AppFunctionManager może sprawdzić, czy funkcja jest obsługiwana.
Oto przykład funkcji aplikacji w przypadku aplikacji do robienia notatek z możliwością tworzenia, edytowania i wyświetlania notatek.
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)
}
}