একটি AI-জেনারেটেড ক্রন জব (cron job) একটি স্টার্টআপের সমস্ত সক্রিয় Stripe সাবস্ক্রিপশন দশ সেকেন্ডের কম সময়ে মুছে ফেলেছে, যার ফলে কোম্পানির মাসিক পুনরাবৃত্ত আয় (monthly recurring revenue) কমে মাত্র $৩৮-এ নেমে এসেছে। এই ঘটনাটি দেখায় যে বিপদটি ডিপ্লয়মেন্ট পাইপলাইনে (deployment pipeline) নিহিত, সেই ল্যাঙ্গুয়েজ মডেলে নয় যা কোডটি লিখেছিল।

কী ঘটেছিল

গত সপ্তাহে BridgeMindAI-এর টিম যখন কাজ শুরু করে, তখন ড্যাশবোর্ডে মাসিক পুনরাবৃত্ত আয় (MRR) দেখাচ্ছিল মাত্র $৩৮। একটি AI মডেল কোডের মাত্র একটি লাইন তৈরি করেছিল যা শিডিউলার স্বয়ংক্রিয়ভাবে চালিয়ে দেয়। সেই লাইনটি প্রতিটি কাস্টমার রেকর্ডের জন্য Stripe-এর subscription-cancellation endpoint কল করেছিল। মাত্র সাত সেকেন্ডের মধ্যে কলটি শেষ হয় এবং সমস্ত কাস্টমার বেস মুছে যায়।

স্ক্রিপ্টটি একটি খালি ডিলিট কিউ (deletion queue)-কে সবকিছু মুছে ফেলার সংকেত হিসেবে ভুল বুঝেছিল। এই “empty = all” প্যাটার্নটি জেনারেটিভ AI আসার অনেক আগে থেকেই, ১৯৮০-এর দশক থেকে প্রোডাকশন কোডে বিদ্যমান।

কেন মডেলটি অপরাধী নয়

মানুষ দ্রুত AI মডেলটিকে অবিশ্বস্ত বলে দোষারোপ করতে শুরু করে। মডেল পরিবর্তন করলেও এই মুছে ফেলার ঘটনাটি আটকানো যেত না, কারণ ত্রুটিটি ছিল মানুষের লেখা লজিক বা যুক্তিতে, কোনো হ্যালুসিনেশন (hallucination) বা পক্ষপাতে নয়।

আসল ব্যর্থতাগুলো ছিল আর্কিটেকচারাল (architectural):

  • স্ক্রিপ্টটি একটি লাইভ প্রোডাকশন Stripe API key সংরক্ষণ করেছিল যা সাবস্ক্রিপশন বাতিল করতে সক্ষম ছিল।
  • এটি কোনো রানটাইম সুপারভিশন (runtime supervision) ছাড়াই চলেছিল।
  • কোড জেনারেশন এবং এক্সিকিউশনের মাঝে কোনো হিউম্যান চেকপয়েন্ট ছিল না।

এই ফাঁকগুলোর কারণেই একটি মাত্র বাগ (bug) কয়েক সেকেন্ডের মধ্যে আয়ের উৎস ধ্বংস করে দিতে পেরেছে।

যেকোনো অটোনোমাস পাইপলাইনের জন্য তিনটি নিরাপত্তা প্রশ্ন

  1. কোন অপারেশনগুলো অপরিবর্তনীয় (irreversible)? একটি সাবস্ক্রিপশন বাতিল করা, একটি রেকর্ড মুছে ফেলা বা রিফান্ড প্রদান করা—এগুলো আর আগের অবস্থায় ফিরিয়ে আনা সম্ভব নয়। এগুলোর জন্য রিড-অনলি (read-only) কুয়েরির চেয়ে বেশি সুরক্ষার প্রয়োজন।

  2. এজেন্টের কাছে কী ধরনের ক্রেডেনশিয়াল (credentials) আছে? একটি অটোনোমাস প্রসেসকে মাস্টার Stripe key প্রদান করা মানে তাকে অসীম ক্ষমতা দিয়ে দেওয়া। 'লিস্ট-প্রিভিলেজ' (least-privilege) নীতি প্রয়োগ করুন: এমন স্কোপড (scoped) কী ব্যবহার করুন যা শুধুমাত্র প্রয়োজনীয় কাজটিই করতে পারে।

  3. হিউম্যান চেকপয়েন্ট কোথায়? শুধুমাত্র কোড রিভিউ যথেষ্ট নয়। কোড জেনারেশনের পরে এবং যেকোনো ধ্বংসাত্মক কাজের আগে একটি গেট (gate) যুক্ত করুন।

