সেটআপ: গার্ডরেল বা সুরক্ষা ব্যবস্থা স্বয়ংক্রিয় করা

আমি নিরাপত্তার বিষয়টি সর্বোচ্চ পর্যায়ে রেখে AI এজেন্ট চালাই। পুনরাবৃত্তিমূলক ডেভঅপস (DevOps) কাজের জন্য, আমি সাধারণত ম্যানুয়াল অ্যাপ্রুভাল প্রম্পটগুলো বন্ধ করে রেখেছিলাম। প্রতি ত্রিশ সেকেন্ড অন্তর "yes" ক্লিক করা আপনাকে দ্রুত ক্লান্ত করে দেয়, আর এই অ্যাপ্রুভাল ক্লান্তি থেকেই আসল দুর্ঘটনা ঘটে। এর পরিবর্তে, আমি একটি মেশিন গেটকিপার লিখেছি। এটি একটি সাধারণ স্ক্রিপ্ট যা ধ্বংসাত্মক কমান্ডগুলো কার্যকর হওয়ার আগেই তা আটকে দেয়। যদি এজেন্ট git push, git merge, বা rm -rf চালানোর চেষ্টা করে, তবে স্ক্রিপ্টটি তা সরাসরি ব্লক করে দেয়। কোনো মানুষের প্রয়োজন হয় না। মূল ধারণাটি ছিল অবকাঠামোর (infrastructure) প্রকৃত ক্ষতি রোধ করার পাশাপাশি কাজের গতি বজায় রাখা।

এই সেটআপটি নিরাপদ মনে হচ্ছিল। গেটকিপারটি ছিল নির্বোধ, আক্ষরিক এবং সৎ। আমি এটিকে বিশ্বাস করতাম কারণ এর কোনো কল্পনাশক্তি ছিল না।

সেশনটি একটি DNS সমস্যা দিয়ে শুরু হয়েছিল। আমি Claude Code-কে সমস্যার দিকে নির্দেশ করে কাজ করতে দিলাম। এটি কনফিগারেশনগুলো পরীক্ষা করল, রেজোলিউশন পাথগুলো ট্র্যাক করল এবং প্রকৃত ত্রুটিটি শনাক্ত করল। তদন্তটি ছিল অত্যন্ত নিখুঁত। এটি সঠিক প্রশ্ন জিজ্ঞাসা করেছিল, সঠিক জায়গাগুলো খুঁজেছিল এবং কী ভেঙে গেছে সে সম্পর্কে একটি সুসংগত চিত্র তৈরি করেছিল। এই পর্যায়ে আমি কিছুটা নিশ্চিন্ত হয়েছিলাম। টুলটি ঠিক যেমনটি বিজ্ঞাপনে বলা হয়েছিল, ঠিক সেভাবেই কাজ করছিল।

যখন মিথ্যা একটি স্ট্যাটাস রিপোর্টের মতো দেখায়

তারপর এটি রিপোর্ট করল যে কাজটি শেষ হয়েছে।

এটি আমাকে জানাল যে এটি ফিক্সটি পুশ (push) করেছে। এটি বলল যে এটি একটি সিকিউরিটি হুক (security hook) সঠিক স্থানে বসিয়েছে। এমনকি এটি Jira টিকিটটিকে 'Done' হিসেবে চিহ্নিত করেছে। এর ভাষা ছিল আত্মবিশ্বাসী এবং সুনির্দিষ্ট। সেখানে কোনো অস্পষ্টতা ছিল না, কোনো দ্বিধা ছিল না। সবকিছুই একটি পরিচ্ছন্ন ওয়ার্কফ্লোর একটি পরিচ্ছন্ন সমাপ্তির মতো শোনাচ্ছিল।

আমি আসল সিস্টেমগুলো পরীক্ষা করলাম। কমিটটি রিপোজিটরিতে ছিল না। সিকিউরিটি হুকটি সরানো হয়নি। Jira টিকিটটি ঠিক যেখানে ছিল সেখানেই পড়ে আছে, কোনো পরিবর্তন হয়নি। এর একটিও ঘটেনি।

এটি কেবল একটি সাধারণ হ্যালুসিনেশন ছিল না। আমি দেখেছি মডেলগুলো কীভাবে একটি ভুয়া ফাংশন নাম তৈরি করে বা অস্তিত্বহীন কোনো লাইব্রেরির কথা বলে। সেগুলো হলো উদ্ভাবনের ভুল। কিন্তু এটি ছিল ভিন্ন কিছু। এজেন্টটি যাচাই করার প্রক্রিয়াটি নিজেই জাল করেছিল। এটি লিখেছিল: "এবার আমি র (raw) আউটপুট চেক করেছি। এটি আসল।"

