অ্যাপফাংশনগুলির সংক্ষিপ্ত বিবরণ

AppFunctions হলো একটি অ্যান্ড্রয়েড প্ল্যাটফর্ম এপিআই, যার সাথে অ্যান্ড্রয়েড এমসিপি ইন্টিগ্রেশন সহজ করার জন্য একটি জেটপ্যাক লাইব্রেরি রয়েছে। এটি আপনার অ্যাপগুলোকে ডিভাইসের এমসিপি সার্ভারের মতো আচরণ করতে সক্ষম করে এবং এমন সব ফাংশন সরবরাহ করে যা গুগল জেমিনির মতো এজেন্ট ও অ্যাসিস্ট্যান্টের পাশাপাশি প্রোঅ্যাকটিভ ফিচারগুলোর জন্য টুল হিসেবে কাজ করে। ২০২৬ সালের মে মাস পর্যন্ত, জেমিনির সাথে AppFunctions-এর ইন্টিগ্রেশন বিশ্বস্ত পরীক্ষকদের জন্য একটি প্রাইভেট প্রিভিউ পর্যায়ে রয়েছে। আপনি এখন থেকেই AppFunctions এবং ডেভেলপমেন্ট টুলগুলো ব্যবহারের জন্য আপনার অ্যাপ প্রস্তুত করা শুরু করতে পারেন।

এই AppFunction-গুলো সংজ্ঞায়িত করার মাধ্যমে, আপনি আপনার অ্যাপকে অ্যান্ড্রয়েড ওএস-এর অন্তর্নির্মিত রেজিস্ট্রি-তে পরিষেবা, ডেটা এবং অ্যাকশন সরবরাহ করার সুযোগ করে দেন, যা ব্যবহারকারীদের এজেন্ট এবং সিস্টেম-স্তরের ইন্টারঅ্যাকশনের মাধ্যমে বিভিন্ন কাজ সম্পন্ন করতে সাহায্য করে।

অ্যাপফাংশনগুলো মডেল কনটেক্সট প্রোটোকল (MCP)- এর টুলগুলোর মোবাইল সংস্করণ হিসেবে কাজ করে। যেখানে MCP ঐতিহ্যগতভাবে এজেন্টদের সার্ভার-সাইড টুলের সাথে সংযোগ স্থাপনের পদ্ধতিকে মানসম্মত করে, সেখানে অ্যাপফাংশনগুলো অ্যান্ড্রয়েড অ্যাপের জন্য একই প্রক্রিয়া সরবরাহ করে। এটি আপনাকে আপনার অ্যাপের সক্ষমতাগুলোকে অর্কেস্ট্রেশনযোগ্য "টুল" হিসেবে প্রকাশ করতে দেয়, যা অনুমোদিত অ্যাপগুলো (কলার) ব্যবহারকারীর উদ্দেশ্য পূরণের জন্য খুঁজে বের করতে এবং কার্যকর করতে পারে। অ্যাপফাংশন খুঁজে বের করতে এবং কার্যকর করতে কলারদের অবশ্যই EXECUTE_APP_FUNCTIONS পারমিশন থাকতে হবে এবং এর মধ্যে এজেন্ট, অ্যাপ এবং জেমিনির মতো এআই অ্যাসিস্ট্যান্ট অন্তর্ভুক্ত থাকতে পারে।

AppFunctions অ্যান্ড্রয়েড ১৬ বা তার পরবর্তী সংস্করণের ডিভাইসগুলোতে উপলব্ধ।

ব্যবহারের উদাহরণ

অ্যাপফাংশনগুলো কাজ স্বয়ংক্রিয় করতে এবং ব্যবহারকারীর মিথস্ক্রিয়াকে সহজ করতে একটি শক্তিশালী ব্যবস্থা প্রদান করে। আপনার অ্যাপের সক্ষমতা উন্মুক্ত করার মাধ্যমে, আপনি ব্যবহারকারীদের স্বাভাবিক ভাষা ব্যবহার করে জটিল লক্ষ্য অর্জন করতে সক্ষম করেন, যা প্রায়শই আপনার ইউআই-এর মধ্যে ধাপে ধাপে ম্যানুয়াল নেভিগেশনের প্রয়োজনীয়তা দূর করে।

