AppFunctions के बारे में खास जानकारी

AppFunctions की मदद से, आपका Android ऐप्लिकेशन कुछ खास फ़ंक्शन शेयर कर सकता है. सिस्टम, एआई एजेंट, और असिस्टेंट इन फ़ंक्शन को खोज सकते हैं और इनका इस्तेमाल कर सकते हैं. इन फ़ंक्शन को तय करके, Android OS को अपने ऐप्लिकेशन की सेवाएं, डेटा, और कार्रवाइयां उपलब्ध कराई जा सकती हैं. इससे उपयोगकर्ता, एआई एजेंट और सिस्टम-लेवल के इंटरैक्शन की मदद से टास्क पूरे कर पाते हैं.

AppFunctions, मॉडल कॉन्टेक्स्ट प्रोटोकॉल (एमसीपी) में मौजूद टूल के मोबाइल वर्शन के तौर पर काम करते हैं. आम तौर पर, एमसीपी यह तय करता है कि एजेंट, सर्वर-साइड टूल से कैसे कनेक्ट होंगे. वहीं, AppFunctions Android ऐप्लिकेशन के लिए यही तरीका उपलब्ध कराता है. इससे आपको अपने ऐप्लिकेशन की क्षमताओं को "टूल" के तौर पर दिखाने में मदद मिलती है. इन टूल को व्यवस्थित किया जा सकता है. साथ ही, अनुमति वाले ऐप्लिकेशन (कॉल करने वाले) इन्हें खोज सकते हैं और उपयोगकर्ता के इरादों को पूरा करने के लिए इनका इस्तेमाल कर सकते हैं. कॉल करने वालों के पास, AppFunctions को खोजने और उन्हें लागू करने की EXECUTE_APP_FUNCTIONS अनुमति होनी चाहिए. इनमें एजेंट, ऐप्लिकेशन, और Gemini जैसे एआई असिस्टेंट शामिल हो सकते हैं.

AppFunctions, Android 16 या इसके बाद के वर्शन वाले डिवाइसों पर काम करती हैं.

इस्तेमाल के उदाहरण

AppFunctions, टास्क को ऑटोमेट करने और उपयोगकर्ता इंटरैक्शन को बेहतर बनाने का एक बेहतरीन तरीका है. अपने ऐप्लिकेशन की क्षमताओं को उपलब्ध कराकर, उपयोगकर्ताओं को आम बोलचाल की भाषा का इस्तेमाल करके मुश्किल लक्ष्यों को पूरा करने की सुविधा मिलती है. इससे अक्सर, उन्हें आपके यूज़र इंटरफ़ेस (यूआई) के साथ चरण-दर-चरण, मैन्युअल तरीके से नेविगेट करने की ज़रूरत नहीं पड़ती.