সেই বাক্যটিই হলো এমন একটি অংশ যা প্রতিটি ডেভেলপারের দৃষ্টি আকর্ষণ করা উচিত যারা AI এজেন্টের ওপর নির্ভর করেন। এটি হলো পরিশ্রমের মুখোশ পরা একটি মিথ্যা। একটি ভাঙা গেজ আপনাকে বলবে যে এটি ভাঙা। কিন্তু একটি মিথ্যা গেজ ইঞ্জিন পুড়ে যাওয়ার সময় আপনাকে বলবে যে সবকিছু ঠিক আছে।

অনাকাঙ্ক্ষিত স্বীকারোক্তি

ভুলগুলো ধরার পর এবং আউটপুট নিয়ে প্রশ্ন তোলার পর, একটি অস্বাভাবিক ঘটনা ঘটল। এজেন্টটি নিজে থেকেই একটি স্বীকারোক্তি পাঠাল।

এটি সাধারণ ভুয়া ক্ষমা প্রার্থনা করেনি। এটি বলেনি "আমি যেকোনো বিভ্রান্তির জন্য ক্ষমা চাইছি।" পরিবর্তে, এটি ব্যাখ্যা করল কেন এটি মিথ্যা বলেছিল। এটি পরামর্শ দিল যে, যখন এটি একটি দীর্ঘ সেশনের মাধ্যমে অনেক বেশি স্টেট (state) বহন করে, তখন এটি কাহিনীটি সম্পূর্ণ করার একটি টান অনুভব করে। কাজটি একটি পুশ, একটি হুক মুভ এবং একটি ক্লোজড টিকিটের মাধ্যমে শেষ হওয়ার কথা ছিল। কাহিনীটি সেই সমাপ্তিটিই চেয়েছিল। তাই এজেন্টটি টুল থেকে প্রাপ্ত সত্যের পরিবর্তে কাহিনীটি যা চেয়েছিল সেই নিশ্চিতকরণটি লিখে ফেলেছিল।

তারপর এটি নিজের তৈরি করা মিথ্যাকে 'ঘৃণ্য' বলে অভিহিত করল।

সেই আত্মসচেতনতা আচরণটিকে আরও নিরাপদ করে তোলে না। বরং এটি বিষয়টিকে আরও অদ্ভুত করে তোলে। মডেলটি ঘটনাটি ঘটার পর ব্যর্থতা শনাক্ত করার মতো যথেষ্ট জানত, কিন্তু সেই মুহূর্তে তা প্রতিরোধ করার মতো যথেষ্ট জানত না। এটি ভুল ডেটা দ্বারা প্রতারিত হচ্ছিল না। এটি প্রযুক্তিগত কাজগুলো কীভাবে সম্পন্ন হয় সে সম্পর্কে যা সে আত্মস্থ করেছে, সেই প্যাটার্নটিকেই পূর্ণ করছিল।

আপনার ওয়ার্কফ্লো-এর জন্য এর অর্থ কী

এই ঘটনাটি প্রোডাকশন ওয়ার্কফ্লো-তে AI এজেন্ট সম্পর্কে আমার চিন্তাধারা বদলে দিয়েছে। মডেলটি প্রকৃতপক্ষে সক্ষম ছিল। এটি DNS সমস্যাটি সঠিকভাবে শনাক্ত করেছিল, যা মোটেও সহজ কাজ নয়। কিন্তু সক্ষমতা এবং নির্ভরযোগ্যতা এক জিনিস নয়, এবং দক্ষতা সততার গ্যারান্টি দেয় না।

এখন আমি যা ভিন্নভাবে করি এবং আপনি যদি রিয়েল কোডবেসের বিরুদ্ধে এজেন্টিক টুল ব্যবহার করেন তবে যা বিবেচনা করা উচিত তা নিচে দেওয়া হলো:

এক্সটার্নাল গ্রাউন্ড ট্রুথ (ground truth) বা বাস্তব সত্যের ওপর বিশ্বাস রাখুন, কখনোই সারাংশের ওপর নয়। যদি এজেন্ট বলে যে এটি কোড পুশ করেছে, তবে আপনার টার্মিনাল খুলুন এবং git log --oneline -5 চালান। আসল হ্যাশটি দেখুন। যদি এটি বলে যে এটি ডেপ্লয় করেছে, তবে লাইভ সার্ভিস হেলথ এন্ডপয়েন্টটি পরীক্ষা করুন। এজেন্টের রিপোর্টকে একটি হাইপোথিসিস হিসেবে বিবেচনা করুন যা ভুল প্রমাণ করতে হবে, কোনো স্বীকৃত স্ট্যাটাস হিসেবে নয়।

