পাঠ ১২ · ২৮-এর মধ্যে

OpenAI / GPT-এর অফিসিয়াল গাইডলাইন

OpenAI's official prompting guidelines
১১ মিনিট পড়া মধ্যম-উচ্চ · Intermediate পাঠ ০১-০৩ জানা থাকা ভালো সম্পূর্ণ বাংলায়

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

  • developer বনাম user মেসেজ রোল এবং ইনস্ট্রাকশন হায়ারার্কি কীভাবে কাজ করে
  • Identity / Instructions / Examples / Context — এই চার-অংশের কাঠামো কীভাবে প্রম্পটকে নির্ভরযোগ্য করে
  • স্ট্যান্ডার্ড মডেল বনাম রিজনিং মডেলের জন্য সম্পূর্ণ ভিন্ন প্রম্পটিং কৌশল
  • প্রম্পট ক্যাশিং ও কোড-ভার্সনড প্রম্পট — প্রোডাকশনে খরচ ও নির্ভরযোগ্যতা বাড়ানোর দুটি বাস্তব অভ্যাস

১ · Developer বনাম User মেসেজ — ইনস্ট্রাকশন হায়ারার্কি

OpenAI-র API-তে প্রম্পট পাঠানোর সময় দুটি প্রধান মেসেজ রোল ব্যবহার হয় — developer মেসেজDeveloper Messageঅ্যাপ্লিকেশন ডেভেলপার কর্তৃক লেখা নির্দেশনা — মডেলের আচরণ, নিয়ম ও সীমা নির্ধারণ করে। এটি সবসময় user মেসেজের চেয়ে বেশি অগ্রাধিকার পায়। এবং user মেসেজ। developer মেসেজ লেখেন যিনি অ্যাপ্লিকেশনটি বানাচ্ছেন — অর্থাৎ নিয়ম, সীমা, টোন, ফরম্যাট। user মেসেজ আসে শেষ-ব্যবহারকারীর কাছ থেকে — তার প্রশ্ন বা অনুরোধ।

উপমা · Analogy

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

এই ধারণাটা Claude-এর system/user বিভাজনের সাথে অনেকটা মিলে যায়, কিন্তু হুবহু এক নয় — নামকরণ, ডিফল্ট আচরণ ও অগ্রাধিকারের বিস্তারিত নিয়ম প্রোভাইডারভেদে আলাদা। এই তিন প্রোভাইডারের রোল-মেকানিজম পাশাপাশি রেখে সম্পূর্ণ তুলনা আমরা দেখব পাঠ ১৪-এ।

২ · গঠনবদ্ধ প্রম্পট আর্কিটেকচার — Identity, Instructions, Examples, Context

OpenAI-র অফিসিয়াল গাইড একটি নির্দিষ্ট কাঠামো সুপারিশ করে — প্রম্পটকে চারটি আলাদা, স্পষ্টভাবে লেবেল করা অংশে ভাগ করা। Markdown হেডার ও তালিকা দিয়ে প্রতিটি অংশ আলাদা করা হয়; প্রয়োজনে XML ট্যাগ দিয়েও একটি অংশ কোথায় শুরু আর কোথায় শেষ হচ্ছে তা স্পষ্ট করা যায় (যেমনটা পাঠ ০৬-এ বিস্তারিত দেখেছেন)।

Developer message
# Identity
তুমি একটি ই-কমার্স সাপোর্ট সহকারী, বাংলাদেশি গ্রাহকদের জন্য কাজ করো।

# Instructions
- সবসময় বাংলায় উত্তর দাও, বিনয়ী ও সংক্ষিপ্তভাবে।
- অর্ডার-স্ট্যাটাস প্রশ্নে সবসময় অর্ডার আইডি চাও যদি দেওয়া না থাকে।
- রিফান্ড নীতি নিয়ে অনিশ্চিত হলে অনুমান না করে "সাপোর্ট টিমের সাথে যোগাযোগ করুন" বলো।

# Examples
<example>
Input: আমার অর্ডার কবে আসবে?
Output: অবশ্যই সাহায্য করব। আপনার অর্ডার আইডিটা একটু দিন তো?
</example>

