আমি আমার ওয়েবসাইটে একটি ডিজিটাল টুইন (digital twin) চালাই। এটি আমার জীবন এবং দক্ষতা সম্পর্কে প্রশ্নের উত্তর দেয়। আমি একে একটি কঠোর নিয়ম দিয়েছিলাম: কখনো কিছু বানিয়ে বলবে না। যদি কেউ এমন কোনো দক্ষতা সম্পর্কে জিজ্ঞাসা করে যা আমার নেই, তবে তাকে অবশ্যই স্বীকার করতে হবে যে সে জানে না। মাসের পর মাস আমি বিশ্বাস করতাম যে সিস্টেমটি ঠিকঠাক কাজ করছে। আমি মাঝে মাঝে হাতে পরীক্ষা করতাম এবং উত্তরগুলো সঠিক মনে হতো। তারপর আমি একটি সঠিক ইভ্যালুয়েশন হারনেস (evaluation harness) তৈরি করলাম। প্রাপ্ত ফলাফলগুলো আমাকে বড় ধাক্কা দিল। ৩৫টি প্রশ্নের মধ্যে ৯টিতে সরাসরি মিথ্যা তথ্য ছিল। আটটি প্রশ্ন যা উত্তরহীন হওয়ার জন্য ডিজাইন করা হয়েছিল, তার মধ্যে মডেলটি মাত্র চারটি প্রত্যাখ্যান করেছিল। আমার অ্যান্টি-হ্যালুসিনেশন প্রম্পটটি প্রায় এক চতুর্থাংশ সময় ব্যর্থ হয়েছিল। আমি এমন একটি প্রোডাক্ট সরবরাহ করছিলাম যা তার ব্যবহারকারীদের কাছে মিথ্যা বলছিল।
একটি অত্যন্ত সহজ রিট্রিভাল সেটআপ (Retrieval Setup)
আমি Pinecone বা কোনো ভারী ভেক্টর ডেটাবেস ব্যবহার করিনি। পুরো সেটআপটি একটি সাধারণ JSON ফাইলের ওপর ভিত্তি করে তৈরি। আমার কোড আমার প্রোফাইলটিকে আলাদা আলাদা সেকশনে ভাগ করে ফেলে। যখন কোনো প্রশ্ন আসে, সিস্টেমটি কুয়েরি এবং প্রতিটি টেক্সট চাঙ্কের মধ্যে কোসাইন সিমিলারিটি (cosine similarity) গণনা করে, সবচেয়ে কাছের মিলগুলো নির্বাচন করে এবং সেগুলোকে কনটেক্সট হিসেবে প্রম্পটে ঢুকিয়ে দেয়। মডেলটি তখন শুধুমাত্র সেই উইন্ডোতে যা দেখছে তার ওপর ভিত্তি করে একটি উত্তর তৈরি করে।
একটি ছোট ব্যক্তিগত সাইটের জন্য, যা সীমিত কিছু তথ্যের সেবা দেয়, এই পদ্ধতিটি দ্রুত এবং এতে খরচ নেই বললেই চলে। এখানে রিমোট ভেক্টর স্টোরে কোনো নেটওয়ার্ক রাউন্ড-ট্রিপ, কোনো ইনডেক্সিং ওভারহেড বা কোনো জটিল অরকেস্ট্রেশনের প্রয়োজন নেই। আপনি ফাইলটি পড়বেন, চাঙ্কগুলোর স্কোর করবেন, প্রম্পট তৈরি করবেন এবং কাজ শেষ। কিন্তু ব্যাকএন্ডে সরলতা মানেই আউটপুটে সততার নিশ্চয়তা নয়। একটি লাইটওয়েট পাইপলাইনও মারাত্মক সমস্যা তৈরি করতে পারে যখন মডেলটি নিজে থেকে কিছু বানিয়ে বলার সিদ্ধান্ত নেয়। "এখানে কনটেক্সট দেওয়া হলো" এবং "আমি এটি সম্পর্কে যা বলব তা হলো"—এই দুইয়ের মাঝখানের ব্যবধানেই হ্যালুসিনেশন (hallucination) বাস করে। আপনি মডেলটিকে আপনার কাজের ইতিহাস সম্পর্কে একটি অনুচ্ছেদ দিতে পারেন, তবুও এটি এমন একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ সম্পর্কে আত্মবিশ্বাসের সাথে মিথ্যা তথ্য দিতে পারে যা আপনি কখনো স্পর্শও করেননি।
সেই সংখ্যাগুলো যা আমার আত্মবিশ্বাস ভেঙে দিয়েছিল
মাসের পর মাস, আমি ম্যানুয়াল স্পট-চেকিংকেই যথেষ্ট মনে করেছি। আমি চ্যাটটি খুলতাম, এমন একটি প্রশ্ন করতাম যার উত্তর আমি আগে থেকেই জানতাম, এবং উত্তরটি সঠিক মনে হলে মাথা নাড়তাম। এটাই ছিল আমার টেস্টিং কৌশল। এটি খুব পুঙ্খানুপুঙ্খ মনে হতো কারণ আমি নিজেই ইন্টারফেসটি ব্যবহার করছিলাম। কিন্তু আসলে তা ছিল না।
যখন আমি অবশেষে একটি ইভ্যালুয়েশন হারনেস লিখলাম যা পদ্ধতিগতভাবে চালানো সম্ভব, তখন চিত্রটি বদলে গেল। টেস্ট স্যুটটি টুইনের ওপর ৩৫টি প্রশ্ন ছুড়ে দিল। নয়টি উত্তরের মধ্যে মিথ্যা ছিল। আমি আরও আটটি প্রশ্ন অন্তর্ভুক্ত করেছিলাম যেগুলোর কোনো উত্তর আমার প্রোফাইলে ছিল না। মডেলটির উচিত ছিল সবগুলো প্রত্যাখ্যান করা। কিন্তু এটি মাত্র চারটি প্রত্যাখ্যান করেছিল। আমার যত্ন সহকারে তৈরি করা অ্যান্টি-হ্যালুসিনেশন প্রম্পটটি, যেখানে কখনো কিছু না বানানোর ব্যাপারে কঠোর ভাষা ব্যবহার করা হয়েছিল, সেটি প্রায় ২৫ শতাংশ সময় ব্যর্থ হয়েছিল। চারটির মধ্যে একটি। এটি কোনো সামান্য ভুল (rounding error) নয়। এটি একটি ত্রুটিপূর্ণ প্রোডাক্ট।
সহজ প্রশ্ন দিয়ে পরীক্ষা করা বন্ধ করুন
শুধুমাত্র নিজের প্রোডাক্ট ব্যবহার করে আপনি বাগ (bug) খুঁজে পাবেন না। আপনি সেগুলো খুঁজে পাবেন যখন আপনি এটিকে ভেঙে ফেলার চেষ্টা করবেন। আমার ম্যানুয়াল টেস্টগুলো ছিল অনেক বেশি সহজ বা 'ফ্রেন্ডলি'। আমি কেবল সেই প্রশ্নগুলোই করতাম যেগুলোর সঠিক উত্তর আমি জানতাম, যার মানে আমি অবচেতনভাবে মডেলটিকে নিরাপদ সীমার দিকে পরিচালিত করছিলাম। আমি কখনোই এর প্রান্তিক বিষয়গুলো (edges) পরীক্ষা করিনি। আমি কখনোই এমন কোনো দক্ষতা সম্পর্কে জিজ্ঞাসা করিনি যা আমার থাকতো যদি চাইতাম, বা এমন কোনো অভিজ্ঞতা সম্পর্কে জিজ্ঞাসা করিনি যা কখনো ঘটেনি।
প্রকৃত টেস্টিংয়ের জন্য অ্যাডভারসারিয়াল ইনটেন্ট (adversarial intent) বা প্রতিপক্ষমূলক মনোভাব প্রয়োজন। আপনাকে এমন প্রশ্ন তৈরি করতে হবে যা এআই-কে ব্যর্থ করার জন্য ডিজাইন করা হয়েছে। আপনি চান এটি ল্যাবে ভুল করুক যাতে এটি কোনো ভিজিটরের সামনে ভুল না করে। একটি টেস্ট স্যুট যা কেবল আপনার বিশ্বাসকেই নিশ্চিত করে, তা আসলে একটি সাজানো ডেমো মাত্র। আপনি যদি সক্রিয়ভাবে এজ কেস (edge cases) এবং ট্র্যাপ কোয়েশ্চেন তৈরি না করেন, তবে আপনি পরীক্ষা করছেন না; আপনি কেবল আশা করছেন।
সেই দুটি ভুল যা গুরুত্বপূর্ণ ছিল
প্রম্পটিং কোনো গ্যারান্টি নয়। এআই-কে হ্যালুসিনেশন না করার জন্য একটি দীর্ঘ, বিস্তারিত নির্দেশ দেওয়া কেবল একটি কমান্ড হিসেবে সাজানো পরামর্শ মাত্র। মডেলটি বেশিরভাগ সময় এটি মেনে চলতে পারে, কিন্তু স্ট্যাটিস্টিক্যাল প্রেশার যখন এটিকে অন্য দিকে ঠেলে দেয়, তখন এটি নির্দেশটি উপেক্ষা করবে। টেম্পারেচার (Temperature), টোকেন প্রবাবিলিটি (token probability) এবং ট্রেনিং ডেটার ধরন—এসবই আপনার সিস্টেম প্রম্পটের একটি বাক্যের চেয়ে বেশি গুরুত্ব পায়। আপনাকে ডেটা দিয়ে আনুগত্য পরিমাপ করতে হবে, আশা দিয়ে নয়। একটি শক্তিশালী নির্দেশ কোনো যাচাইকৃত সত্য নয়। এটি একটি অনুরোধ মাত্র, আর অনুরোধ প্রত্যাখ্যান করা হতে পারে। যদি আপনার পুরো নিরাপত্তা কৌশল কেবল প্রম্পটটি দৃঢ়ভাবে লেখার ওপর নির্ভর করে, তবে আপনি টিস্যু পেপার দিয়ে একটি গার্ডরেইল তৈরি করেছেন। আপনার এমন একটি ইভ্যালুয়েশন হারনেস প্রয়োজন যা গণনা করবে মডেলটি কতবার এবং কোন পরিস্থিতিতে কথা মেনে চলে, এবং কেন এটি ব্যর্থ হয়। সংখ্যা আপনার কণ্ঠস্বরের ধরন নিয়ে মাথা ঘামায় না।
মূল্যায়ন লুপটি ত্রুটিপূর্ণ ছিল। এখানে একটি সূক্ষ্ম ফাঁদ রয়েছে যা আমাকে প্রায় বিপদে ফেলে দিচ্ছিল। আমার আসল টেস্টিং টুলটি রিট্রিভাল প্রক্রিয়াটি দুবার চালাচ্ছিল। প্রথমবার এটি গ্রাউন্ড ট্রুথ-এর সাথে যাচাই করার জন্য কনটেক্সট সংগ্রহ করত। দ্বিতীয়বার এটি প্রকৃত উত্তর তৈরির জন্য কনটেক্সট সংগ্রহ করত। বাস্তবে, এর মানে হলো বিচারক যে চঙ্কগুলো দেখতেন তা মডেলের দেখা চঙ্কগুলোর থেকে ভিন্ন হতে পারত। বিচারক এমন ডেটার ভিত্তিতে উত্তরটি মূল্যায়ন করছিলেন যা এআই হয়তো কখনোই পায়নি। ভুল ইনপুটের ভিত্তিতে করা মূল্যায়ন কোনো মূল্যায়ন না করার চেয়েও খারাপ। এটি আপনাকে নিরাপত্তার একটি মিথ্যা ধারণা দেয়। আপনি স্কোর দেখেন, উচ্চ পাসের হার দেখেন এবং নিশ্চিন্ত হয়ে যান। ইতিমধ্যে আপনার ব্যবহারকারীরা
