কীভাবে করবেন

বুদ্ধিমান অ্যান্ড্রয়েড অ্যাপ তৈরি করুন: AppFunctions ব্যবহার করে অ্যান্ড্রয়েডের ইন্টেলিজেন্স সিস্টেমের সাথে একীভূত হন।

৬ মিনিটের পাঠ
বেন ওয়েইসের প্রোফাইল দেখুন
Ben Weiss ডেভেলপার সম্পর্ক প্রকৌশলী

" বুদ্ধিমান অ্যান্ড্রয়েড অ্যাপ তৈরি করুন " ব্লগ পোস্ট সিরিজে আপনাকে আবার স্বাগত জানাই, যেখানে আমরা একটি সাধারণ অ্যান্ড্রয়েড অ্যাপকে ব্যক্তিগতকৃত, বুদ্ধিমান এবং সক্রিয় অভিজ্ঞতায় রূপান্তরিত করি। আমাদের আগের পোস্টে , আমরা ক্লাউড-হোস্টেড এবং হাইব্রিড এআই ফিচার তৈরি করতে কীভাবে ফায়ারবেস এআই লজিক ব্যবহার করা যায় তা আলোচনা করেছি।

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

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

এআই-উপযোগী ফিচার ডিজাইন করা: আপনার ব্যবহারকারীদের জন্য গুরুত্বপূর্ণ সিদ্ধান্ত গ্রহণ

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

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

আমরা ভ্রমণসূচী ব্যবস্থাপনাকেও অগ্রাধিকার দিয়েছি। একটি ব্যস্ত ভ্রমণসূচীতে পরবর্তী কার্যকলাপ কী তা খুঁজে বের করতে সাধারণত একটি ঘন টাইমলাইন ভিউ স্ক্রল করতে হয়। সিস্টেমে getItinerary এবং addItineraryEvent যুক্ত করার ফলে, ব্যবহারকারী কেবল জিজ্ঞাসা করতে পারেন, "প্যারিসে আমি এরপর কী করছি?" এবং তাৎক্ষণিক উত্তর পেয়ে যেতে পারেন।

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

অ্যাপফাংশন দ্বারা চালিত অ্যান্ড্রয়েড এমসিপি

এই সম্পূর্ণ অভিজ্ঞতাটি অ্যান্ড্রয়েড এমসিপি (Android MCP)-এর উপর ভিত্তি করে নির্মিত। এই নকশা অনুযায়ী, অ্যাপটি একটি স্থানীয় এমসিপি সার্ভার হিসেবে কাজ করে। রিমোট এপিআই (API)-এর পরিবর্তে, আপনি আপনার অ্যাপের ফিচারগুলো সরাসরি ডিভাইসের ইন্টেলিজেন্স সিস্টেমে সরবরাহ করেন।

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

অ্যান্ড্রয়েড এমসিপি ডায়াগ্রাম.png
এই ডায়াগ্রামটি তুলে ধরেছে কীভাবে আমাদের অ্যাপ, অ্যান্ড্রয়েড প্ল্যাটফর্ম এবং সিস্টেম এজেন্টগুলো অ্যাপফাংশনগুলোকে সমন্বয় করে।

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

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

অ্যান্ড্রয়েড দক্ষতার মাধ্যমে আমরা কীভাবে উন্নয়নকে ত্বরান্বিত করেছি

ইন্টিগ্রেশন প্রক্রিয়াকে সুবিন্যস্ত করতে, আমরা AppFunctions ডেভেলপমেন্ট স্কিলটির সাহায্য নিয়েছি। AppFunctions ডেভেলপমেন্ট স্কিলটি একটি সম্পূর্ণ ডেভেলপমেন্ট সহায়ক। এটি আমাদেরকে এর সম্পূর্ণ জীবনচক্র জুড়ে পথ দেখিয়েছে: প্যারামিটার সিরিয়ালাইজ করার জন্য কোটলিন ডেটা ক্লাস ম্যাপ করা, প্রয়োজনীয় Service এন্ট্রি পয়েন্ট তৈরি করা, LLM যাতে প্যারামিটারের সীমানা বুঝতে পারে তা নিশ্চিত করার জন্য আমাদের KDoc ডকুমেন্টেশন পরিমার্জন করা, এবং ADB ব্যবহার করে স্বয়ংক্রিয় টেস্টিং সেট আপ করা।

ইন্টেলিজেন্স সিস্টেমে অ্যাপের বৈশিষ্ট্য সরবরাহ করা