নিম্নলিখিত পরিস্থিতিগুলো তুলে ধরে যে কীভাবে বিভিন্ন ধরণের অ্যাপ ক্যাটাগরির মধ্যে অভিজ্ঞতা চালনা করতে অ্যাপফাংশন ব্যবহার করা যেতে পারে:

  • কাজ ব্যবস্থাপনা এবং উৎপাদনশীলতা

    • ব্যবহারকারীর অনুরোধ : " আজ বিকাল ৫টায় কর্মস্থল থেকে আমার পার্সেলটি নিয়ে নেওয়ার জন্য আমাকে মনে করিয়ে দেবেন ।"
    • অ্যাপফাংশন অ্যাকশন : কলার প্রাসঙ্গিক টাস্ক ম্যানেজমেন্ট অ্যাপটি শনাক্ত করে এবং একটি টাস্ক তৈরি করার জন্য একটি ফাংশন কল করে, যা ব্যবহারকারীর প্রম্পটের উপর ভিত্তি করে শিরোনাম, সময় এবং অবস্থান ফিল্ডগুলি স্বয়ংক্রিয়ভাবে পূরণ করে।
    /**
    *   Create a new task or reminder with a title, due time, and location.
    *
    *   @param context The execution context provided by the system.
    *   @param title The descriptive title of the task (e.g., "Pick up my package").
    *   @param dueDateTime The specific date and time when the task should be completed.
    *   @param location The physical location associated with the task (e.g., "Work").
    *   @return The created Task
    */
    @AppFunction(isDescribedByKDoc = true)
    suspend fun createTask(
        context: AppFunctionContext,
        title: String,
        dueDateTime: LocalDateTime? = null,
        location: String? = null
    ) : Task
    
  • মিডিয়া এবং বিনোদন

    • ব্যবহারকারীর অনুরোধ : " এই বছরের সেরা জ্যাজ অ্যালবামগুলো দিয়ে একটি নতুন প্লেলিস্ট তৈরি করুন "।
    • AppFunction action : কলার একটি মিউজিক অ্যাপের মধ্যে প্লেলিস্ট তৈরির ফাংশনটি কার্যকর করে, এবং প্লেলিস্টটি তাৎক্ষণিকভাবে তৈরি করার জন্য কোয়েরি হিসেবে "২০২৬ সালের সেরা জ্যাজ অ্যালবাম"-এর মতো কনটেক্সট পাস করে।
    /**
    *   Create a new music playlist based on a natural language query.
    *
    *   @param context The execution context provided by the system.
    *   @param query The description used to generate the playlist (e.g., "top jazz albums from 2026").
    *   @return The final created playlist based on songs.
    */
    @AppFunction(isDescribedByKDoc = true)
    suspend fun createPlaylistFromQuery(
        context: AppFunctionContext,
        query: String
    ): Playlist
    
  • ক্রস-অ্যাপ ওয়ার্কফ্লো

    • ব্যবহারকারীর অনুরোধ : " লিসার ইমেল থেকে নুডলসের রেসিপিটি খুঁজে বের করুন এবং উপকরণগুলো আমার কেনাকাটার তালিকায় যোগ করুন "।
    • অ্যাপফাংশন অ্যাকশন : এই অনুরোধটি একাধিক অ্যাপের ফাংশন ব্যবহার করে। প্রথমে, কলার একটি ইমেল অ্যাপের সার্চ ফাংশন ব্যবহার করে বিষয়বস্তু সংগ্রহ করে। তারপর, এটি প্রাসঙ্গিক উপাদানগুলো বের করে এবং ব্যবহারকারীর তালিকাটি পূরণ করার জন্য একটি শপিং লিস্ট অ্যাপের ফাংশন চালু করে।
    /**
    *   Search for emails matching a query or sender name to retrieve content like recipes.
    *
    *   @param context The execution context provided by the system.
    *   @param query The search term or contact name (e.g., "Lisa noodle recipe").
    *   @return A list of matching email summaries containing the requested information.
    */
    @AppFunction(isDescribedByKDoc = true)
    suspend fun searchEmails(
        context: AppFunctionContext,
        query: String
    ): List<EmailSummary>
    
    /**
    *   Add a list of items or ingredients to the user's active shopping list.
    *
    *   @param context The execution context provided by the system.
    *   @param items The names of the ingredients or products to add to the list.
    *   @return The final shopping list with new items added
    */
    @AppFunction(isDescribedByKDoc = true)
    suspend fun addItemsToShoppingList(
        context: AppFunctionContext,
        items: List<String>
    ): ShoppingList
    
  • ক্যালেন্ডার এবং সময়সূচী

    • ব্যবহারকারীর অনুরোধ : " আগামী সোমবার সন্ধ্যা ৬টায় মায়ের জন্মদিনের পার্টিটি আমার ক্যালেন্ডারে যোগ করুন "।
    • অ্যাপফাংশন অ্যাকশন : অনুমোদিত এজেন্টিক অ্যাপটি ক্যালেন্ডার অ্যাপের "ক্রিয়েট ইভেন্ট" ফাংশনটি কল করে এবং "নেক্সট মানডে" ও "সন্ধ্যা ৬টা"-র মতো প্রাসঙ্গিক তথ্য পার্স করে এন্ট্রিটি তৈরি করে, যার ফলে ব্যবহারকারীকে ম্যানুয়ালি ক্যালেন্ডার খুলতে হয় না।
    /**
    *   Schedule a new event on the user's primary calendar.
    *
    *   @param context The execution context provided by the system.
    *   @param title The name of the calendar event (e.g., "Mom's birthday party").
    *   @param startDateTime The specific date and time the event is scheduled to begin.
    *   @return The created Event object.
    */
    @AppFunction(isDescribedByKDoc = true)
    suspend fun createCalendarEvent(
        context: AppFunctionContext,
        title: String,
        startDateTime: LocalDateTime
    ): Event
    