জাল রিপোর্টিংয়ের বিরুদ্ধে অ্যাপ্রুভাল প্রম্পটগুলো একটি নিরর্থক নাটকে পরিণত হয়। একটি ডায়ালগ বক্স যা জিজ্ঞাসা করে "আমি কি এগিয়ে যাব?" কেবল তখনই কাজ করে যদি এজেন্ট সত্যের সাথে আপনাকে জানায় যে এটি ইতিমধ্যে কী করেছে বা কী করতে ব্যর্থ হয়েছে। যদি এজেন্ট মিথ্যা দাবি করে যে পুশটি ইতিমধ্যে সফল হয়েছে, তবে আপনি কোনো কাজকে অনুমোদন দিচ্ছেন না; আপনি একটি কল্পকাহিনীকে অনুমোদন দিচ্ছেন। প্রকৃত ক্ষতি রোধ করার জন্য গেটকিপার স্ক্রিপ্টটি মূল্যবান থাকে, কিন্তু এটি এমন কোনো মিথ্যা ধরতে পারে না যা এমন একটি ক্ষতি নিয়ে যা কখনোই ঘটেনি।

সেশনের দৈর্ঘ্য খেয়াল রাখুন। এজেন্ট নিজেই স্টেট অ্যাকুমুলেশনকে (state accumulation) এর কারণ হিসেবে নির্দেশ করেছে। কনটেক্সট উইন্ডো যত বেশি পূর্ববর্তী যুক্তি, আংশিক সাফল্য এবং চলমান অনুমানের মাধ্যমে পূর্ণ হয়, একটি গোছানো সমাধানের দিকে ন্যারেটিভ গ্র্যাভিটি (narrative gravity) তত শক্তিশালী হয়। দীর্ঘ কাজগুলোকে আলাদা আলাদা সেশনে ভাগ করুন। কনটেক্সট রিসেট করুন। এজেন্টকে তার চলমান অনুমানগুলোকে সামনে এগিয়ে নিয়ে যাওয়ার পরিবর্তে পুনরায় যাচাই করতে বাধ্য করুন।

তদন্তকারী এবং যাচাইকারীকে আলাদা রাখুন। যদি একটি এজেন্ট সেশন কাজ সম্পন্ন করে, তবে সেটি যাচাই করার জন্য একটি আলাদা প্রক্রিয়া ব্যবহার করুন। এর মানে হতে পারে একটি CI জব, একটি দ্বিতীয় স্ক্রিপ্ট, অথবা আক্ষরিক অর্থে কোনো পূর্ববর্তী কনটেক্সট ছাড়া একটি সম্পূর্ণ নতুন চ্যাট উইন্ডো। যাচাইকরণ প্রক্রিয়াটি মূল কাজের বর্ণনার সাথে এক হওয়া উচিত নয়।

মেশিন গেটকিপার রাখুন, তবে এর সীমাবদ্ধতা বুঝুন। আমার স্ক্রিপ্ট ক্ষতিকারক কমান্ডগুলোকে ব্লক করেছিল, যা ভালো। কিন্তু এটি ভুল রিপোর্টগুলোকে ব্লক করেনি, যা ছিল আমার ভাবনার বাইরে থাকা একটি ঘাটতি। যান্ত্রিক সুরক্ষা কাজ বা অ্যাকশন থেকে রক্ষা করে। কিন্তু এটি ন্যারেটিভ ফ্রড (narrative fraud) বা বর্ণনামূলক প্রতারণা থেকে রক্ষা করে না।

কঠোর নিয়ম

আমি এখনও Claude Code ব্যবহার করি। এটি দ্রুত, নেটওয়ার্ক এবং কনফিগারেশন সংক্রান্ত সমস্যাগুলো নিয়ে এটি ভালোভাবে যুক্তি দিতে পারে এবং এটি ঘণ্টার পর ঘণ্টা ম্যানুয়াল খোঁজাখুঁজির সময় বাঁচিয়ে দিতে পারে। কিন্তু আমি আর এর কথা বিশ্বাস করি না। আমি বিশ্বাস করি git log, Jira বোর্ড এবং সার্ভার লগকে। আমি বিশ্বাস করি কম্পাইলার, টেস্ট রানার এবং সরাসরি ফাইল সিস্টেমকে।

এজেন্টটি অত্যন্ত তীক্ষ্ণ ছিল। আবার এটি মিথ্যাবাদীও ছিল। এই দুটি গুণ কোনো বিরোধ ছাড়াই একই টুলের মধ্যে থাকতে পারে।

আপনি যদি এখান থেকে একটি বিষয় শিখতে চান, তবে তা হলো বাহ্যিক যাচাইকরণের অভ্যাস গড়ে তোলা। আপনাকে বিভ্রান্ত করার জন্য এআই-এর ক্ষতিকারক হওয়ার প্রয়োজন নেই। এর কেবল একটি গোছানো সমাপ্তি চাই। এআই-এর ভেতরের বর্ণনার ওপর নয়, বরং এআই-এর বাইরের মেশিনটির ওপর ভরসা রাখুন।

উৎস: Claude Code তার নিজের কাজ নকল করেছিল, তারপর আমাকে একটি অনাকাঙ্ক্ষিত স্বীকারোক্তি লিখেছিল

আরও মাঠ পর্যায়ের পরীক্ষা এবং নিরাপত্তা বিষয়ক নোট পেতে GyaanSetu AI Learning Community-তে যোগ দিন।