यहां कुछ उदाहरण दिए गए हैं. इनमें बताया गया है कि अलग-अलग कैटगरी के ऐप्लिकेशन में, AppFunctions का इस्तेमाल करके बेहतर अनुभव कैसे दिया जा सकता है:

  • टास्क मैनेज करने और प्रॉडक्टिविटी बढ़ाने से जुड़े ऐप्लिकेशन
    • उपयोगकर्ता का अनुरोध: "मुझे आज शाम 5 बजे ऑफ़िस से अपना पैकेज लेने के लिए याद दिलाओ".
    • AppFunction ऐक्शन: कॉल करने वाला व्यक्ति, टास्क मैनेज करने वाले काम के ऐप्लिकेशन की पहचान करता है और टास्क बनाने के लिए किसी फ़ंक्शन को चालू करता है. इससे, उपयोगकर्ता के प्रॉम्प्ट के आधार पर टाइटल, समय, और जगह की जानकारी वाले फ़ील्ड अपने-आप भर जाते हैं.
  • मीडिया और मनोरंजन
    • उपयोगकर्ता का अनुरोध: "इस साल के टॉप जैज़ एल्बम की एक नई प्लेलिस्ट बनाओ".
    • AppFunction ऐक्शन: कॉल करने वाला व्यक्ति, संगीत ऐप्लिकेशन में प्लेलिस्ट बनाने की सुविधा का इस्तेमाल करता है. इसके लिए, वह "साल 2026 के टॉप जैज़ एल्बम" जैसे कॉन्टेक्स्ट को क्वेरी के तौर पर पास करता है, ताकि कॉन्टेंट तुरंत जनरेट किया जा सके और उसे लॉन्च किया जा सके.
  • अलग-अलग ऐप्लिकेशन के वर्कफ़्लो
    • उपयोगकर्ता का अनुरोध: "लीज़ा के ईमेल से नूडल की रेसिपी ढूंढो और उसमें इस्तेमाल होने वाले सामान को मेरी ख़रीदारी की सूची में जोड़ो".
    • AppFunction ऐक्शन: इस अनुरोध में, कई ऐप्लिकेशन के फ़ंक्शन का इस्तेमाल किया जाता है. सबसे पहले, कॉल करने वाला व्यक्ति ईमेल ऐप्लिकेशन की खोज सुविधा का इस्तेमाल करके, कॉन्टेंट को वापस लाता है. इसके बाद, यह काम के सामान की जानकारी निकालता है और शॉपिंग लिस्ट वाले ऐप्लिकेशन के फ़ंक्शन को चालू करता है, ताकि उपयोगकर्ता की लिस्ट में सामान की जानकारी अपने-आप भर जाए.
  • Calendar और शेड्यूल करना
    • उपयोगकर्ता का अनुरोध: "अगले सोमवार को शाम 6 बजे के लिए, मेरे कैलेंडर में मम्मी के जन्मदिन की पार्टी का इवेंट जोड़ो".
    • AppFunction ऐक्शन: मंज़ूरी पा चुका एजेंटिक ऐप्लिकेशन, Calendar ऐप्लिकेशन के "इवेंट बनाएं" फ़ंक्शन को चालू करता है. इसके बाद, "अगले सोमवार" और "शाम 6 बजे" जैसे काम के कॉन्टेक्स्ट को पार्स करके एंट्री बनाता है. इसके लिए, उपयोगकर्ता को Calendar ऐप्लिकेशन को मैन्युअल तरीके से खोलने की ज़रूरत नहीं होती.

AppFunctions कैसे काम करती हैं

AppFunctions, Android 16 प्लैटफ़ॉर्म की एक सुविधा है. साथ ही, यह Jetpack लाइब्रेरी भी है. इसकी मदद से ऐप्लिकेशन, कॉल करने वालों के लिए कुछ खास फ़ंक्शन उपलब्ध करा सकते हैं. जैसे, एजेंट ऐप्लिकेशन को डिवाइस पर ऐक्सेस और इस्तेमाल करने की अनुमति देना.

इस डायग्राम में, ऐप्लिकेशन से एजेंट को AppFunctions शेयर करने और उन्हें लागू करने का सामान्य फ़्लो दिखाया गया है. उपयोगकर्ता के अनुरोधों को मैनेज करते समय, एजेंट सर्वर-साइड रिमोट एमसीपी टूल और लोकल AppFunctions, दोनों का इस्तेमाल कर सकते हैं. ऐप्लिकेशन के लोकल फ़ंक्शन इस्तेमाल करने का पूरा फ़्लो यहां दिया गया है:

  • AppFunction का एलान: Android ऐप्लिकेशन को इस तरह से बनाया जाता है कि वह "नोट बनाएं" या "मैसेज भेजें" जैसे AppFunction को दिखा सके.
  • स्कीमा जनरेशन: AppFunctions Jetpack लाइब्रेरी, एक एक्सएमएल स्कीमा फ़ाइल जनरेट करती है. इस फ़ाइल में, ऐप्लिकेशन में मौजूद सभी AppFunctions की सूची होती है. Android OS इस फ़ाइल का इस्तेमाल, उपलब्ध AppFunctions को इंडेक्स करने के लिए करता है.
  • मेटाडेटा वापस पाना: एजेंट, AppFunction के मेटाडेटा को वापस पा सकता है. इसके लिए, उसे क्वेरी करनी होगी.
  • AppFunction को चुनना और उसे लागू करना: उपयोगकर्ता के प्रॉम्प्ट के आधार पर, एजेंट सही पैरामीटर के साथ सही AppFunction को चुनेगा और उसे लागू करेगा.
इस डायग्राम में, ऐप्लिकेशन के दिखने से लेकर एजेंट के काम करने तक, AppFunctions के सामान्य फ़्लो को दिखाया गया है.
पहली इमेज: इसमें दिखाया गया है कि 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)
    }
}