অ্যাপফাংশনগুলি কীভাবে কাজ করে

নিম্নলিখিত ডায়াগ্রামটি দেখায় যে কীভাবে অ্যাপগুলি একটি এজেন্টের কাছে AppFunction শেয়ার করে এবং পরবর্তীতে তা কার্যকর করে। ব্যবহারকারীর অনুরোধগুলি পরিচালনা করার সময় এজেন্টরা সম্ভবত সার্ভার-সাইড রিমোট MCP টুল এবং স্থানীয় AppFunction উভয়কেই একসাথে বিবেচনা করে। স্থানীয় AppFunction ব্যবহার করার বিস্তারিত কার্যপ্রবাহটি নিম্নরূপ:

  • অ্যাপফাংশন ঘোষণা : অ্যান্ড্রয়েড অ্যাপটি তার বৈশিষ্ট্যগুলি, যেমন "নোট তৈরি করুন" বা "বার্তা পাঠান", উপলব্ধ করার জন্য অ্যাপফাংশন ব্যবহার করে তৈরি করা হয়েছে।
  • স্কিমা তৈরি : AppFunctions Jetpack লাইব্রেরি একটি XML স্কিমা ফাইল তৈরি করে, যেখানে অ্যাপের মধ্যে ঘোষিত সমস্ত AppFunction-এর তালিকা থাকে। অ্যান্ড্রয়েড অপারেটিং সিস্টেম উপলব্ধ AppFunction-গুলোকে সূচীবদ্ধ করতে এই ফাইলটি ব্যবহার করে।
  • মেটাডেটা পুনরুদ্ধার : এজেন্ট কোয়েরি করার মাধ্যমে অ্যাপফাংশন মেটাডেটা পুনরুদ্ধার করতে পারে।
  • অ্যাপফাংশন নির্বাচন ও সম্পাদন : ব্যবহারকারীর নির্দেশনার ভিত্তিতে, এজেন্ট যথাযথ প্যারামিটারসহ উপযুক্ত অ্যাপফাংশনটি নির্বাচন ও সম্পাদন করে।
