পাঠ ২৫ · ২৮-এর মধ্যে
Home / AI Courses / প্রম্পট ইঞ্জিনিয়ারিং / প্রম্পট টেস্টিং ও মূল্যায়ন

প্রম্পট টেস্টিং ও মূল্যায়ন

Testing and evaluating prompts
১০ মিনিট পড়া মাঝারি · Intermediate কোর্সের আগের পাঠ জানা থাকলে ভালো সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • কেন প্রম্পট লেখার আগেই সাফল্যের মানদণ্ড ঠিক করা জরুরি
  • রুব্রিক ও টেস্ট কেস কীভাবে ডিজাইন করবেন
  • এক-উদাহরণ-দেখে-সিদ্ধান্ত নেওয়ার ফাঁদ কেন বিপজ্জনক
  • পদ্ধতিগত (systematic) ইটারেশন কীভাবে করবেন

১ · একটি প্রথম-খসড়া প্রম্পট হলো শুরু, শেষ নয়

এই কোর্সের প্রথম ২৪টি পাঠে আমরা প্রম্পট লেখার বহু কৌশল শিখেছি — স্বচ্ছতা, উদাহরণ, গঠন, চেইন-অফ-থট। কিন্তু একটি গুরুত্বপূর্ণ বাস্তবতা প্রায়ই উপেক্ষিত হয় — একটি প্রম্পট লিখে একবার চালিয়ে "ভালো লাগছে" মনে হলেই কাজ শেষ নয়। Anthropic-এর নিজস্ব প্রম্পট ইঞ্জিনিয়ারিং গাইডলাইন স্পষ্ট করে বলে — আসল কাজ শুরু হওয়া উচিত স্পষ্ট, পরীক্ষাযোগ্য সাফল্যের মানদণ্ড ঠিক করে, এবং তারপর সেই মানদণ্ডের বিপরীতে এম্পিরিক্যাল (পরীক্ষামূলক) টেস্ট চালিয়ে। একটি প্রথম-খসড়া প্রম্পট হলো একটি হাইপোথিসিস — প্রমাণিত সত্য নয়।

মূল নীতি · Core principle

"আমি একবার চালিয়ে দেখলাম, ভালো উত্তর এসেছে" — এটি প্রমাণ নয়, এটি একটি anecdote (এককালীন ঘটনা)। প্রম্পট ইঞ্জিনিয়ারিং একটি ইঞ্জিনিয়ারিং শৃঙ্খলা হয়ে ওঠে তখনই, যখন আপনি প্রমাণ করতে পারেন যে প্রম্পটটি বিভিন্ন ইনপুটের বিরুদ্ধে বারবার প্রত্যাশিত ফলাফল দেয় — শুধু একটি সুবিধাজনক উদাহরণে নয়।

২ · প্রথম ধাপ — "ভালো" মানে কী তা ঠিক করা

কোনো প্রম্পট ইটারেট করার আগে নিজেকে জিজ্ঞেস করুন — একটি সফল আউটপুটের নির্দিষ্ট বৈশিষ্ট্য কী কী? এটি ঠিক করার দুটি সাধারণ পদ্ধতি আছে —

  • রুব্রিক (Rubric)Rubricএকটি আউটপুটকে "ভালো" বা "খারাপ" বলার জন্য নির্দিষ্ট, তালিকাভুক্ত মানদণ্ডের সেট — যেমন সঠিকতা, নির্দিষ্ট ফরম্যাট মেনে চলা, টোন, দৈর্ঘ্য ইত্যাদি। — একটি চেকলিস্ট, যেমন "উত্তরে অবশ্যই একটি নির্দিষ্ট JSON স্কিমা মেনে চলতে হবে", "টোন অবশ্যই বিনয়ী হতে হবে", "সর্বোচ্চ ৩ বাক্যে উত্তর দিতে হবে।"
  • টেস্ট কেসের সেট — বাস্তব-জগতের বৈচিত্র্যপূর্ণ ইনপুটের একটি তালিকা, প্রতিটির জন্য প্রত্যাশিত ফলাফল বা বৈশিষ্ট্য লেখা — সাধারণ কেস, প্রান্তিক (edge) কেস, এবং কঠিন/দ্বিধাজনক কেস সবই অন্তর্ভুক্ত করে।
