উদাহরণ দিয়ে শেখানো — Few-shot Prompting
এই পাঠে যা শিখবেন
- Few-shot prompting আসলে কী, এবং এটা কেন কার্যকর
- Relevant, diverse, structured — ভালো উদাহরণ বাছাইয়ের তিনটে মানদণ্ড
<example>/<examples>ট্যাগ দিয়ে উদাহরণ গঠন করা- একটা বাস্তব zero-shot বনাম few-shot উদাহরণ — কাস্টমার সাপোর্ট টিকিট শ্রেণীবিভাগ
১ · Few-shot Prompting আসলে কী?
আগের পাঠগুলোতে আমরা দেখেছি কীভাবে নির্দেশনা স্বচ্ছ করা যায় (পাঠ ০৩) এবং কারণ ব্যাখ্যা করা যায় (পাঠ ০৪)। কিন্তু কিছু কাজ আছে যেখানে শুধু কথায় বর্ণনা করার চেয়ে উদাহরণ দেখানো অনেক বেশি কার্যকর — বিশেষ করে যখন ফরম্যাট, টোন বা কাঠামো নির্দিষ্ট হওয়া দরকার। একে বলা হয় Few-shot PromptingFew-shot / Multishot Promptingনির্দেশনার সাথে একাধিক input/output উদাহরণ জুড়ে দেওয়া, যাতে মডেল উদাহরণ থেকে প্যাটার্নটা নিজে ধরে নিতে পারে — শুধু বর্ণনা পড়ে অনুমান না করে। বা multishot prompting।
OpenAI-এর নিজস্ব প্রম্পটিং গাইডে এটাকে বর্ণনা করা হয়েছে এভাবে — বৈচিত্র্যময় input/output উদাহরণ-জোড়া অন্তর্ভুক্ত করলে মডেল সেই প্যাটার্নটা implicitly ধরে নেয় এবং নতুন ইনপুটেও প্রয়োগ করে — এটা একটা মডেলকে নতুন করে fine-tune করার একটা হালকা, দ্রুত বিকল্প।
যখন আপনি একটা নিয়ম বলার বদলে ৩-৪টা উদাহরণ দেখান, মডেল সেই উদাহরণগুলোর মধ্যে থাকা কমন প্যাটার্ন (ফরম্যাট, টোন, যুক্তির ধরন) সনাক্ত করে এবং নতুন ইনপুটে সেই একই প্যাটার্ন প্রয়োগ করে। এটা কার্যকর কারণ পাঠ ০১-এ দেখা মডেলের মূল কাজ — প্যাটার্ন সনাক্ত করে পরবর্তী সম্ভাব্য টোকেন অনুমান করা — উদাহরণ দেখানোর সাথে হুবহু মিলে যায়।
২ · ভালো উদাহরণের তিনটে মানদণ্ড
যেকোনো উদাহরণ দিলেই কাজ হয় না। Anthropic-এর গাইডলাইন অনুযায়ী কার্যকর উদাহরণ তিনটে গুণ পূরণ করে —
- প্রাসঙ্গিক (Relevant): উদাহরণগুলো আপনার আসল ব্যবহারের ক্ষেত্র (use case) প্রতিফলিত করে — একটা কোড-রিভিউ প্রম্পটের উদাহরণে রান্নার রেসিপি থাকলে চলবে না।
- বৈচিত্র্যময় (Diverse): উদাহরণগুলো বিভিন্ন এজ-কেস কভার করে এবং যথেষ্ট ভিন্ন — যাতে মডেল অনিচ্ছাকৃতভাবে ভুল প্যাটার্ন (যেমন সবসময় একই দৈর্ঘ্য বা একই ধরনের ইনপুট) শিখে না নেয়।
- সুগঠিত (Structured): প্রতিটা উদাহরণ স্পষ্টভাবে চিহ্নিত — সাধারণত
<example>ট্যাগে মোড়ানো, একাধিক উদাহরণ থাকলে সবগুলো<examples>-এর ভেতরে।
কতগুলো উদাহরণ লাগবে? সাধারণত ৩ থেকে ৫টা উদাহরণই সবচেয়ে ভালো ফলাফল দেয় — এর কম হলে প্যাটার্ন স্পষ্ট নাও হতে পারে, আর অনেক বেশি হলে প্রম্পট অপ্রয়োজনীয়ভাবে লম্বা হয়ে যায় (মনে করুন পাঠ ০২-এর "ন্যূনতম প্রয়োজনীয় গঠন" নীতি)।
৩ · বাস্তব উদাহরণ — কাস্টমার সাপোর্ট টিকিট শ্রেণীবিভাগ
ধরুন আপনি একটা LLM ব্যবহার করে আসা কাস্টমার সাপোর্ট টিকিটগুলোকে স্বয়ংক্রিয়ভাবে শ্রেণীবিভাগ করতে চান — Billing,
Technical, বা General। প্রথমে দেখি একটা zero-shot (উদাহরণ ছাড়া) প্রম্পট কেমন হয়।
❌ Zero-shot (উদাহরণ ছাড়া):
Classify the following customer support ticket into one category:
Billing, Technical, or General. Respond with only the category name.
Ticket: "I was charged twice for my subscription this month."
এটা এই একটা সহজ ক্ষেত্রে ঠিকঠাক কাজ করবে ("Billing" উত্তর আসবে)। কিন্তু বাস্তব টিকিট প্রায়ই একাধিক বিষয় মিশিয়ে ফেলে, বা ভিন্নভাবে শ্রেণীবিভাগ করা যেতে পারে এমন অস্পষ্ট ভাষা ব্যবহার করে — সেখানে zero-shot প্রম্পট অসামঞ্জস্যপূর্ণ সিদ্ধান্ত নিতে পারে, কারণ মডেলের কাছে ঠিক কোন যুক্তিতে শ্রেণীবিভাগ করতে হবে তার কোনো নমুনা নেই।
✅ Few-shot (উদাহরণ সহ):
Classify each customer support ticket into exactly one category:
Billing, Technical, or General. Respond with only the category name.
<examples>
<example>
Ticket: "I was charged twice for my subscription this month."
Category: Billing
</example>
<example>
Ticket: "The app crashes every time I try to upload a photo."
Category: Technical
</example>
<example>
Ticket: "I can't log in, and it also charged my card for a plan I
cancelled last week."
Category: Billing
</example>
<example>
Ticket: "What are your customer support hours?"
Category: General
</example>
</examples>
Ticket: "My export keeps failing halfway through with no error message."
লক্ষ্য করুন — তৃতীয় উদাহরণটা ইচ্ছাকৃতভাবে জটিল (লগইন সমস্যা + বিলিং সমস্যা একসাথে), এবং তার সমাধান "Billing" দেখানো হয়েছে কারণ আর্থিক চার্জই আসল অগ্রাধিকারের বিষয়। এই একটা উদাহরণই মডেলকে শেখায় কীভাবে মিশ্র টিকিটে অগ্রাধিকার ঠিক করতে হয় — এই তথ্যটা শুধু "নিয়ম" বলে বোঝানো কঠিন, কিন্তু একটা উদাহরণ দিয়ে তাৎক্ষণিকভাবে স্পষ্ট।
৪ · আরেকটা প্যাটার্ন — টেক্সট থেকে স্ট্রাকচার্ড ডেটা বের করা
Few-shot prompting শুধু শ্রেণীবিভাগেই সীমাবদ্ধ নয় — এটা টেক্সট থেকে গঠিত (structured) তথ্য বের করার ক্ষেত্রেও সমানভাবে কার্যকর। ধরুন আপনি প্রোডাক্ট রিভিউ থেকে একটা নির্দিষ্ট JSON ফরম্যাটে তথ্য বের করতে চান।
Extract the product name, sentiment (positive/negative/neutral), and
any mentioned defect from each review, formatted as JSON.
<examples>
<example>
Review: "The SoundMax headphones sound great, but the left earpiece
stopped working after two weeks."
Output: {"product": "SoundMax headphones", "sentiment": "negative",
"defect": "left earpiece stopped working"}
</example>
<example>
Review: "Love my new BrewFast kettle, boils water in under two minutes!"
Output: {"product": "BrewFast kettle", "sentiment": "positive",
"defect": null}
</example>
</examples>
Review: "The FitTrack band's screen is nice but the battery barely
lasts a day."
এখানে দুটো উদাহরণ একসাথে তিনটে জিনিস শিখিয়ে দিচ্ছে — আউটপুট JSON ফরম্যাটে থাকবে, কী-নামগুলো ঠিক কী হবে, এবং যখন
কোনো ত্রুটি উল্লেখ নেই তখন defect-এর মান null হবে। এই তিনটে নিয়ম আলাদাভাবে গদ্যে লিখলে
প্রম্পট অনেক লম্বা হয়ে যেত, এবং তবুও এতটা স্পষ্ট হতো না।
যখনই আপনার প্রয়োজন একটা নির্দিষ্ট ফরম্যাট, টোন বা যুক্তির ধরন — যা গদ্যে ব্যাখ্যা করা কঠিন বা দীর্ঘ হয়ে যায় — তখন ৩-৫টা প্রাসঙ্গিক, বৈচিত্র্যময় ও সুগঠিত উদাহরণ দিন। এটা প্রায়ই একটা লম্বা নিয়মের তালিকার চেয়ে দ্রুত এবং অনেক বেশি নির্ভরযোগ্য ফলাফল দেয়।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ যদি সব উদাহরণ একই রকম দৈর্ঘ্যের বা একই কাঠামোর হয়, তাহলে কী সমস্যা হতে পারে?
মডেল হয়তো সেই "কাকতালীয়" প্যাটার্নটাও শিখে নেবে যা আপনি আসলে শেখাতে চাননি। যেমন, যদি সব উদাহরণ টিকিট এক বাক্যের হয়, মডেল ভুলভাবে ধরে নিতে পারে যে ইনপুট সবসময় একটা মাত্র বাক্য হবে, এবং লম্বা, একাধিক-বাক্যের টিকিটে কম নির্ভরযোগ্যভাবে কাজ করতে পারে।
এটাই "বৈচিত্র্যময়" মানদণ্ডের আসল কারণ — উদাহরণে ইচ্ছাকৃতভাবে দৈর্ঘ্য, জটিলতা ও কাঠামোয় ভিন্নতা রাখলে মডেল শুধু আসল প্যাটার্নটা (যেমন ক্যাটাগরি নির্ধারণের যুক্তি) শেখে, বাড়তি অপ্রাসঙ্গিক প্যাটার্ন নয়।
প্র ০২ Few-shot prompting কি fine-tuning-এর সম্পূর্ণ বিকল্প, নাকি এর একটা সীমা আছে?
এর একটা স্পষ্ট সীমা আছে। Few-shot prompting দ্রুত ও নমনীয় — কোনো ট্রেনিং ছাড়াই তাৎক্ষণিকভাবে প্যাটার্ন পরিবর্তন করা যায়, কিন্তু প্রতিটা API কলে এই উদাহরণগুলো প্রম্পটে পাঠাতে হয় (টোকেন-খরচ যোগ হয়, যদিও প্রম্পট ক্যাশিং দিয়ে এটা অনেকটা কমানো যায় — পাঠ ১৬)। Fine-tuning একবার প্রশিক্ষণ দিয়ে মডেলের ওজনেই প্যাটার্ন স্থায়ীভাবে বসিয়ে দেয়, তাই প্রতিবার উদাহরণ পাঠানোর প্রয়োজন হয় না।
ব্যবহারিকভাবে — অল্প সংখ্যক প্যাটার্ন বা দ্রুত পরিবর্তনশীল প্রয়োজনে few-shot prompting যথেষ্ট এবং সহজ; বিশাল স্কেলে, খুব নির্দিষ্ট এবং স্থিতিশীল একটা আচরণ দরকার হলে fine-tuning বেশি লাভজনক হতে পারে।
প্র ০৩ উদাহরণে একটা ভুল বা অসামঞ্জস্যপূর্ণ প্যাটার্ন থাকলে কী হবে?
মডেল সেই ভুলটাও প্যাটার্ন হিসেবে ধরে নেবে এবং পুনরাবৃত্তি করবে — কারণ মডেল উদাহরণকে "সত্য" ধরে নেয়, যাচাই করে না। যদি চারটে উদাহরণের মধ্যে একটাতে ভুল ক্যাটাগরি দেওয়া থাকে, নতুন ইনপুটে একই রকম ভুল হওয়ার সম্ভাবনা বেড়ে যায়।
এই কারণেই few-shot উদাহরণ লেখার পর সেগুলো নিজে যত্ন সহকারে যাচাই করা জরুরি — একে বলা যায় প্রম্পটের একটা "কোয়ালিটি কন্ট্রোল" ধাপ, ঠিক যেমন কোড লেখার পর তা রিভিউ করা হয়।
অনুশীলন
-
উদাহরণ লিখুন: একটা প্রম্পট বানান যা সংবাদ শিরোনাম থেকে "রাজনীতি", "খেলাধুলা", বা "প্রযুক্তি"
ক্যাটাগরি বের করে — অন্তত ৩টা প্রাসঙ্গিক ও বৈচিত্র্যময় few-shot উদাহরণসহ।
একটা ভালো সেট হতে পারে — একটা সরাসরি রাজনৈতিক শিরোনাম ("প্রধানমন্ত্রী নতুন বাজেট ঘোষণা করলেন" → রাজনীতি), একটা সরাসরি খেলাধুলার শিরোনাম ("বাংলাদেশ ক্রিকেট দল সিরিজ জিতল" → খেলাধুলা), এবং একটা মিশ্র শিরোনাম যেখানে একটা মন্ত্রণালয় প্রযুক্তি নীতি ঘোষণা করেছে ("সরকার নতুন ডিজিটাল নীতি অনুমোদন করল" → প্রযুক্তি, কারণ বিষয়বস্তু প্রযুক্তি-কেন্দ্রিক যদিও উৎস সরকারি) — এই শেষ উদাহরণটা মডেলকে শেখাবে যে ক্যাটাগরি বিষয়বস্তুর উপর নির্ভর করে, শুধু সোর্সের উপর না।
-
শনাক্ত করুন: নিচের few-shot সেটে কী সমস্যা আছে? "উদাহরণ ১: 'দারুণ প্রোডাক্ট!' → Positive।
উদাহরণ ২: 'ভালো লেগেছে।' → Positive। উদাহরণ ৩: 'চমৎকার অভিজ্ঞতা।' → Positive।"
তিনটে উদাহরণই Positive sentiment-এর — কোনো Negative বা Neutral উদাহরণ নেই। এটা "বৈচিত্র্যময়" মানদণ্ডের লঙ্ঘন। মডেল হয়তো ভাববে সব ইনপুটই Positive হওয়া উচিত, বা Negative/Neutral চিহ্নিত করার ক্ষেত্রে কম নির্ভরযোগ্য হবে, কারণ তাকে সেই প্যাটার্নের কোনো নমুনাই দেখানো হয়নি।
-
সিদ্ধান্ত নিন: "আজকের আবহাওয়া কেমন?" এই ধরনের সাধারণ প্রশ্নের উত্তর দেওয়ার প্রম্পটে কি few-shot
উদাহরণ প্রয়োজন, নাকি এটা অপ্রয়োজনীয় বাড়তি জটিলতা?
এখানে few-shot উদাহরণ সাধারণত অপ্রয়োজনীয়। প্রশ্নটা সহজ, উত্তরের ফরম্যাট বা টোন নিয়ে বিশেষ কোনো জটিলতা নেই, এবং মডেল ইতিমধ্যেই এই ধরনের প্রশ্নে ভালো ফলাফল দেয়। পাঠ ০২-এর "ন্যূনতম প্রয়োজনীয় গঠন" নীতি অনুযায়ী — যেখানে সহজ নির্দেশনাই যথেষ্ট, সেখানে বাড়তি উদাহরণ শুধু টোকেন-খরচ বাড়ায়, বাস্তব লাভ ছাড়াই।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
-
পরবর্তী পাঠ · প্রম্পট গঠন করা — XML ট্যাগ ও Markdown সেকশন পাঠ ০৬
<example>ট্যাগের বাইরেও — জটিল প্রম্পটকে কীভাবে পুরোপুরি সংগঠিত করা যায়। - আগের পাঠ · প্রসঙ্গ ও কারণ যোগ করা পাঠ ০৪ শুধু নিয়ম নয়, কারণ ব্যাখ্যা করলে মডেল কীভাবে আরও ভালোভাবে সাধারণীকরণ করে।
- সব AI Courses দেখুন ABCL TECH AI Foundations, Python for AI, Machine Learning, Deep Learning, NLP ও LLM, Prompt Engineering — সব এক জায়গায়।
- AI সংবাদ ও সাম্প্রতিক ঘটনাবলি Blog ABCL TECH-এর বাংলা AI সংবাদ — Claude, GPT, Gemini-এর নতুন মডেল ও আপডেট নিয়ে।