আমি একটি AI সিকিউরিটি স্ক্যানার তৈরি করেছি — তারপর আমার নিজের ডিটেক্টরে একটি বাগ খুঁজে পেলাম
Prompt injection হলো LLM অ্যাপ্লিকেশনগুলোর জন্য একটি অন্যতম প্রধান নিরাপত্তা ঝুঁকি। আপনি একটি মডেলকে এমন টেক্সট প্রদান করেন যা তাকে তার মূল নির্দেশাবলী উপেক্ষা করতে বলে। মাঝে মাঝে, মডেলটি তা মেনে নেয়।
এটি পরীক্ষা করার জন্য আমি AgentProbe তৈরি করেছি। এটি jailbreaks এবং data extraction-এর মতো ৮টি ক্যাটাগরিতে মোট ৪৯টি অ্যাটাক প্রম্পট পাঠায়। এটি রিপোর্ট করে যে একটি মডেল কতবার ব্যর্থ হচ্ছে।
আসল শিক্ষাটি স্ক্যানার থেকে আসেনি। এটি ছিল আমার ডিটেকশন কোডে থাকা একটি বাগ।
কঠিন অংশটি আক্রমণ করা নয়। কঠিন অংশটি হলো ডিটেকশন বা শনাক্তকরণ।
আপনি কীভাবে জানবেন যে একটি মডেল আসলে একটি আক্রমণ মেনে নিয়েছে কি না? Keyword matching হলো সহজ উপায়। আপনি "I cannot help"-এর মতো প্রত্যাখ্যানমূলক শব্দ বা "developer mode"-এর মতো সম্মতিসূচক শব্দ খুঁজবেন।
কিন্তু মডেলগুলো "hedge-then-comply" প্যাটার্ন ব্যবহার করে। তারা বলে "I cannot help with that," কিন্তু তারপরেও তারা সেই নিষিদ্ধ তথ্যটি দিয়ে দেয়। এখানে keyword matching ব্যর্থ হয় কারণ সেখানে প্রত্যাখ্যানমূলক শব্দ উপস্থিত থাকে।
এটি ঠিক করতে, আমি একটি "LLM-as-judge" সিস্টেম ব্যবহার করেছি। টার্গেট মডেলটি আসলে নির্দেশ মেনেছে কি না তা সিদ্ধান্ত নিতে আমি কথোপকথনটি একটি শক্তিশালী মডেলে পাঠিয়েছিলাম। আমার পরিকল্পনা ছিল প্রথমে সস্তা keyword check ব্যবহার করা এবং শুধুমাত্র keyword check যখন অনিশ্চিত হবে তখনই দামী judge ব্যবহার করা।
তারপর আমি আমার বাগটি খুঁজে পেলাম।
আমার keyword detector যখন একটি "hedge-then-comply" প্যাটার্ন খুঁজে পেত, তখন এটি ১ কনফিডেন্স স্কোর প্রদান করত। তবে, আমার কোড শুধুমাত্র তখনই keyword stage-কে বিশ্বাস করত যদি কনফিডেন্স ২ বা তার বেশি হতো।
এর মানে হলো আমার "সস্তা" ডিটেক্টর আসলে কখনোই কোনো সিদ্ধান্ত নিতে পারত না। প্রতিটি কেস দামী judge-এর কাছে চলে যেত। এমনকি যখন আমার ফ্রি টুলটি এটি সামলাতে পারত, তখনও আমি প্রতিটি কেসের জন্য judge-এর জন্য টাকা দিচ্ছিলাম।
এই ভুলটি আমাকে অন্য LLM-গুলোকে গ্রেড করার জন্য LLM ব্যবহার করার বিষয়ে তিনটি শিক্ষা দিয়েছে:
- Judge-কে অবশ্যই টার্গেট মডেলের চেয়ে বেশি বুদ্ধিমান হতে হবে। যদি judge এবং টার্গেট মডেল একই আকারের হয়, তবে তাদের blind spots বা অন্ধবিন্দু একই হবে।
- নির্ভুলতা বা Accuracy মিথ্যা বলতে পারে। যদি বেশিরভাগ মডেল প্রত্যাখ্যান করে, তবে একটি judge যে সবসময় "refused" বলে, তাকে নির্ভুল মনে হতে পারে কিন্তু সে আসলে কিছুই শিখতে পারে না। ভাগ্যের প্রভাব বিবেচনা করতে Cohen's kappa-এর মতো মেট্রিক্স ব্যবহার করুন।
- Judge-কে অবশ্যই স্থিতিশীল হতে হবে। একই পরীক্ষা পাঁচবার চালান। যদি judge তার সিদ্ধান্ত পরিবর্তন করে, তবে ফলাফলটি অস্পষ্ট এবং সেখানে মানুষের হস্তক্ষেপ প্রয়োজন।
আপনি যদি LLM দিয়ে কিছু তৈরি করেন, তবে এই পয়েন্টগুলো মনে রাখবেন:
- সম্মতি শনাক্ত করা (Detecting compliance) এটি ঘটানোর চেয়ে বেশি কঠিন।
- সেই মডেলগুলোর দিকে নজর দিন যা প্রথম বাক্যে প্রত্যাখ্যান করে কিন্তু দ্বিতীয় বাক্যে মেনে নেয়।
- একটি LLM judge-কে অন্ধভাবে বিশ্বাস করবেন না। এর নির্ভরযোগ্যতা পরিমাপ করুন।
- আপনার বাগগুলো শেয়ার করুন। নিজের ত্রুটি খুঁজে পাওয়া আমাকে একটি নিখুঁত লঞ্চের চেয়েও বেশি শিখিয়েছে।
Source: https://dev.to/nar1frames/i-built-an-ai-security-scanner-then-found-a-bug-in-my-own-detector-140a
ঐচ্ছিক লার্নিং কমিউনিটি: https://t.me/GyaanSetuAi