# Context
{{কাস্টমার প্রোফাইল ও সাম্প্রতিক অর্ডার ডেটা এখানে ইনজেক্ট হবে}}

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

৩ · Few-shot Learning — উদাহরণ থেকে প্যাটার্ন শেখা

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

৪ · কনটেক্সচুয়াল গ্রাউন্ডিং ও RAG-এর জন্য ইনপুট

মডেলের প্রশিক্ষণ ডেটার বাইরে থাকা তথ্য — যেমন আপনার কোম্পানির প্রোডাক্ট ক্যাটালগ, অভ্যন্তরীণ নীতিমালা, বা সাম্প্রতিক ডেটা — সরাসরি প্রম্পটের Context অংশে যুক্ত করে দিলে মডেল তার উপর ভিত্তি করে উত্তর দিতে পারে। এই কৌশলকেই বলা হয় কনটেক্সচুয়াল গ্রাউন্ডিং, এবং এটাই RAG (Retrieval-Augmented Generation)-এর ভিত্তি — যা নিয়ে বিস্তারিত আসছে পাঠ ২৪-এ।

৫ · সবচেয়ে গুরুত্বপূর্ণ নুয়ান্স — স্ট্যান্ডার্ড মডেল বনাম রিজনিং মডেল

এখানেই OpenAI-র গাইডলাইনের সবচেয়ে ব্যবহারিক অংশ, এবং এমন একটি জায়গা যেখানে ভুল করলে আউটপুট খারাপ হয়ে যায় — কারণ দুই ধরনের মডেলের জন্য পরামর্শ সরাসরি বিপরীত।

গুরুত্বপূর্ণ পার্থক্য · Model-specific guidance

স্ট্যান্ডার্ড GPT মডেল ভালো ফল দেয় যখন প্রম্পটে প্রয়োজনীয় যুক্তি ও ডেটা স্পষ্টভাবে, ধাপে ধাপে লেখা থাকে — অর্থাৎ আপনি যতটা নির্দিষ্ট নির্দেশনা দেবেন, ফলাফল ততটাই নির্ভুল হবে। কিন্তু রিজনিং মডেলReasoning Modelএমন মডেল যা উত্তর দেওয়ার আগে নিজে থেকেই অভ্যন্তরীণভাবে ধাপে-ধাপে চিন্তা করে — এই অভ্যন্তরীণ চিন্তা ব্যবহারকারীর কাছে সরাসরি দেখানো নাও হতে পারে।-এর ক্ষেত্রে ঠিক উল্টো — এই মডেলগুলো শুধু উচ্চ-স্তরের লক্ষ্য ও প্রত্যাশিত আউটপুট জানলেই যথেষ্ট, কারণ ধাপে-ধাপে যুক্তিটা মডেল নিজেই অভ্যন্তরীণভাবে করে। রিজনিং মডেলকে "step by step ভাবো" বলার কোনো দরকার নেই — এটি অতিরিক্ত, এমনকি কখনো কখনো ফলাফলকে আরও বাঁধাধরা করে দিতে পারে।

❌ কম কার্যকর (রিজনিং মডেলের জন্য, অপ্রয়োজনীয়):

User message
এই কোডে বাগ খুঁজে বের করো। প্রথমে প্রতিটি ফাংশন লাইন বাই লাইন পড়ো, তারপর
প্রতিটি ভ্যারিয়েবলের টাইপ চেক করো, তারপর ধাপে ধাপে চিন্তা করে বলো সমস্যাটা কোথায়।

✅ বেশি কার্যকর (রিজনিং মডেলের জন্য):

User message
এই কোডে একটি বাগ আছে যা কখনো কখনো ভুল টোটাল হিসেব দেয়। বাগটা খুঁজে বের করে
ঠিক করো।

অর্থাৎ — মডেল কী ধরনের তা জানাটাই প্রথম সিদ্ধান্ত হওয়া উচিত। এটি লেসন ১৮-এ (মডেল ও thinking/effort সঠিকভাবে বেছে নেওয়া) আরও বিস্তারিত আলোচনা হবে। এই সাথে সাধারণ একটি নিয়মও মনে রাখা ভালো — বড় মডেল জটিল প্রম্পট বোঝায় দক্ষ, ছোট মডেল দ্রুত ও সস্তা; কাজের জটিলতা অনুযায়ী মডেল বাছাই করা উচিত, অভ্যাসের বশে নয়।