অনেক তত্ত্বকথা হলো, এবার বাস্তবায়নে আসা যাক।

কনফিগারেশন এবং নির্ভরতা সেটআপ

আমরা প্রথমে AppFunctions ডিপেন্ডেন্সিগুলো যোগ করার মাধ্যমে শুরু করি। একটি API-এর জন্য এবং অন্যটি Kotlin Symbol Processing কম্পাইলারের জন্য।

implementation("androidx.appfunctions:appfunctions:1.0.0-alpha10")
ksp("androidx.appfunctions:appfunctions-compiler:1.0.0-alpha10")

কাস্টম ডেটা টাইপ মডেলিং

এজেন্টের সাথে আদান-প্রদান করা যেকোনো কাস্টম অবজেক্টকে অবশ্যই @AppFunctionSerializable দিয়ে অ্যানোটেট করতে হবে। আমাদের TripSerializable.kt ফাইলে, আমরা আমাদের ট্রিপ ডেটা মডেল সংজ্ঞায়িত করি:

@AppFunctionSerializable(isDescribedByKDoc = true)
data class TripSerializable(
    /** The trip's unique identifier. */
    val id: String,
    /** The trip's title. */
    val title: String,
    /** The trip's destination location. */
    val location: String,
    /** The trip's start date in milliseconds. */
    val startDate: Long,
    /** The trip's end date in milliseconds. */
    val endDate: Long,
    /** A list of participants. */
    val participants: List<String>,
)

@AppFunction অ্যানোটেশন ব্যবহার করে ফিচার প্রদান করা

এরপর, স্কিলটি ডাটাবেস কোয়েরিগুলো সম্পাদনকারী কোটলিন ফাংশনগুলো লিখেছে এবং সেগুলোকে @AppFunction দিয়ে অ্যানোটেট করেছে। আমরা এটি searchTrip-এ দেখতে পারি:

/**
 * Looks for trips based on optional filters like id, title (name), location, and dates.
 *
 * @param id The unique identifier of the trip.
 * @param title The title or name of the trip.
 * @param location The destination location.
 * @param startDate The minimum start date in milliseconds.
 * @param endDate The maximum end date in milliseconds.
 * @return A list of trips matching the filters.
 */
