যখন একটি AI এজেন্ট তার নিজস্ব ক্রেডেনশিয়াল বহন করে এবং সরাসরি বাহ্যিক পরিষেবাগুলোর সাথে যোগাযোগ করে, তখন এটি কোনো কর্মচারী সফটওয়্যারের মতো কাজ না করে বরং একজন কন্ট্রাক্টরের মতো কাজ করে যার কাছে একটি কর্পোরেট কার্ড আছে কিন্তু কোনো সুপারভাইজার নেই। এটি কী স্পর্শ করেছে, কে অ্যাক্সেস অনুমোদন করেছে, বা কেন একটি কথোপকথনের খরচ অন্যটির চেয়ে দশগুণ বেশি হলো—তা আপনি দেখতে পান না। লগগুলো এক ডজন পরিষেবার মধ্যে ছড়িয়ে ছিটিয়ে থাকে। প্রশ্নগুলো বহুগুণ বেড়ে যায়।
এজেন্টটি আসলে কোন টুলটি ব্যবহার করেছিল? কোন সংস্থা বা ব্যক্তি তাকে সেই ডাটাবেস স্পর্শ করার অনুমতি দিয়েছে? কেন সোমবার মাত্র পাঁচটি টোকেন ব্যবহার করা হলেও মঙ্গলবার চল্লিশ হাজার টোকেন খরচ হয়ে গেল? আমরা আসলে কত খরচ করেছি?
ব্যবহারকারী, মডেল এবং পরিষেবাগুলোর মাঝে একটি কেন্দ্রীয় কন্ট্রোল লেয়ার না থাকলে এই প্রশ্নগুলোর উত্তর পাওয়া অসম্ভব হয়ে পড়ে। আপনার এমন একটি সিঙ্গেল প্লেন (single plane) প্রয়োজন যা প্রতিটি সংযোগ একবার রেজিস্টার করবে, এজেন্টের জন্য প্রয়োজনীয় সীমিত ফাংশনগুলো প্রকাশ করবে এবং প্রতিটি এক্সিকিউশন সম্পূর্ণভাবে রেকর্ড করবে। এই নিবন্ধটি deco Studio-কে একটি লোকাল কন্ট্রোল প্লেন হিসেবে ব্যবহার করে একটি উন্নত ল্যাব নিয়ে আলোচনা করবে। আপনি এটি সেটআপ করবেন, একটি নিরাপদ Model Context Protocol সার্ভার কানেক্ট করবেন, ঠিক একটি অনুমোদিত ফাংশন প্রকাশ করবেন এবং এজেন্ট যখন তার সীমার বাইরে যাওয়ার চেষ্টা করবে তখন কী ঘটে তা পর্যবেক্ষণ করবেন।
ছড়িয়ে ছিটিয়ে থাকা ক্রেডেনশিয়ালের সমস্যা
একটি সাধারণ টিমের কথা কল্পনা করুন। একজন ডেভেলপার একটি পার্সোনাল কী (personal key) ব্যবহার করে একটি সার্চ API-এর সাথে এজেন্টকে যুক্ত করেন। অন্য একজন একই এজেন্টকে একটি প্রোডাকশন ডাটাবেসের সাথে যুক্ত করেন কারণ ডেমোটি নিরীহ মনে হয়েছিল। তৃতীয় একজন একটি বিলিং লুকআপ টুল যোগ করেন যাতে এজেন্ট "ইনভয়েস সংক্রান্ত সাহায্য" করতে পারে। প্রতিটি সংযোগ অন্যদের কাছে অদৃশ্য থাকে। এজেন্ট এখন সার্চ, প্রোডাকশন ডেটা এবং আর্থিক রেকর্ডে সরাসরি অ্যাক্সেস পেয়েছে, কিন্তু টিমের কাছে কী কী লাইভ আছে তার কোনো সমন্বিত তালিকা নেই।
যখন ক্রেডেনশিয়াল এজেন্টের ভেতরে থাকে, তখন গভর্নেন্স বা নিয়ন্ত্রণ ব্যবস্থা ভেঙে পড়ে। আপনি কেন্দ্রীয়ভাবে অ্যাক্সেস বাতিল করতে পারেন না কারণ কী (key) এজেন্টটির মেমরি বা এর লোকাল এনভায়রনমেন্ট ফাইলে থাকে। আপনি ব্যবহার নিরীক্ষা (audit) করতে পারেন না কারণ বাহ্যিক পরিষেবাটি কেবল একটি বেনামী স্বয়ংক্রিয় ক্লায়েন্টের কাছ থেকে আসা API কল দেখতে পায়। খরচের অপ্রত্যাশিত বৃদ্ধি কয়েক দিন পর ক্লাউড বিলে দেখা দেয়, এবং ততক্ষণে কেউ মনে রাখতে পারে না কোন প্রম্পটটি এই খরচের উল্লম্ফন ঘটিয়েছে।
deco Studio-তে আপনার কন্ট্রোল প্লেন তৈরি করা
deco Studio একটি লোকাল হাব হিসেবে কাজ করে এই সমস্যার সমাধান করে। আপনি এটি আপনার নিজস্ব মেশিনে চালান এবং এটি এমন একটি একক স্থান হয়ে ওঠে যেখানে সমস্ত কনফিগারেশন থাকে। এজেন্টগুলোর মধ্যে API কী এবং টুল ডেফিনিশন ছড়িয়ে না দিয়ে, আপনি Studio-র ভেতরে একবার একটি সংযোগ রেজিস্টার করবেন। তারপর আপনি ঠিক করবেন কোন এজেন্ট কোন ফাংশনগুলো দেখতে পাবে।
এটিকে একটি সুইচবোর্ড ইনস্টল করার মতো ভাবুন। সমস্ত তার একটি ঘরে এসে মিলিত হয়। আপনি বেছে নেন কোন লাইন কোন বিভাগের সাথে যুক্ত হবে এবং আপনি প্রতিটি কলের রেকর্ড রাখেন।
লোকালি deco Studio চালানোর মাধ্যমে শুরু করুন। এটি চালু হয়ে গেলে, আপনি কনফিগারেশনকে কেন্দ্রীয়করণ করবেন। যে এজেন্টটি কোনো টুল ব্যবহার করতে চায়, তাকে এখন সরাসরি বাহ্যিক পরিষেবার কাছে না গিয়ে কন্ট্রোল প্লেনের কাছে অনুরোধ করতে হবে। এটি তাৎক্ষণিকভাবে একটি চোকপয়েন্ট (chokepoint) তৈরি করে যেখানে আপনি পর্যবেক্ষণ, ফিল্টার এবং লগ করতে পারেন।
একটি নিরাপদ MCP সার্ভার কানেক্ট করা
এই ল্যাবে, আপনি একটি Model Context Protocol সার্ভার কানেক্ট করবেন। MCP হলো মডেলগুলোকে বাহ্যিক টুলের সাথে ইন্টারঅ্যাক্ট করার সুযোগ দেওয়ার একটি ওপেন স্ট্যান্ডার্ড, কিন্তু স্ট্যান্ডার্ড মানেই নিরাপত্তা নিশ্চিত নয়। এখানে গুরুত্বপূর্ণ ধাপটি হলো নির্বাচনযোগ্যতা (selectivity)। আপনি সার্ভারটি যে সমস্ত এন্ডপয়েন্ট (endpoint) অফার করে তার সবগুলোকে অন্ধভাবে প্রকাশ করবেন না। আপনি deco Studio-তে সার্ভারটি রেজিস্টার করবেন, তারপর আপনার টেস্ট এজেন্টের জন্য কেবল একটি অনুমোদিত ফাংশন প্রকাশ করবেন।
উদাহরণস্বরূপ, আপনার MCP সার্ভারটি দশটি ফাংশন অফার করতে পারে: ফাইল রিড, ফাইল রাইট, ডাটাবেস কুয়েরি, নেটওয়ার্ক ফেচ এবং অন্যান্য। আপনি একটি ক্ষতিকারক নয় এমন অপারেশন বেছে নেবেন, সম্ভবত একটি স্যান্ডবক্সড ক্যালকুলেটর বা সিন্থেটিক ডেটার বিপরীতে একটি রিড-অনলি লুকআপ, এবং কেবল সেটিই প্রকাশ করবেন। বাকি নয়টি এজেন্টটির কাছে অদৃশ্য থাকবে। যদি এজেন্ট সেগুলো চায়, তবে কন্ট্রোল প্লেন সরাসরি প্রত্যাখ্যান করবে।
এটি হলো principle of least privilege-কে যান্ত্রিকভাবে প্রয়োগ করা। এজেন্ট কোনো বিনয়ী নির্দেশনার মাধ্যমে নয়, বরং একটি সফটওয়্যার বাউন্ডারির মাধ্যমে সক্ষমতা লাভ করে।
বাউন্ডারি বা সীমানা পরীক্ষা করা
একটি টেস্ট এজেন্ট তৈরি করুন এবং সেটিকে আপনার deco Studio কন্ট্রোল প্লেনের দিকে নির্দেশ করুন। তাকে এমন একটি কাজ দিন যার জন্য অনুমোদিত সেই একটি ফাংশন প্রয়োজন। এটি সফলভাবে সম্পন্ন হতে দেখুন। Studio-র ভেতরের লগগুলো মডেল রিকোয়েস্ট, কন্ট্রোল প্লেনের মাধ্যমে টুল কলের রাউটিং, ফাংশন এক্সিকিউশন এবং মডেলের কাছে ফিরে আসা ফলাফল প্রদর্শন করবে। আপনি একটি নিরবচ্ছিন্ন ট্রেসের মাধ্যমে সম্পূর্ণ পথটি পড়তে পারবেন।
এখন এজেন্টকে এমন একটি দ্বিতীয় কাজ দিন যার জন্য এমন একটি ফাংশন প্রয়োজন যা আপনি ইচ্ছাকৃতভাবে বাদ দিয়েছেন। এজেন্ট হয়তো সীমাবদ্ধতা এড়িয়ে যাওয়ার জন্য যুক্তি খোঁজার চেষ্টা করতে পারে, অথবা এটি কল্পনা করতে পারে যে টুলটি বিদ্যমান। যেভাবেই হোক, কলটি কন্ট্রোল প্লেনে পৌঁছাবে, অ্যালাউলিস্ট এটিকে প্রত্যাখ্যান করবে এবং এক্সিকিউশন ব্যর্থ হবে। এই ব্যর্থতাই হলো আপনার প্রমাণ যে সীমানাটি তাত্ত্বিক নয়, বরং সফটওয়্যার দ্বারা প্রয়োগকৃত।
এটি প্রথমে সিন্থেটিক টাস্ক দিয়ে করুন। জেনারেট করা ইউজার প্রোফাইলে পূর্ণ একটি ফেক ডেটাবেস তৈরি করুন। এজেন্টকে এটি কুয়েরি করতে দিন। অ্যালাউলিস্ট এবং প্রত্যাখ্যানগুলো যাচাই করুন। সীমানাটি বিশ্বাস করার পরেই কেবল আপনি এজেন্টকে প্রোডাকশন সিস্টেমের দিকে নির্দেশ করার কথা বিবেচনা করবেন। দেয়াল যাচাই করার আগেই রিয়েল ডেটার দিকে দ্রুত ধাবিত হওয়া মানেই হলো সিক্রেট লিক হওয়ার ঝুঁকি।
একটি রানের সম্পূর্ণ পাথ (Path) পড়া
deco Studio আপনাকে একটি এক্সিকিউশনের প্রতিটি লেয়ার পরিদর্শন করতে দেয়। আপনি র মডেল রিকোয়েস্ট দেখতে পাবেন: প্রম্পট, কনটেক্সট উইন্ডো, ফরম্যাটিং। মডেলটি যে টুল কল করার সিদ্ধান্ত নিয়েছে তাও আপনি দেখতে পাবেন। কন্ট্রোল প্লেন কীভাবে সেই কলটি রুট করে, ফাংশনটি এক্সিকিউট করে এবং পেলোড রিটার্ন করে তাও আপনি দেখতে পাবেন। সবশেষে, মডেলটি কীভাবে সেই ফলাফল ব্যবহার করে তার উত্তর তৈরি করে তাও আপনি দেখতে পাবেন।
এই দৃশ্যমানতা মৌলিক অডিট সংক্রান্ত প্রশ্নগুলোর উত্তর দেয়। আপনি জানেন কোন টুলটি ফায়ার করেছে কারণ কন্ট্রোল প্লেন সেটি লগ করেছে। আপনি জানেন কে অ্যাক্সেস দিয়েছে কারণ কনফিগারেশন রেকর্ডগুলো একটি লোকাল রেজিস্ট্রিতে থাকে। আপনি জানেন কেন রানটি ব্যয়বহুল ছিল কারণ আপনি টোকেনগুলো গণনা করতে পারেন।
যা গুরুত্বপূর্ণ তা গণনা করা
প্রতিটি রানের জন্য চারটি নির্দিষ্ট মেট্রিক্স ট্র্যাক করুন। প্রথমত, ইনপুট এবং আউটপুট টোকেন। এগুলো মডেলের খরচের সিংহভাগ বহন করে এবং আপনার সঠিক গণনা প্রয়োজন, কোনো আনুমানিক ধারণা নয়। দ্বিতীয়ত, মডেল ল্যাটেন্সি এবং টুল ল্যাটেন্সি আলাদা করুন। আপনার প্রম্পট এবং মডেলের রেসপন্সের মধ্যবর্তী সময় এবং একটি টুল কলের উত্তর দিতে এক্সটার্নাল সার্ভিসের নেওয়া সময়ের মধ্যে পার্থক্য রয়েছে। এই দুটির মধ্যে বিভ্রান্তি তৈরি করলে ধীরগতির ভুল কারণ নির্ণয় হতে পারে। তৃতীয়ত, যাচাইকৃত প্রোভাইডার রেটের ভিত্তিতে খরচ গণনা করুন। অনুমান করবেন না। আপনার প্রোভাইডারের প্রাইসিং শিট চেক করুন এবং পরিমাপকৃত টোকেনের সাথে তা মিলিয়ে দেখুন। চতুর্থত, সফল কলগুলোর সাথে প্রত্যাখ্যান করা অননুমোদিত কলগুলোর তুলনা করুন। প্রত্যাখ্যানের সংখ্যা বেশি হওয়ার অর্থ হলো আপনার এজেন্ট সীমানা পরীক্ষা করছে অথবা আপনার অ্যালাউলিস্ট বৈধ প্রয়োজনের সাথে সামঞ্জস্যপূর্ণ নয়।
এই সংখ্যাগুলো এজেন্ট অপারেশনকে একটি ব্ল্যাক-বক্স সাবস্ক্রিপশন থেকে একটি পর্যবেক্ষণযোগ্য (observable) সিস্টেমে পরিণত করে। আপনি বাজেট করতে পারেন, অপ্টিমাইজ করতে পারেন এবং ব্যাখ্যা করতে পারেন।
লোকাল কন্ট্রোল এবং লোকাল এক্সিকিউশনের মধ্যে পার্থক্য
এটি এমন একটি শিক্ষা যা সতর্ক বিল্ডারদেরও বিভ্রান্ত করতে পারে। আপনার মেশিনে deco Studio চালানো আপনাকে কনফিগারেশনের ওপর লোকাল কন্ট্রোল দেয়, কিন্তু এটি মডেলের নিজস্ব লোকাল এক্সিকিউশনের গ্যারান্টি দেয় না। আপনি যদি এজেন্টকে OpenAI, Anthropic বা যেকোনো হোস্ট করা API-এর মতো একটি এক্সটার্নাল প্রোভাইডার কল করার জন্য কনফিগার করেন, তবে আপনার প্রম্পটগুলো আপনার মেশিন থেকে বেরিয়ে যাবে। Studio গেটটি পরিচালনা করে, কিন্তু ডেটা তবুও নেটওয়ার্ক অতিক্রম করে।
সর্বদা এই সীমানাগুলো ট্র্যাক করুন। পাইপলাইনের কোন অংশগুলো localhost-এ থাকে এবং কোন অংশগুলো অন্য কারো সার্ভারে যায় তা জানুন। আপনার ডেটা যদি সংবেদনশীল হয়, তবে টুল লেয়ারের লোকাল কন্ট্রোল যথেষ্ট নয়। আপনাকে আরও জানতে হবে মডেল ইনফারেন্স কোথায় ঘটছে। লোকাল ড্যাশবোর্ডের আরামকে রিমোট মডেলের বাস্তবতার সাথে গুলিয়ে ফেলবেন না।
ইনস্ট্রাকশন মানেই অথরাইজেশন নয়
একটি বিপজ্জনক শর্টকাট হলো প্রম্পটিংয়ের মাধ্যমে একটি এজেন্টকে সুরক্ষিত করার চেষ্টা করা। মডেলকে বলা, "কখনও ডিলিট ফাংশন কল করো না," এটি কোনো সিকিউরিটি কন্ট্রোল নয়। এটি কেবল একটি পরামর্শ। মডেল নির্দেশাবলী ভুলভাবে ব্যাখ্যা করতে পারে, জেলব্রেক প্রম্পট হতে পারে, অথবা স্রেফ যুক্তিতে ভুল করতে পারে। প্রকৃত নিরাপত্তা সফটওয়্যার বাউন্ডারিতে থাকে।
কোন ফাংশনগুলো কলযোগ্য তা সুনির্দিষ্টভাবে নির্ধারণ করতে deco Studio-এর ভেতরে অ্যালাউলিস্ট ব্যবহার করুন। কন্ট্রোল প্লেনের ভেতরে সার্ভার-সাইড চেকের মাধ্যমে সেই সীমাবদ্ধতাগুলো প্রয়োগ করুন। একজন ব্যবহারকারী যেভাবে ফাইল পারমিশন সম্পর্কে জানতে পারে—একটি কঠোর সীমার সম্মুখীন হয়ে, কেবল একটি বন্ধুত্বপূর্ণ নোট পড়ে নয়—এজেন্টেরও তার সক্ষমতা সেভাবেই জানা উচিত। নিরাপত্তা আর্কিটেকচারের অংশ হওয়া উচিত, ন্যাচারাল ল্যাঙ্গুয়েজের নয়।
ছোট থেকে শুরু করুন, সংশয়ী থাকুন
আপনার কন্ট্রোল প্লেনটি ধাপে ধাপে তৈরি করুন। একটি MCP সার্ভার। একটি এক্সপোজড ফাংশন। একটি সিন্থেটিক টাস্ক। যাচাই করুন যে এজেন্ট যেখানে সফল হওয়া উচিত সেখানে সফল হচ্ছে এবং যেখানে ব্যর্থ হওয়া উচিত সেখানে ব্যর্থ হচ্ছে। ট্রেসটি পড়ুন। টোকেন গণনা নিশ্চিত করুন। তারপর পরবর্তী টুলটি যোগ করুন।
কন্ট্রোল কোনো সুইচ নয় যা আপনি শুধু অন বা অফ করবেন। এটি কোনো কিছু বিশ্বাস করার আগে তার সীমানা প্রমাণ করার একটি অভ্যাস। deco Studio আপনাকে সেই অভ্যাসটি অনুশীলন করার জন্য লোকাল প্লেন প্রদান করে। এটি ব্যবহার করে একটি স্বায়ত্তশাসিত এজেন্টের ঝাঁককে একটি পরিচালিত, পর্যবেক্ষণযোগ্য এবং সীমাবদ্ধ সিস্টেমে পরিণত করুন।
উৎস: Controlling AI Agents in deco Studio: Tools, Permissions, and Cost
ঐচ্ছিক লার্নিং কমিউনিটি: টেলিগ্রামে GyaanSetu AI
