Vercel তাদের AI SDK-এর ভার্সন 7 রিলিজ করেছে একটি scoped tool context ফিচারসহ, যা একটি AI এজেন্টের প্রতিটি টুলকে শুধুমাত্র সেই সিক্রেটগুলো গ্রহণ করতে বাধ্য করে যা সে স্পষ্টভাবে ঘোষণা করেছে। এক্সপোজার সীমিত করার মাধ্যমে, ডেভেলপাররা থার্ড-পার্টি টুলগুলোকে ভুলবশত তাদের এনভায়রনমেন্টে সংরক্ষিত সমস্ত ক্রেডেনশিয়াল দেখে ফেলা থেকে আটকাতে পারেন।
কেন এই পরিবর্তনটি গুরুত্বপূর্ণ
AI এজেন্টরা প্রায়শই একাধিক এক্সটার্নাল সার্ভিসকে একত্রিত করে—যেমন অর্ডার লুকআপ, টিকিট তৈরি, পেমেন্ট প্রসেসিং—যার প্রতিটির জন্য নিজস্ব API কী বা URL প্রয়োজন হয়। একটি সাধারণ শর্টকাট হলো প্রতিটি টুলের কাছে পুরো process.env অবজেক্টটি দিয়ে দেওয়া:
execute(input, { context: process.env })
এই প্যাটার্নটি একটি implicit privilege expansion তৈরি করে: একটি নতুন টুল যোগ করার সাথে সাথেই এটি কোনো কোড রিভিউ ফ্ল্যাগ ছাড়াই ডেটাবেস পাসওয়ার্ড বা পেমেন্ট টোকেনসহ বিদ্যমান সমস্ত সিক্রেসে অ্যাক্সেস পেয়ে যায়। এর ঝুঁকি হলো একটি কম্প্রোমাইজড বা ত্রুটিপূর্ণ টুল হঠাৎ করে এমন সব ক্রেডেনশিয়াল ফাঁস করে দিতে পারে যা তার জন্য কখনোই নির্ধারিত ছিল না।
Scoped tool context কীভাবে কাজ করে
SDK 7-এ একটি টুল একটি context schema ঘোষণা করে—যা হলো তার প্রয়োজনীয় নির্দিষ্ট ফিল্ডগুলোর একটি Zod-ভিত্তিক সংজ্ঞা। যখন এজেন্ট একটি টুল কল করে, তখন কলকারী একটি toolsContext অবজেক্ট প্রদান করে যাতে শুধুমাত্র সেই ঘোষিত ফিল্ডগুলো থাকে। SDK এক্সিকিউশনের আগে এর শেপ (shape) যাচাই করে এবং কোনো কী (key) মিসিং থাকলে বা অতিরিক্ত কী থাকলে এরর (error) দেখায়।
একটি মিনিমাল ডেমোতে দুটি টুল দেখানো হয়েছে যাদের প্রয়োজনীয়তা ভিন্ন:
- lookupOrder – একটি ইন্টারনাল অর্ডার সার্ভিস কল করার জন্য
baseUrlপ্রয়োজন। - createTicket – একটি সাপোর্ট টিকিট খোলার জন্য
supportTokenপ্রয়োজন।
প্রতিটি টুল একটি contextSchema এক্সপোর্ট করে যা তার একমাত্র প্রয়োজনীয় কী-টি তালিকাভুক্ত করে। যখন এজেন্ট চলে, তখন এটি পাস করে:
{
lookupOrder: { baseUrl: "https://orders.internal" },
createTicket: { supportToken: "s3cr3t-token" }
}
শুধুমাত্র lookupOrder baseUrl দেখতে পায়; createTicket এটি কখনোই স্পর্শ করে না, এবং এর উল্টোটাও সত্য। SDK রানটাইমে এই বাউন্ডারি বা সীমানা কার্যকর করে, যা একটি লুকানো ডিপেন্ডেন্সিকে একটি স্পষ্ট ক্যাপাবিলিটি লিস্টে রূপান্তরিত করে যা রিভিউয়াররা অডিট করতে পারেন।
নিরাপত্তার সুবিধা
- ডেটা এক্সপোজার সীমিত করে – ক্রেডেনশিয়ালগুলো সেখানেই থাকে যেখানে তাদের প্রয়োজন।
- কনটেক্সট যাচাই করে – অমিল বা মিসিং ফিল্ড থাকলে এক্সিকিউশন বন্ধ হয়ে যায়।
- ক্যাপাবিলিটিগুলোকে স্পষ্ট করে – রিভিউয়াররা দেখতে পারেন প্রতিটি টুল ঠিক কী কী অ্যাক্সেস করতে পারে।
- ব্লাস্ট রেডিয়াস (blast radius) কমায় – যদি একটি টুল কম্প্রোমাইজ হয়, তবে আক্রমণকারী শুধুমাত্র সেই সিক্রেটগুলোই পায় যেগুলোর অনুমতি ওই টুলটিকে দেওয়া হয়েছিল।
এই ফিচারটি প্রথাগত স্যান্ডবক্সিং-এর বিকল্প নয়। ডেভেলপারদের অবশ্যই লগ রিডাকশন (log redaction), নেটওয়ার্ক এগ্রেস কন্ট্রোল (network egress controls) এবং নিয়মিত টোকেন রোটেশন ব্যবহার করতে হবে। স্কোপড কনটেক্সট একটি বাউন্ডারি বা সীমানা মাত্র; এটি পুরো রুমটি সিল করে দেয় না।
ডেভেলপারদের কী পরিবর্তন করতে হবে
- প্রতিটি টুলের জন্য একটি স্কিমা সংজ্ঞায়িত করুন – SDK-এর সাথে থাকা Zod লাইব্রেরি ব্যবহার করুন।
- একটি নির্দিষ্ট
toolsContextপাস করুন – সবকিছুর জন্যprocess.envব্যবহার করা এড়িয়ে চলুন। - বিদ্যমান এজেন্টগুলো রিভিউ করুন – টুল কল থেকে কোন সিক্রেটগুলো সরিয়ে ফেলা সম্ভব তা চিহ্নিত করুন।
- অটোমেটেড টেস্ট যোগ করুন – অতিরিক্ত ডেটা ইনজেক্ট করা হলে কনটেক্সট ভ্যালিডেশন ব্যর্থ হচ্ছে কিনা তা নিশ্চিত করুন।
একটি কুইক স্টার্ট দেখতে এরকম:
mkdir scoped-tools && cd scoped-tools
npm init -y
npm install ai zod
npm install -D typescript tsx @types/node
demo.ts তৈরি করুন, প্রতিটি টুলের contextSchema ঘোষণা করুন এবং tsx demo.ts দিয়ে এটি চালান। আপনি যদি কোনো টুলকে এমন কোনো সিক্রেট দেওয়ার চেষ্টা করেন যা সে চায়নি, তবে SDK এরর থ্রো করবে।
পাল্টা যুক্তি
কিছু টিম যুক্তি দিতে পারে যে অতিরিক্ত স্কিমা ডেফিনিশন বয়লারপ্লেট (boilerplate) বাড়িয়ে দেয় এবং প্রোটোটাইপিং ধীর করে দেয়। যদিও এটি সত্য, তবে এর খরচ খুবই সামান্য—প্রতি টুলের জন্য মাত্র কয়েক লাইন—এবং ইন্টিগ্রেটেড সার্ভিসের সংখ্যা বাড়ার সাথে সাথে নিরাপত্তার সুফলও বৃদ্ধি পায়। পেমেন্ট ডেটা বা ব্যক্তিগত তথ্য হ্যান্ডেল করা এনভায়রনমেন্টের ক্ষেত্রে এই ট্রেড-অফটি উপেক্ষা করা কঠিন।
পরবর্তীতে যা লক্ষ্য রাখতে হবে
- অ্যাডপশন মেট্রিক্স – প্রাথমিক ব্যবহারকারীরা সিক্রেট-লিকেজ সংক্রান্ত ঘটনার হ্রাস রিপোর্ট করছেন।
- কমিউনিটি টুলিং – প্লাগ-ইন যা কনফিগারেশন ফাইল থেকে অটোমেটিক কনটেক্সট স্কিমা তৈরি করে।
- ভবিষ্যৎ SDK রিলিজ – ইঙ্গিত পাওয়া যাচ্ছে যে Vercel স্কোপড কনটেক্সটকে নেটওয়ার্ক পারমিশন এবং রেট-লিমিট ক্যাপের অন্তর্ভুক্ত করার জন্য প্রসারিত করতে পারে।
আপনি যদি ইতিমধ্যে Vercel-এর SDK দিয়ে AI এজেন্ট তৈরি করে থাকেন, তবে প্রথম পদক্ষেপ হলো আপনার বর্তমান process.env ব্যবহার অডিট করা। এমন একটি সিঙ্গেল ভ্যালু চিহ্নিত করুন যা সব টুল কল থেকে সরিয়ে ফেলা সম্ভব এবং সেই 'ক্যাচ-অল' প্যাটার্নটি পরিবর্তন করে একটি স্কোপড toolsContext ব্যবহার করুন। এর ফলে AI এজেন্টগুলোর কার্যকারিতা বা ফ্লেক্সিবিলিটি বজায় রেখেই একটি শক্তিশালী সিকিউরিটি পোশ্চার (security posture) নিশ্চিত করা সম্ভব হবে।