একটি স্কুলের রচনা লেখার পরীক্ষার কথা ভাবুন — শিক্ষক আগে থেকে ঠিক করে রাখেন কী কী দেখে নম্বর দেবেন (গঠন, ভাষা, যুক্তি, দৈর্ঘ্য), তারপর প্রতিটি ছাত্রের খাতা সেই একই মানদণ্ড দিয়ে মূল্যায়ন করেন। প্রম্পট টেস্টিংও একই রকম — মানদণ্ড আগে ঠিক করুন, তারপর প্রতিটি "খাতা" (আউটপুট) সেই মানদণ্ড দিয়ে যাচাই করুন।

৩ · একাধিক টেস্ট কেসে চালান — একটিতে নয়

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

Test case set (example)
টাস্ক: গ্রাহকের রিভিউ থেকে sentiment (positive/negative/neutral) বের করা প্রম্পট টেস্ট করা।

টেস্ট কেস ১ (সাধারণ পজিটিভ): "পণ্যটি চমৎকার, দ্রুত ডেলিভারি হয়েছে।"
  → প্রত্যাশিত: positive

টেস্ট কেস ২ (সাধারণ নেগেটিভ): "পণ্যটি ভাঙা অবস্থায় এসেছে, খুবই হতাশ।"
  → প্রত্যাশিত: negative

টেস্ট কেস ৩ (প্রান্তিক — মিশ্র): "পণ্যটি ভালো কিন্তু ডেলিভারি দেরি হয়েছে।"
  → প্রত্যাশিত: neutral বা mixed (নির্দিষ্ট করে রাখুন কোনটা চান)

টেস্ট কেস ৪ (প্রান্তিক — খালি/অস্পষ্ট): "ঠিক আছে।"
  → প্রত্যাশিত: neutral (বা "অনিশ্চিত" — পাঠ ১০ দ্রষ্টব্য)

টেস্ট কেস ৫ (প্রান্তিক — sarcasm): "হ্যাঁ, দারুণ, আবার ভাঙা পণ্য পেলাম!"
  → প্রত্যাশিত: negative (এখানেই বেশিরভাগ প্রম্পট ব্যর্থ হয়)

এই ধরনের সেট তৈরি করলে দ্রুত বোঝা যায় প্রম্পটটি কোথায় শক্তিশালী আর কোথায় দুর্বল — এবং গুরুত্বপূর্ণভাবে, এটি একটি পুনঃব্যবহারযোগ্য সম্পদ হয়ে যায়। প্রম্পট পরিবর্তন করার পর একই টেস্ট সেট আবার চালিয়ে দেখা যায় পরিবর্তনটি সত্যিই উন্নতি এনেছে, নাকি একটি সমস্যা ঠিক করতে গিয়ে আরেকটি নতুন সমস্যা তৈরি করেছে (regression)।

৪ · পদ্ধতিগত ইটারেশন — OpenAI-এর "systematic testing" কৌশল

OpenAI-এর নিজস্ব গাইডলাইনও প্রম্পট ইঞ্জিনিয়ারিংকে একটি ইটারেটিভ, পরীক্ষামূলক প্রক্রিয়া হিসেবে বর্ণনা করে — পদ্ধতিগত টেস্টিং একটি মূল কৌশল হিসেবে উল্লেখ করা হয়। এর ব্যবহারিক অর্থ হলো — প্রতিটি প্রম্পট পরিবর্তনের পর এলোমেলোভাবে দুয়েকটা উদাহরণ দেখে সিদ্ধান্ত না নিয়ে, একই স্ট্যান্ডার্ড টেস্ট সেটের বিরুদ্ধে ফলাফল তুলনা করা — যাতে প্রতিটি পরিবর্তনের প্রকৃত প্রভাব পরিমাপযোগ্য থাকে।

ব্যর্থতার প্যাটার্ন খুঁজুন, একটি এককালীন ব্যর্থতা নয়। যদি একটি প্রম্পট ৫টির মধ্যে ৪টি টেস্ট কেসে ভালো করে কিন্তু একটিতে বারবার ব্যর্থ হয়, সেই একটি ব্যর্থতার ধরন বিশ্লেষণ করুন — এটি কি একটি নির্দিষ্ট ধরনের ইনপুটে সবসময় ঘটে (যেমন sarcasm), নাকি এলোমেলো (র‍্যান্ডম স্যাম্পলিং-জনিত, পাঠ ০১ দ্রষ্টব্য)? প্যাটার্ন বুঝলে সঠিক জায়গায় প্রম্পট ঠিক করা সহজ হয়।