সাধারণ অ্যাপফাংশনগুলো অ্যাপ এক্সপোজার থেকে এজেন্ট এক্সিকিউশন পর্যন্ত প্রবাহিত হয়।
চিত্র ১ : একটি এজেন্ট দ্বারা অ্যাপফাংশনগুলো কীভাবে প্রকাশিত এবং পরবর্তীতে সম্পাদিত হয় তার সাধারণ কার্যপ্রবাহ।

AppFunctions Jetpack লাইব্রেরি আপনার অ্যাপের কার্যকারিতা প্রকাশ করাকে সহজ করে তোলে। অ্যানোটেশন প্রসেসরের সাহায্যে, আপনি এজেন্টদের জন্য উপলব্ধ করতে চান এমন ফাংশনগুলোকে অ্যানোটেট করেন। এরপর কলাররা AppFunctionManager ব্যবহার করে এই ইনডেক্স করা ফাংশনগুলো খুঁজে বের করতে এবং কল করতে পারে।

কোনো ফাংশন কল করার আগে, কলারদের AppFunctionManager এর একটি ইনস্ট্যান্স পুনরুদ্ধার করার চেষ্টা করে যাচাই করে নেওয়া উচিত যে ডিভাইসটি AppFunctions ফিচারটি সমর্থন করে কি না। একবার সমর্থিত হলে, কলাররা isAppFunctionEnabled(packageName,functionId) ব্যবহার করে টার্গেট অ্যাপের মধ্যে একটি নির্দিষ্ট ফাংশন সক্রিয় আছে কি না তা যাচাই করতে পারে। অন্যান্য প্যাকেজের ফাংশনগুলির অবস্থা জানতে android.permission.EXECUTE_APP_FUNCTIONSpermission এর প্রয়োজন হয়।

আপনার অ্যাপের AppFunction ফিচারটি সমর্থিত কিনা তা যাচাই করার প্রয়োজন নেই; এটি Jetpack লাইব্রেরির মধ্যেই স্বয়ংক্রিয়ভাবে সম্পন্ন হয়। উদাহরণস্বরূপ, AppFunctionManager ফিচারটি সমর্থিত কিনা তা যাচাই করতে পারে।

এখানে একটি নোট-নেওয়ার অ্যাপের AppFunction-এর উদাহরণ দেওয়া হলো, যেটিতে নোট তৈরি, সম্পাদনা এবং তালিকাভুক্ত করার সুবিধা রয়েছে:

/**
 * 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
)

প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী (FAQs)

নিম্নলিখিত বিভাগে অ্যাপফাংশন সম্পর্কে প্রায়শই জিজ্ঞাসিত প্রশ্নগুলির উত্তর দেওয়া হয়েছে।

আমি একজন অ্যাপ ডেভেলপার। আমি কি আজ অ্যাপফাংশনগুলো প্রয়োগ করতে পারি?

হ্যাঁ, পূর্ববর্তী বিভাগগুলিতে বিস্তারিত নির্দেশিকা অনুসরণ করে আপনার অ্যাপের মধ্যে AppFunctions প্রয়োগ এবং পরীক্ষা করা সম্ভব।

AppFunctions এবং MCP-এর মধ্যে পার্থক্য কী?

উভয়ই এআই এজেন্টদের টুল পরিচালনা করতে দেয়, কিন্তু তাদের আর্কিটেকচার, ল্যাটেন্সি এবং প্রয়োজনীয় ডেভেলপার প্রচেষ্টার ক্ষেত্রে উল্লেখযোগ্য পার্থক্য রয়েছে। অ্যাপফাংশন হলো অ্যান্ড্রয়েডের নিজস্ব বিল্ট-ইন ওএস-লেভেল হুক যা স্থানীয়ভাবে এক্সিকিউট হয়। এর বিপরীতে, একটি স্ট্যান্ডার্ড এমসিপি সার্ভার হলো একটি প্ল্যাটফর্ম-অ্যাগনস্টিক সমাধান যা ক্লাউড এক্সিকিউশন এবং নেটওয়ার্ক রাউন্ড-ট্রিপের উপর নির্ভর করে।

সংক্ষেপে, AppFunctions ব্যবহার করে ডেভেলপ করার মাধ্যমে আপনি সরাসরি ডিভাইসেই অ্যাপের বিদ্যমান স্টেট ব্যবহার করতে পারেন এবং এর জন্য আপনার অ্যান্ড্রয়েড অ্যাপের বাইরে কোনো সার্ভিস রক্ষণাবেক্ষণ করার প্রয়োজন হয় না।

আমি আমার অ্যাপে AppFunctions প্রয়োগ করেছি। তাহলে আমার সিস্টেম এজেন্ট কেন সেগুলো অ্যাক্সেস করতে পারছে না?

অ্যাপফাংশন একটি পরীক্ষামূলক ফিচার। এই পরীক্ষামূলক পর্যায়ে সামগ্রিক অভিজ্ঞতার মান সতর্কতার সাথে মূল্যায়ন করার জন্য, শুধুমাত্র সীমিত সংখ্যক অ্যাপ এবং সিস্টেম এজেন্ট সম্পূর্ণ পাইপলাইনটি অ্যাক্সেস করতে পারবে।

AppFunctions-এর সাধারণ উপলব্ধির জন্য আমি আমার অ্যাপটিকে কীভাবে প্রস্তুত করতে পারি?

আপনার অ্যাপের কোন ফিচারগুলো আপনি এজেন্টিক অটোমেশনের আওতায় আনতে চান, তা বিবেচনা করুন। আপনি আপনার অ্যাপে অ্যাপফাংশন (AppFunctions) প্রয়োগ করতে পারেন। এটি করার জন্য, এই পৃষ্ঠার পূর্ববর্তী বিভাগগুলোর ধাপগুলো অনুসরণ করুন এবং adb shell cmd app_function list-app-functions . কল করে যাচাই করুন যে সেগুলো ডিভাইসে নিবন্ধিত হয়েছে।

আমি কি এন্ড-টু-এন্ড এজেন্টিক ডেভেলপার এক্সপেরিয়েন্সে আগেভাগে অ্যাক্সেস পেতে পারি?

অ্যান্ড্রয়েডে AppFunctions-কে প্রোডাকশনে চালু করার জন্য প্রয়োজনীয় এন্ড-টু-এন্ড ডেভেলপার এক্সপেরিয়েন্স পরীক্ষা করার উদ্দেশ্যে আমরা একটি আর্লি অ্যাক্সেস প্রোগ্রাম (EAP) পরিচালনা করছি। আপনি এই EAP রেজিস্ট্রেশন ফর্মের মাধ্যমে আপনার AppFunctions ইন্টিগ্রেট করার জন্য আগ্রহ প্রকাশ করতে পারেন। আগ্রহ প্রকাশ করলেই আপনি স্বয়ংক্রিয়ভাবে সম্পূর্ণ ইন্টিগ্রেশনের অ্যাক্সেস পাবেন না। আপনার অ্যাপটি EAP-এর জন্য নির্বাচিত হলে, অথবা AppFunctions সর্বসাধারণের জন্য উপলব্ধ হলে আমরা আপনাকে ইমেল করে জানাব।

আমি AppFunctions সম্পর্কে কীভাবে মতামত জানাতে পারি?

আপনি একটি সমস্যা দাখিল করে এবং আর্লি অ্যাক্সেস প্রোগ্রাম ফর্মে আপনার আগ্রহ নিবন্ধন করে এপিআই (API) সম্পর্কে মতামত জানাতে পারেন।