Microsoft Foundry Agent Service-এর quickstart-টি Python-এর জন্য লেখা হয়েছে। এটি Azure-এর অভ্যন্তরীণ জটিলতাগুলোকে এমন ঘন কাঠামোর আড়ালে লুকিয়ে রাখে যে, কোন রিসোর্সগুলো আসলে তৈরি হয়েছে তা না জেনেই আপনি টিউটোরিয়ালটি শেষ করে ফেলতে পারেন। আপনি যদি .NET-এ কাজ করেন, তবে আপনি একটি প্রতিকূলতা নিয়ে শুরু করেন: স্যাম্পলগুলো ভুল দিক নির্দেশ করে, প্যাকেজের নামগুলো কোনো সতর্কতা ছাড়াই পরিবর্তিত হয়, এবং Azure AI Foundry থেকে Microsoft Foundry-তে সাম্প্রতিক রিব্র্যান্ডিংয়ের ফলে সার্চ রেজাল্টে দুটি ভিন্ন ডকুমেন্টেশন একে অপরের সাথে প্রতিযোগিতা করছে।

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

আপনার আসলে প্রয়োজনীয় চারটি রিসোর্স

একটি বেসিক Prompt Agent চালানোর জন্য আপনার ডজন ডজন Azure সার্ভিসের প্রয়োজন নেই। আপনার ঠিক চারটি জিনিস প্রয়োজন, এবং CLI সেগুলোকে এমনভাবে দৃশ্যমান করে যা Python notebooks-এ সম্ভব নয়।

প্রথমত, AIServices ধরনের একটি Foundry resource। এটি আপনার কল করা মডেলগুলোর জন্য প্যারেন্ট ক্যাপাসিটি হিসেবে কাজ করে। দ্বিতীয়ত, সেই রিসোর্সের ভেতরে একটি project। প্রজেক্ট হলো সেই স্কোপ যেখানে আপনার এজেন্ট ডেফিনিশন, কনভারসেশন থ্রেড এবং ডিপ্লয়মেন্ট সেটিংস থাকে। তৃতীয়ত, একটি deployed model। একটি সক্রিয় ডিপ্লয়মেন্ট ছাড়া, এজেন্টের কল করার জন্য কোনো এন্ডপয়েন্ট থাকে না। চতুর্থত, আপনার নিজের আইডেন্টিটির জন্য একটি role assignment, যাতে SDK প্রজেক্টের বিপরীতে অথেন্টিকেট করতে পারে।

ব্যস, এটুকুই। কোনো Kubernetes ক্লাস্টার নয়, কোনো কাস্টম কম্পিউট নয়, এমনকি কনভারসেশন হিস্ট্রির জন্য ম্যানুয়ালি ম্যানেজ করা Redis ক্যাশও প্রয়োজন নেই।

Prompt Agents বনাম Hosted Agents

Foundry আপনাকে এজেন্ট চালানোর জন্য দুটি উপায় দেয়। ডিফল্ট হিসেবে জটিল অপশনটি বেছে নেবেন না।

Prompt Agents হলো সহজ পথ। আপনি একটি মডেল বেছে নেন, সিস্টেম ইনস্ট্রাকশন লেখেন এবং Foundry আপনার হয়ে এজেন্টটি চালায়। আপনাকে কম্পিউট, কন্টেইনার বা রাউটিং লজিক ম্যানেজ করতে হবে না। এটি ইন্টারনাল টুলস, হেল্পডেস্ক বট এবং ডকুমেন্টের ওপর সরাসরি প্রশ্নোত্তর করার জন্য উপযুক্ত।

Hosted Agents-এর জন্য আপনাকে অ্যাপ্লিকেশন কোড লিখতে হবে, সেটিকে একটি কন্টেইনার হিসেবে প্যাকেজ করতে হবে এবং Foundry-এর সাথে যুক্ত করতে হবে। আপনি এই পথটি তখনই বেছে নেবেন যখন আপনার এমন কাস্টম বিজনেস লজিক প্রয়োজন হবে যা Foundry প্রম্পট এবং বিল্ট-ইন টুলের মাধ্যমে প্রকাশ করতে পারে না, যেমন নন-স্ট্যান্ডার্ড অথেন্টিকেশন সহ একটি ইন্টারনাল API কল করা।