এই পদ্ধতি ছোট প্রকল্পেও প্রয়োগযোগ্য — এমনকি একটি ব্যক্তিগত প্রজেক্টে ৫-১০টি টেস্ট কেস হাতে লিখেও এই শৃঙ্খলা অনুসরণ করা যায়। বড় প্রোডাকশন সিস্টেমে এটি প্রায়ই স্বয়ংক্রিয় ইভাল (evaluation) পাইপলাইনে পরিণত হয়, যেখানে শত শত টেস্ট কেস স্বয়ংক্রিয়ভাবে চালানো হয় প্রতিটি প্রম্পট পরিবর্তনের পর — কিন্তু মূলনীতিটা একই থাকে, ছোট হোক বা বড়।

মূল কথা · Key takeaway

প্রম্পট ইঞ্জিনিয়ারিং একটি লেখার কাজ নয়, এটি একটি পরীক্ষামূলক (empirical) কাজ। সাফল্যের মানদণ্ড আগে ঠিক করুন, একাধিক বৈচিত্র্যপূর্ণ টেস্ট কেসে যাচাই করুন, এবং ব্যর্থতার প্যাটার্ন দেখে ইটারেট করুন — একটি সুবিধাজনক উদাহরণের ভিত্তিতে নয়। পরের পাঠে আমরা দেখব সবচেয়ে সাধারণ কিছু ব্যর্থতার ধরন এবং তার নির্দিষ্ট সমাধান।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ একজন সহকর্মী বলছেন — "আমি প্রম্পটটা তিনবার চালালাম, প্রতিবার ভালো উত্তর এসেছে, তাই এটা প্রোডাকশনে দিয়ে দেওয়া যায়।" এই যুক্তিতে কী সমস্যা থাকতে পারে?

তিনবার একই ধরনের ইনপুটে চালানো এবং একাধিক ভিন্ন ধরনের ইনপুটে চালানো — এই দুটো এক নয়। যদি তিনটিই একই ধরনের "সহজ" ইনপুট হয় (যেমন সবই স্পষ্ট, ছোট, সাধারণ প্রশ্ন), তাহলে প্রম্পটটি প্রান্তিক কেসে কেমন করবে তা এখনো অজানা।

সঠিক পদ্ধতি হলো — একটি বৈচিত্র্যপূর্ণ টেস্ট-কেস সেট তৈরি করা (সাধারণ, প্রান্তিক, কঠিন) এবং প্রতিটির বিরুদ্ধে পদ্ধতিগতভাবে যাচাই করা, শুধু কয়েকবার একই ধরনের ইনপুটে ভালো ফলাফল দেখে সন্তুষ্ট না হওয়া।

প্র ০২ একটি প্রম্পট পরিবর্তন করার পর একটি নির্দিষ্ট সমস্যা ঠিক হয়ে গেছে বলে মনে হচ্ছে, কিন্তু সহকর্মী বলছেন আরেকটি আগে-কাজ-করা কেস এখন ভেঙে গেছে। এই পরিস্থিতিকে কী বলা হয়, এবং এটি এড়াতে কী করা উচিত ছিল?

এটিকে regression বলা হয় — একটি সমস্যা ঠিক করতে গিয়ে অজান্তে আরেকটি আগে-কাজ-করা কেস ভেঙে ফেলা। এটি এড়ানোর সবচেয়ে ভালো উপায় হলো একটি স্থায়ী টেস্ট-কেস সেট রাখা এবং প্রতিটি প্রম্পট পরিবর্তনের পর পুরো সেটটি আবার চালানো — শুধু যে নির্দিষ্ট সমস্যা ঠিক করতে চেয়েছিলেন সেই একটি কেস নয়।

এই কারণেই টেস্ট-কেস সেটকে একটি পুনঃব্যবহারযোগ্য সম্পদ হিসেবে সংরক্ষণ করা গুরুত্বপূর্ণ — প্রতিবার নতুন করে তৈরি করার বদলে।

প্র ০৩ একটি রুব্রিক তৈরি করার সময় "টোন বিনয়ী হতে হবে" এর মতো সাবজেক্টিভ মানদণ্ড কীভাবে আরও পরীক্ষাযোগ্য করে তোলা যায়?