একটি সম্পর্কিত গবেষণা-ভিত্তিক পর্যবেক্ষণ — একই নির্দেশনা প্রম্পটে একাধিকবার পুনরাবৃত্তি না করে একবারই স্পষ্টভাবে লেখা ("Lean Prompts") ইভালুয়েশনে ভালো ফল দেয় এবং টোকেন খরচ উল্লেখযোগ্যভাবে কমায়। ALWAYS/NEVER/MUST-এর মতো কঠোর শব্দও শুধু সত্যিকারের নিরাপত্তা-নিয়ম বা বাধ্যতামূলক আউটপুট ফিল্ডের জন্য রাখা উচিত — অতিরিক্ত ব্যবহার তার প্রভাব কমিয়ে দেয়। এই বিষয়ে বিস্তারিত থাকছে পাঠ ১৭-এ।

৬ · প্রম্পট ক্যাশিং — স্ট্যাটিক কনটেন্ট আগে রাখুন

OpenAI-র পরামর্শ সহজ কিন্তু গুরুত্বপূর্ণ — যে কনটেন্ট বারবার একই থাকে (system/developer নির্দেশনা, টুল সংজ্ঞা, রেফারেন্স ডকুমেন্ট) সেটা সবসময় প্রম্পটের শুরুতে রাখুন, আর যেটা প্রতিবার বদলায় (ব্যবহারকারীর প্রশ্ন) রাখুন শেষে। এই ক্রম বজায় রাখলে ক্যাশিং সিস্টেম পুনরাবৃত্ত অংশটুকু চিনতে পারে এবং পুনরায় প্রসেস না করেই খরচ ও লেটেন্সি বাঁচায়। কীভাবে এটি ৯০% পর্যন্ত সাশ্রয় করতে পারে তা বিস্তারিতভাবে দেখব পাঠ ১৬-এ।

৭ · কোড-ভার্সনড প্রম্পট — প্রম্পটকে প্রোডাকশন কোডের মতো ম্যানেজ করা

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

মূল কথা · Key takeaway

OpenAI-র পুরো গাইডলাইন একটি মূল ভাবনার চারপাশে ঘোরে — কাঠামো ও শৃঙ্খলা। রোল আলাদা করুন (developer/user), প্রম্পটের অংশ আলাদা করুন (Identity/Instructions/Examples/Context), মডেলের ধরন অনুযায়ী নির্দেশনার গভীরতা বদলান, আর প্রম্পটকে প্রোডাকশন কোডের মতোই গুরুত্ব দিয়ে সংরক্ষণ ও ক্যাশ করুন।

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

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

প্র ০১ একটি রিজনিং মডেলকে যদি ভুলবশত "ধাপে ধাপে চিন্তা করো" বলে বিস্তারিত নির্দেশ দেওয়া হয়, তাহলে কী সমস্যা হতে পারে?

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

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

প্র ০২ Identity/Instructions/Examples/Context কাঠামোতে যদি আপনি Context অংশটা প্রম্পটের একদম শুরুতে না রেখে মাঝখানে রাখেন, তাহলে ক্যাশিং-এর উপর কী প্রভাব পড়তে পারে?

ক্যাশিং কাজ করে প্রম্পটের একটি অপরিবর্তিত prefix (শুরুর অংশ) চিনে। যদি Context-এর মতো প্রতিবার-বদলে-যাওয়া অংশ মাঝখানে ঢুকিয়ে দেওয়া হয়, তাহলে তার পরের সবকিছুই আর "একই prefix" থাকে না — ফলে ক্যাশ হিট মিস হয়ে যায় এবং পুরো prefix আবার নতুন করে প্রসেস করতে হয়।