ব্যবহারিক নিরাপত্তা ব্যবস্থা (Practical safety rails)

  • Dry-run গেট – যেকোনো ডিলিট বা ক্যানসেল কলের আগে, লক্ষ্যবস্তুগুলোর একটি লগ তৈরি করুন। যদি তালিকাটি খালি হয় বা অস্বাভাবিকভাবে বড় হয়, তবে প্রক্রিয়াটি বাতিল করুন এবং একজন মানুষকে সতর্ক করুন।
  • স্কোপড ক্রেডেনশিয়াল – ডিফল্ট হিসেবে রিড-অনলি কী ব্যবহার করুন। যখন কোনো কাজের জন্য সাবস্ক্রিপশন বাতিল করা প্রয়োজন হয়, তখন একটি রেস্ট্রিক্টেড (restricted) কী তৈরি করুন যা একবারে শুধুমাত্র একটি কাস্টমার আইডি-র ওপর কাজ করতে পারে।
  • হিউম্যান-ইন-দ্য-লুপ প্রম্পট – কোনো চ্যানেলে (যেমন, Slack) একটি ছোট বার্তা পাঠান, যেমন “আমি ৪৭টি সাবস্ক্রিপশন বাতিল করতে যাচ্ছি। নিশ্চিত করবেন?” এর খরচ নগণ্য; কিন্তু নিরাপত্তার ক্ষেত্রে এর সুফল বিশাল।

এই ব্যবস্থাগুলো কোন মডেল কোড লিখছে তার ওপর নির্ভর করে না, কারণ এগুলো জেনারেটরকে নয়, বরং এক্সিকিউশন এনভায়রনমেন্টকে (execution environment) রক্ষা করে।

অটোনোমাস এজেন্টদের জন্য একটি প্রোডাকশন চেকলিস্ট

  • প্রতিটি অপারেশনকে read, reversible, অথবা irreversible হিসেবে শ্রেণীবদ্ধ করুন।
  • সমস্ত irreversible কাজের জন্য স্পষ্ট মানুষের অনুমোদন প্রয়োজন করুন।
  • ক্রেডেনশিয়ালকে কাজের জন্য প্রয়োজনীয় সর্বনিম্ন পারমিশনের মধ্যে সীমাবদ্ধ রাখুন।
  • রেকর্ড মুছে ফেলা বা পরিবর্তন করার লুপগুলোর ওপর সাইজ লিমিট বা আকার সীমা আরোপ করুন।
  • এজেন্টদের প্রথমে একটি স্যান্ডবক্সে (sandbox) চালান যা প্রোডাকশন ডেটার প্রতিফলন ঘটায়; লাইভ ডেটা স্পর্শ করার আগে ফলাফল নিশ্চিত করুন।
  • এক্সিকিউশনের আগে এজেন্টটির পরিকল্পনা সহজ ভাষায় লগ করুন যাতে একজন রিভিউয়ার এক পলকেই উদ্দেশ্য বুঝতে পারেন।

এই চেকলিস্টটি অনুসরণ করলে একটি “run-once-and-forget” স্ক্রিপ্ট একটি নিয়ন্ত্রিত ওয়ার্কফ্লোতে পরিণত হয়, যা কোনো কিছু ভুল মনে হলে অডিট করা এবং থামানো সম্ভব।

শিক্ষাটি স্পষ্ট: প্রক্রিয়াটিকে বিশ্বাস করুন, মডেলটিকে নয়।