সাবজেক্টিভ মানদণ্ডকে যতটা সম্ভব সুনির্দিষ্ট, পর্যবেক্ষণযোগ্য বৈশিষ্ট্যে ভাঙার চেষ্টা করুন — যেমন "কোনো আদেশসূচক বাক্য ('তুমি অবশ্যই...') ব্যবহার করা যাবে না", "প্রতিটি নেতিবাচক তথ্যের সাথে একটি সহানুভূতিসূচক বাক্য থাকতে হবে", বা "সম্বোধন সবসময় 'আপনি' হতে হবে, 'তুমি' নয়।"

এই ধরনের সুনির্দিষ্ট রূপান্তর মানদণ্ডকে হয় সরাসরি চেক করার (নিয়ম-ভিত্তিক) যোগ্য করে তোলে, নয়তো অন্তত একজন মানব পর্যালোচক বা LLM-judge-এর জন্য অনেক বেশি সামঞ্জস্যপূর্ণভাবে যাচাইযোগ্য করে তোলে।

অনুশীলন

  1. রুব্রিক লিখুন: একটি ইমেইল-সারসংক্ষেপ প্রম্পটের জন্য ৪-৫টি মানদণ্ডের একটি রুব্রিক লিখুন (যেমন দৈর্ঘ্য, টোন, ফরম্যাট, তথ্যের সঠিকতা)।

    উদাহরণ রুব্রিক — (১) সারসংক্ষেপ সর্বোচ্চ ৩ বাক্যে হতে হবে, (২) মূল ইমেইলের কোনো নতুন তথ্য বানানো যাবে না (grounding), (৩) কোনো action item থাকলে তা আলাদা বুলেট পয়েন্টে দেখাতে হবে, (৪) টোন নিরপেক্ষ ও পেশাদার হতে হবে, (৫) প্রেরকের নাম ও তারিখ উল্লেখ থাকতে হবে যদি মূল ইমেইলে থাকে।

  2. টেস্ট কেস তৈরি করুন: একটি "গ্রাহক অভিযোগ থেকে অগ্রাধিকার (urgent/normal/low) নির্ধারণ" প্রম্পটের জন্য ৪টি টেস্ট কেস লিখুন — একটি সাধারণ, দুটি প্রান্তিক, একটি কঠিন/দ্ব্যর্থক।

    উদাহরণ — সাধারণ: "পণ্যের রং ভুল এসেছে, ফেরত চাই" → normal। প্রান্তিক ১ (স্পষ্ট জরুরি): "গ্যাস লিক হচ্ছে, বাচ্চা বাসায় আছে" → urgent। প্রান্তিক ২ (বিনয়ী কিন্তু গুরুতর): "কোনো সমস্যা নেই, শুধু জানাতে চাইলাম পণ্যে আগুন ধরে গিয়েছিল" → urgent (এখানে টোন বিভ্রান্তিকর, কিন্তু ঘটনা গুরুতর)। কঠিন/দ্ব্যর্থক: "তৃতীয়বার একই সমস্যা, এবার ধৈর্য শেষ" → normal-থেকে-urgent-এর মাঝামাঝি, এখানে সিদ্ধান্তটা লিখে রাখুন আপনার প্রম্পট কী প্রত্যাশা করে।

  3. ডিজাইন করুন: ধরুন আপনার একটি প্রম্পট ৫টি টেস্ট কেসের মধ্যে ৪টিতে ভালো করছে, কিন্তু sarcasm-যুক্ত ইনপুটে বারবার ব্যর্থ হচ্ছে। পরবর্তী ইটারেশনে আপনি কী পরিবর্তন করবেন?

    যেহেতু ব্যর্থতা একটি নির্দিষ্ট প্যাটার্নে (sarcasm) ঘটছে, সমাধান হলো প্রম্পটে sarcasm-সংক্রান্ত একটি few-shot উদাহরণ যোগ করা (পাঠ ০৫) — sarcasm-যুক্ত একটি ইনপুট এবং তার সঠিক sentiment একটি উদাহরণ হিসেবে দেখানো। এলোমেলো সমস্ত নির্দেশনা পরিবর্তন না করে, নির্দিষ্ট ব্যর্থতার প্যাটার্নের জন্য নির্দিষ্ট সমাধান প্রয়োগ করাই পদ্ধতিগত ইটারেশনের মূল কথা।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

পূর্ববর্তী পাঠ
RAG-এর জন্য প্রম্পটিং