Microsoft Teams ডেভেলপারদের সতর্ক করা হচ্ছে যে, প্রতিটি এক্সটেনশনকে "bot" হিসেবে অভিহিত করা এখন প্রোডাকশন-গ্রেড ব্যর্থতার কারণ হয়ে দাঁড়াচ্ছে। ২০২৬ সালে প্ল্যাটফর্মের নিজস্ব সীমাবদ্ধতা—একটি মেসেজের উত্তর দেওয়ার জন্য ১০ থেকে ১৫ সেকেন্ডের সময়সীমা—ভুলভাবে ডিজাইন করা বটগুলোকে 'টাইমআউট স্টর্ম'-এ পরিণত করবে, যা টিমগুলোকে তাদের পাইপলাইন পুনরায় ডিজাইন করতে বাধ্য করবে।
কেন এই পার্থক্যটি গুরুত্বপূর্ণ
Teams তিনটি এক্সটেনশন টাইপ অফার করে, যার প্রতিটি ভিন্ন ভিন্ন ইন্টারঅ্যাকশন প্যাটার্নের জন্য তৈরি। এগুলোকে মিশ্রিত করলে ভুল রানটাইম, ভুল SDK এবং ভুল স্কেলিং মডেল ব্যবহারের বাধ্যবাধকতা তৈরি হয়।
Teams apps, bots, এবং agents – এগুলো আসলে কী
- Teams apps – Teams ক্লায়েন্টের ভেতরে সারফেস ট্যাব, স্ট্যাটিক পেজ বা সাধারণ UI কম্পোনেন্ট। এগুলো মূলত ওয়েব অ্যাপ: স্টেটলেস (stateless), অন-ডিমান্ড রেন্ডার করা হয় এবং অন্য যেকোনো HTTP সার্ভিসের মতো হোস্ট করা হয়। এখানে কোনো কনভারসেশনাল ফ্লো প্রত্যাশিত নয়।
- Bots – Bot Framework SDK দিয়ে তৈরি বটগুলো স্ক্রিপ্টেড ডায়ালগ অনুসরণ করে। এদের লজিক হলো একটি ডিটারমিনিস্টিক (deterministic) if/else ট্রি, যা শুধুমাত্র ইনকামিং অ্যাক্টিভিটির ওপর ভিত্তি করে পরবর্তী রিপ্লাই নির্ধারণ করে। যেহেতু সিদ্ধান্তের পথটি আগে থেকেই জানা থাকে, তাই এর রেসপন্স প্ল্যাটফর্মের স্বল্প সময়ের টাইমআউট উইন্ডোর মধ্যেই সম্পন্ন হয়।
- Agents – এগুলো লক্ষ্য-চালিত সত্তা (goal-driven entities) যা একটি উচ্চ-স্তরের উদ্দেশ্য (high-level objective), এক সেট টুলস এবং একটি LLM (large language model) গ্রহণ করে। Agents SDK বা Semantic Kernel ব্যবহার করে, LLM নির্ধারণ করে কোন টুলটি কল করতে হবে, কোন ক্রমে করতে হবে এবং কখন ব্যবহারকারীর কাছে স্পষ্টীকরণ চাইতে হবে। এর ফ্লো ডায়নামিক, যা প্রায়শই একাধিক এক্সটার্নাল কল এবং ভারী রিজনিং (reasoning) দাবি করে।
এই পার্থক্যটি অত্যন্ত স্পষ্ট: একটি বট হলো ডিটারমিনিস্টিক; অন্যদিকে একটি এজেন্ট হলো প্রোবাবিলিস্টিক (probabilistic) এবং এটি রানটাইমে টুল কলগুলো অর্কেস্ট্রেট করে।
টাইমআউট ট্র্যাপ
যখন ডেভেলপাররা একটি বটের মেসেজ হ্যান্ডলারের ভেতরে সরাসরি ভারী রিজনিং—যেমন LLM প্রম্পট, ডাটাবেস লুকআপ বা এক্সটার্নাল API কল—যুক্ত করেন, তখন Teams দেখে যে রিকোয়েস্টটি তার ১০-১৫ সেকেন্ডের উইন্ডোর বাইরে চলে গেছে। প্ল্যাটফর্মটি রেসপন্সটি বাতিল করে এবং পুনরায় চেষ্টা করে, যা ডুপ্লিকেট কাজ এবং থ্রটলিং (throttling)-এর মতো সমস্যা তৈরি করতে পারে। এর লক্ষণ হিসেবে মাঝে মাঝে “bot not responding” এরর দেখা দিতে পারে, কিন্তু এর মূল কারণ হলো আর্কিটেকচারাল।
একটি প্রোডাকশন-রেডি অ্যাসিঙ্ক্রোনাস (async) পাইপলাইন তৈরি করা
- Webhook entry point – বটের HTTP এন্ডপয়েন্ট Teams অ্যাক্টিভিটি গ্রহণ করে এবং সাথে সাথে প্রাপ্তি স্বীকার (acknowledge) করে।
- Queue the event – হ্যান্ডলারটি পেলোডটিকে Azure Service Bus-এর মতো একটি ডিউরেবল কিউতে (durable queue) পুশ করে।
- Background worker – একটি Azure Durable Function, Service Bus trigger, বা যেকোনো লং-রানিং ওয়ার্কার মেসেজটি গ্রহণ করে, LLM রিজনিং বা টুল অর্কেস্ট্রেশন সম্পন্ন করে এবং Bot Framework-এর proactive messaging API-এর মাধ্যমে Teams-এ চূড়ান্ত রিপ্লাইটি পাঠিয়ে দেয়।
যেহেতু প্রাথমিক ওয়েবহুকটি তাৎক্ষণিকভাবে রেসপন্স দেয়, তাই Teams কখনোই তার টাইমআউটে পৌঁছায় না এবং ভারী কাজগুলো নিজস্ব গতিতে চলতে থাকে। কিউটি স্পাইকগুলোকে (spikes) বাফার করে এবং ব্যাকলগের দৈর্ঘ্যের ওপর ভিত্তি করে ওয়ার্কারগুলো অটো-স্কেল হয়।
দ্রুত সিদ্ধান্ত নেওয়ার গাইড (হোয়াইটবোর্ড টেস্ট)
- আপনি কি কোনো কোড লেখার আগেই সম্পূর্ণ ডিসিশন ট্রি আঁকতে পারেন? হ্যাঁ → একটি বট তৈরি করুন। ডিটারমিনিস্টিক ফ্লো Bot Framework মডেলের সাথে সামঞ্জস্যপূর্ণ এবং রেসপন্স উইন্ডোর মধ্যেই থাকে।
- সমস্যাটি কি একটি উচ্চ-স্তরের লক্ষ্য এবং সম্ভাব্য টুলের তালিকা দ্বারা সংজ্ঞায়িত? হ্যাঁ → একটি এজেন্ট তৈরি করুন। LLM-কে পরিকল্পনা করতে এবং টুল কল করতে দিন; পরিকল্পনা করার কাজটি একটি ব্যাকগ্রাউন্ড ওয়ার্কারের ওপর ছেড়ে দিন।
পরবর্তীতে যা খেয়াল রাখতে হবে
এই নির্দেশিকাটি Azure-এ ইন্টেলিজেন্ট Teams সলিউশন তৈরি করা .NET 9 ডেভেলপারদের জন্য একটি সিরিজের প্রথম পর্ব।
আপনি যদি ইতিমধ্যে Teams লগ-এ “Bot timed out” এরর দেখতে পান, তবে সমাধানটি সহজ: ওয়েবহুককে ভারী কাজ থেকে আলাদা (decouple) করুন, একটি কিউ-চালিত (queue-driven) ওয়ার্কার গ্রহণ করুন এবং শুরু থেকেই সঠিক এক্সটেনশন টাইপ বেছে নিন। প্ল্যাটফর্মের একটি টাইমআউট সীমা আছে, কিন্তু আপনার আর্কিটেকচার সেটি এড়াতে পারে।
সারকথা: একটি Teams এক্সটেনশনকে ভুলবশত বট হিসেবে চিহ্নিত করা একটি সিনক্রোনাস ডিজাইনের বাধ্যবাধকতা তৈরি করে যা Teams বজায় রাখতে পারে না। রিকোয়েস্ট এবং রিজনিংকে আলাদা করুন, সঠিক SDK বেছে নিন, এবং আপনার Teams সলিউশনটি রেসপন্সিভ থাকবে, এমনকি এর পেছনের মস্তিষ্ক যদি একটি LLM-চালিত এজেন্টও হয়।