@AppFunction(isDescribedByKDoc = true)
suspend fun searchTrip(
    id: String? = null,
    title: String? = null,
    location: String? = null,
    startDate: Long? = null,
    endDate: Long? = null
): List<TripSerializable> {
    return withContext(Dispatchers.IO) {
    // implementation
}

যেহেতু AppFunction-গুলো ডিফল্টভাবে UI থ্রেডে চলে, তাই আমরা একটি ব্যাকগ্রাউন্ড ডিসপ্যাচারে স্যুইচ করার জন্য withContext(Dispatchers.IO) ব্যবহার করি। এছাড়াও, আমরা আমাদের KDoc-কে পরিমার্জন করে স্পষ্ট ও নির্দেশমূলক ক্রিয়াপদ ব্যবহার করেছি এবং প্যারামিটারের সীমাবদ্ধতা নির্দিষ্ট করেছি। এই ডকুমেন্টেশনটি সরাসরি টুলটির স্কিমাতে কম্পাইল হয়ে যায়, যা প্রিভিলেজড এজেন্ট প্যারামিটার রিজলভ করতে এবং রানটাইম এরর সামলাতে ব্যবহার করে।

পরিষেবা প্রবেশ বিন্দু এবং হিল্ট ইন্টিগ্রেশন

ইন্টেলিজেন্স সিস্টেমে এই ফিচারগুলো রেজিস্টার করার জন্য, আমরা একটি অ্যাবস্ট্রাক্ট বেস ক্লাস তৈরি করি যা AppFunctionService এক্সটেন্ড করে। আমরা এটিকে @AppFunctionServiceEntryPoint দিয়ে অ্যানোটেট করি:

@RequiresApi(36)
@AndroidEntryPoint
@AppFunctionServiceEntryPoint(
    serviceName = "JetPackerAppFunctionService",
    appFunctionXmlFileName = "jetpacker_app_function_service"
)
abstract class BaseJetPackerAppFunctionService : AppFunctionService() {
    @Inject internal lateinit var tripDao: TripDao
    // DAOs and database references are injected here...
}

কম্পাইলেশনের সময়, KSP, serviceName প্যারামিটার দিয়ে ঘোষিত চূড়ান্ত কনক্রিট সার্ভিস সাবক্লাস, JetPackerAppFunctionService , তৈরি করে। এছাড়াও আমরা অ্যাপের ম্যানিফেস্টে app_metadata.xml ফাইলটি রেজিস্টার করি। এই ফাইলটি JetPacker-এর ঘোষিত AppFunction-গুলোর জন্য বৈশ্বিক পরিচালন নিয়মাবলী প্রদান করে।

আপনার অ্যাপফাংশনগুলি পরীক্ষা এবং যাচাই করা

একবার প্রয়োগ করা হয়ে গেলে, আপনার AppFunction-গুলো নিবন্ধিত হয়েছে এবং সঠিকভাবে কাজ করছে কিনা তা যাচাই করে নেওয়া উচিত।

অ্যান্ড্রয়েড ১৭ বা তার পরবর্তী সংস্করণের ডিভাইস বা এমুলেটরে, আপনি আপনার টার্মিনাল থেকে ADB কমান্ড ব্যবহার করে আপনার ফাংশনগুলো তালিকাভুক্ত করতে এবং চালু করতে পারেন। adb shell cmd app_function list-app-functions চালালে আপনার প্যাকেজের জন্য নিবন্ধিত সমস্ত ফাংশন প্রদর্শিত হবে। এরপর, একটি র JSON প্যারামিটার স্ট্রিং পাস করে adb shell cmd app_function execute-app-function চালানোর মাধ্যমে আপনি একটি নির্দিষ্ট ফাংশন এক্সিকিউট করতে এবং এর ডাটাবেস ইন্টিগ্রেশন পরীক্ষা করতে পারেন।

এই ADB কমান্ডগুলোর পরিবর্তে, আপনি AppFunctions Testing Agent ব্যবহার করে আপনার কনফিগারেশন পরীক্ষা করতে, AppFunction-গুলো তালিকাভুক্ত ও কার্যকর করতে, এবং এমনকি একটি বাস্তব কথোপকথন প্রবাহে আপনার AppFunction-গুলো কীভাবে কাজ করে তাও দেখতে পারেন।

শেষ করা হচ্ছে

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

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

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

আরও জানুন

এই ব্লগ পোস্ট সিরিজের অন্যান্য পর্বগুলো দেখে নিন:
পর্ব ১: অ্যাপটির পরিচিতি এবং একটি সামগ্রিক সংক্ষিপ্ত বিবরণ।
পর্ব ২: ডিভাইস-ভিত্তিক বুদ্ধিমত্তা। ভ্রমণসূচির সারাংশ, রসিদ বিশ্লেষণ এবং স্থানীয় অডিও প্রক্রিয়াকরণের মতো গোপনীয়তা-কেন্দ্রিক বৈশিষ্ট্য তৈরি করতে এমএল কিট-এর জেনএআই এপিআই এবং জেমিনি ন্যানো-র গভীরে প্রবেশ করুন।
পর্ব ৩: হাইব্রিড এবং ক্লাউড রিজনিং। গুগল ম্যাপস এবং ওয়েব কনটেক্সটের মতো বাস্তব-জগতের ডেটার ওপর ভিত্তি করে এলএলএম (LLM) উত্তর তৈরিতে কীভাবে ফায়ারবেস এআই লজিক (Firebase AI Logic) ব্যবহার করা যায়, তা জানুন।
পর্ব ৪ (এই পোস্টে!): সিস্টেম ইন্টিগ্রেশন। অ্যাপফাংশন ব্যবহার করে অ্যান্ড্রয়েড ইন্টেলিজেন্স সিস্টেমের সাথে ইন্টিগ্রেট করা।
পর্ব ৫ (শীঘ্রই আসছে): অ্যাপের মধ্যেই এজেন্টিক ওয়ার্কফ্লো। A2UI এবং ADK দ্বারা চালিত একটি এন্ড-টু-এন্ড বুকিং অ্যাসিস্ট্যান্টের মাধ্যমে অ্যাপটিকে আরও উন্নত করুন।

অ্যান্ড্রয়েড ডেভেলপমেন্ট সম্পর্কে আরও জানতে আগ্রহী? ইউটিউব বা লিঙ্কডইন- এ অ্যান্ড্রয়েড ডেভেলপারদের অনুসরণ করুন!

এই ব্লগ পোস্টের সমস্ত কোড স্নিপেট নিম্নলিখিত কপিরাইট বিজ্ঞপ্তি অনুসরণ করে:

Copyright 2026 Google LLC.
SPDX-License-Identifier: Apache-2.0
লিখেছেন:
পড়তে থাকুন