এই গাইডটি Prompt Agents-এর ওপর আলোকপাত করে কারণ Docker ফাইল এবং অর্কেস্ট্রেশনে বিনিয়োগ করার আগে আপনার .NET সেটআপ সঠিক কিনা তা যাচাই করার জন্য এটি সবচেয়ে দ্রুততম উপায়।

কমান্ড লাইন থেকে সেটআপ করা

CLI ব্যবহার করলে আপনি প্রতিটি রিসোর্স দেখতে বাধ্য হন, যা ঠিক সেই জিনিসটি যা Python quickstart আড়াল করে রাখে। East US 2-তে একটি রিসোর্স গ্রুপ তৈরি করুন। এখানে অঞ্চলের (Region) পছন্দ অত্যন্ত গুরুত্বপূর্ণ। Foundry টুল সাপোর্ট অসমভাবে রিলিজ করে এবং বর্তমানে East US 2-তে সবচেয়ে বিস্তৃত সাপোর্ট রয়েছে। আপনি যদি এমন কোনো অঞ্চল বেছে নেন যেখানে code interpreter বা file search টুল নেই, তবে আপনার এজেন্ট তৈরির কলটি 'unsupported capabilities' সংক্রান্ত একটি অস্পষ্ট ত্রুটি (error) দিয়ে ব্যর্থ হবে।

--allow-project-management ফ্ল্যাগটি ব্যবহার করে Foundry resource তৈরি করুন। এই ফ্ল্যাগটি ছাড়া, রিসোর্সটি একটি স্ট্যান্ডঅ্যালোন cognitive services এন্ডপয়েন্ট হিসেবে থেকে যাবে এবং এজেন্টদের জন্য প্রয়োজনীয় প্রজেক্ট-স্কোপড ডিপ্লয়মেন্ট গ্রহণ করবে না। তারপর প্রজেক্ট তৈরি করুন, আপনার মডেল ডিপ্লয় করুন এবং নিজেকে Foundry User রোলটি অ্যাসাইন করুন।

ডিসপ্লে নামের পরিবর্তে স্ট্যাবল রোল GUID ব্যবহার করুন:

53ca6127-db72-4b80-b1b0-d745d6d5456d

টেন্যান্টের ওপর ভিত্তি করে Azure Active Directory-তে রোল নামগুলো বিভিন্ন গতিতে ছড়িয়ে পড়ে। কোনো সংস্থা আজ পোর্টালে Foundry User দেখতে পাবে; অন্য কোনো সংস্থা হয়তো কয়েক দিন এটি দেখতে পাবে না। GUID সরাসরি ডেফিনিশনের দিকে নির্দেশ করে এবং রোল রিলিজের সময় এটি ব্যর্থ হবে না। এই একটি ছোট তথ্য আপনাকে 'permission-denied' ত্রুটি ডিবাগ করার এক ঘণ্টার সময় বাঁচাতে পারে, যা দেখতে পলিসি সমস্যা মনে হলেও আসলে তা লেবেল-রেজোলিউশন সমস্যা।

ভুল NuGet প্যাকেজ এড়িয়ে চলুন

এখানেই .NET ডেভেলপাররা প্রায়ই আটকে যান। আপনি পুরনো স্নিপেটগুলোতে Azure.AI.Projects.OpenAI-এর রেফারেন্স দেখতে পাবেন। সেই প্যাকেজটি শুধুমাত্র প্রিভিউ-এর জন্য এবং এটি Azure.AI.Extensions.OpenAI-এর সাথে ওভারল্যাপ করে। উভয়ই একই ধরণের নেমস্পেসে (namespaces) এক্সটেনশন মেথড এবং টাইপ সংজ্ঞায়িত করে। আপনি যদি এগুলো পাশাপাশি ইনস্টল করেন, তবে আপনার বিল্ডটি 'ambiguous reference' ত্রুটি দিয়ে ভেঙে যাবে যা