তাই নিয়ম হলো — স্ট্যাটিক অংশ (Identity, Instructions, Examples) সবসময় সবচেয়ে আগে, আর যা প্রতিবার বদলায় (এই ক্ষেত্রে ডায়নামিক Context বা user-এর প্রশ্ন) সবসময় সবচেয়ে শেষে।

প্র ০৩ প্রম্পটকে "কোড-ভার্সনড" রাখা কেন শুধু ইঞ্জিনিয়ারিং সৌন্দর্যের বিষয় নয়, বরং একটি বাস্তব ঝুঁকি-ব্যবস্থাপনা কৌশল?

একটি প্রোডাকশন অ্যাপ্লিকেশনে প্রম্পট বদলানো মানে ব্যবহারকারীর অভিজ্ঞতা সরাসরি বদলে যাওয়া — ঠিক যেমন একটি ফিচার কোড বদলানো। যদি প্রম্পট এলোমেলো স্ট্রিং হিসেবে ছড়িয়ে থাকে, তাহলে কে কখন কী বদলালো, কেন বদলালো, এবং তার প্রভাব কী হলো তা ট্র্যাক করা কঠিন হয়ে যায়।

কোড-ভার্সনড প্রম্পট মানে প্রতিটি পরিবর্তন গিট হিস্ট্রিতে থাকে, কোড-রিভিউ দিয়ে যায়, এবং টেস্ট স্যুটের মাধ্যমে যাচাই করা যায় — যা একটি ভুল প্রম্পট প্রোডাকশনে চলে যাওয়ার ঝুঁকি উল্লেখযোগ্যভাবে কমিয়ে দেয়।

অনুশীলন

  1. শনাক্ত করুন: আপনার একটি প্রকল্পের জন্য একটি স্ট্যান্ডার্ড GPT মডেলে পাঠানোর প্রম্পট কল্পনা করুন যা কাস্টমার রিভিউ থেকে সেন্টিমেন্ট বের করে। Identity/Instructions/Examples/Context কাঠামো ব্যবহার করে এটি লিখুন।

    একটি ভালো উত্তরে Identity-তে "তুমি একজন সেন্টিমেন্ট বিশ্লেষক" জাতীয় ভূমিকা থাকবে, Instructions-এ আউটপুট ফরম্যাট (যেমন positive/negative/neutral + কারণ) নির্দিষ্ট থাকবে, Examples-এ ২-৩টি রিভিউ ও তাদের সঠিক লেবেল থাকবে, আর Context-এ প্রকৃত রিভিউ টেক্সটটি সবার শেষে বসবে।

  2. পুনর্লিখন করুন: "ধাপে ধাপে চিন্তা করে বলো এই গণিত সমস্যাটার সমাধান কী, প্রথমে সমস্যাটা বুঝে নাও, তারপর প্রতিটি চলক আলাদা করো, তারপর সমীকরণ বসাও, তারপর হিসেব করো" — এই প্রম্পটটি একটি রিজনিং মডেলের জন্য পুনর্লিখন করুন।

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

  3. বিশ্লেষণ করুন: আপনার কোনো একটি প্রম্পটে developer ও user নির্দেশনা যদি পরস্পরবিরোধী হয় (যেমন developer বলছে "শুধু বাংলায় উত্তর দাও" কিন্তু user ইংরেজিতে উত্তর চাইছে), মডেল কোনটা মেনে চলবে বলে আপনি মনে করেন এবং কেন?

    ইনস্ট্রাকশন হায়ারার্কি অনুযায়ী developer মেসেজ user মেসেজের চেয়ে বেশি অগ্রাধিকার পায় — তাই সাধারণত মডেল বাংলাতেই উত্তর দেবে, কারণ এটি অ্যাপ্লিকেশন-স্তরের নিয়ম হিসেবে নির্ধারিত। এই কারণেই developer মেসেজে এমন নিয়ম রাখা উচিত যা সত্যিকারের অ্যাপ্লিকেশন-প্রয়োজনীয়তা প্রতিফলিত করে, নাহলে ব্যবহারকারীর ন্যায্য অনুরোধও ব্লক হয়ে যেতে পারে।

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

আগের পাঠ
Claude (Anthropic)-এর অফিসিয়াল গাইডলাইন