सॉफ़्टवेयर डेवलपमेंट के लिए प्रॉम्प्ट इंजीनियरिंग पैटर्न
सभी प्रॉम्प्ट अच्छा कोड नहीं बनाते। ये युद्ध-परीक्षित पैटर्न आपको हर बार AI असिस्टेंट से बेहतर परिणाम पाने में मदद करेंगे जब आप चैट खोलते हैं।
प्रॉम्प्ट इंजीनियरिंग आधुनिक सॉफ़्टवेयर डेवलपमेंट में सबसे मूल्यवान कौशलों में से एक बन गई है। एक प्रॉम्प्ट जो काम करने योग्य, रखरखाव योग्य कोड बनाता है और जो एक टूटी-फूटी गड़बड़ी पैदा करता है, के बीच का अंतर अक्सर सूक्ष्म होता है — संदर्भ के कुछ शब्द, एक बाधा जो जल्दी बताई गई, या एक उदाहरण जो समस्या को सही ढंग से फ्रेम करता है। यह लेख उन पैटर्न को संकलित करता है जो लगातार अच्छे परिणाम देते हैं, उस कार्य के प्रकार के अनुसार व्यवस्थित जिसे आप हल कर रहे हैं।
ये पैटर्न सैद्धांतिक नहीं हैं। वे प्रोडक्शन कोडबेस में AI कोडिंग असिस्टेंट के साथ हजारों वास्तविक इंटरैक्शन से निष्कर्षित हैं। प्रत्येक पैटर्न में एक ठोस उदाहरण और एक स्पष्टीकरण शामिल है कि यह क्यों काम करता है, ताकि आप इसे अपने स्वयं के टूल और वर्कफ़्लो के अनुकूल बना सकें।
पैटर्न 1: द कॉन्टेक्स्ट सैंडविच
डेवलपर्स द्वारा AI को प्रॉम्प्ट करते समय सबसे आम गलती बहुत कम संदर्भ प्रदान करना है। वे आसपास के सिस्टम, बाधाओं, या उन अपेक्षाओं का वर्णन किए बिना एक फ़ंक्शन माँगते हैं। AI तब उचित धारणाएँ बनाता है जो उनके विशिष्ट कोडबेस के लिए गलत होती हैं, और परिणाम को भारी संपादन की आवश्यकता होती है।
कॉन्टेक्स्ट सैंडविच इसे हर प्रॉम्प्ट को तीन परतों में संरचित करके ठीक करता है: आप क्या बना रहे हैं, कौन सी बाधाएँ लागू होती हैं, और सफलता कैसी दिखती है।
- ऊपरी परत — लक्ष्य: आप जो चाहते हैं उसे एक स्पष्ट वाक्य में वर्णित करें। यह एकमात्र हिस्सा है जो अधिकतर डेवलपर शामिल करते हैं।
- मध्य परत — बाधाएँ: गैर-परक्राम्य को सूचीबद्ध करें। लाइब्रेरी संस्करण, शैली परंपराएँ, प्रदर्शन आवश्यकताएँ, एज केस जिन्हें संभालना होगा।
- निचली परत — सत्यापन: वर्णित करें कि आप कैसे जानेंगे कि परिणाम सही है। एक परीक्षण मामला, एक अपेक्षित आउटपुट प्रारूप, या एक विशिष्ट व्यवहार की पुष्टि करने के लिए।
// Weak prompt
const result = await ai.generate("Write a function that sorts an array of users by name");
// Context Sandwich prompt
const result = await ai.generate([
"Create a compare function for sorting an array of user objects by lastName, then firstName.",
"Constraints: case-insensitive, handles missing names, TypeScript, no external libraries.",
"Verify: users.sort(compare).map(u => u.lastName) should return ['Adams', 'adams', 'Brown'].",
].join("\n\n"));कॉन्टेक्स्ट सैंडविच काम करता है क्योंकि यह हर स्तर पर अस्पष्टता को कम करता है। AI जानता है कि आप क्या चाहते हैं, आप क्या स्वीकार नहीं करेंगे, और आप परिणाम का मूल्यांकन कैसे करेंगे। यह एकल पैटर्न अधिकांश आगे-पीछे को समाप्त करता है जो AI-सहायता प्राप्त डेवलपमेंट में समय बर्बाद करता है।
पैटर्न 2: द नेगेटिव कॉन्स्ट्रेंट
AI मॉडल आम तौर पर यह समझने में अच्छे हैं कि आप क्या चाहते हैं। वे यह समझने में अधिक संघर्ष करते हैं कि आप क्या नहीं चाहते हैं। लॉगिन फॉर्म लिखें जैसा प्रॉम्प्ट कुछ उचित उत्पन्न करेगा, लेकिन इसमें पासवर्ड जटिलता नियम शामिल हो सकते हैं जो आपका डिज़ाइन उपयोग नहीं करता, या एक रिमेम्बर-मी चेकबॉक्स जिसे आपके प्रोडक्ट मैनेजर ने पिछले स्प्रिंट में हटा दिया था।
नेगेटिव कॉन्स्ट्रेंट पैटर्न स्पष्ट रूप से बताता है कि AI को क्या टालना चाहिए। यह उम्मीद करने से अधिक प्रभावी है कि मॉडल आपके बहिष्करणों का सही अनुमान लगाएगा।
// Without negative constraints
"Build a user settings page with tabs for profile, security, and notifications."
// With negative constraints
"Build a user settings page with tabs for profile, security, and notifications.
DO NOT include: email verification flows, password strength meters, or social login buttons."नेगेटिव कॉन्स्ट्रेंट सबसे अच्छा तब काम करते हैं जब उन्हें प्रॉम्प्ट के अंत में, सकारात्मक विवरण के बाद रखा जाता है। यह इस बात को दर्शाता है कि मनुष्य निर्देशों को कैसे संसाधित करते हैं — हमें यह समझने की आवश्यकता है कि क्या पूछा गया है, इससे पहले कि हम समझ सकें कि क्या बाहर रखा गया है। AI उसी पैटर्न का अनुसरण करता है: यह सकारात्मक विवरण से मानसिक मॉडल बनाता है, फिर बहिष्करणों को शीर्ष पर फ़िल्टर के रूप में लागू करता है।
पैटर्न 3: द एग्ज़ाम्पल टेम्पलेट
जब आपको कई AI इंटरैक्शन में लगातार आउटपुट की आवश्यकता होती है — दस्तावेज़ीकरण उत्पन्न करना, परीक्षण मामले लिखना, या API प्रतिक्रियाओं को प्रारूपित करना — AI को यह बताने से कि क्या करना है, इसे दिखाना अधिक प्रभावी है। एग्ज़ाम्पल टेम्पलेट पैटर्न वांछित आउटपुट का एक या दो पूर्ण उदाहरण प्रदान करता है और फिर उसी प्रारूप में और माँगता है।
यह चैट इंटरफ़ेस के माध्यम से उपलब्ध फ़्यू-शॉट लर्निंग के सबसे करीब है। एक अच्छी तरह से चुना गया उदाहरण प्रारूप, स्वर, विस्तार के स्तर और अंतर्निहित परंपराओं को संप्रेषित करता है जिसे स्पष्ट रूप से वर्णित करने में पैराग्राफ लगेंगे।
// Example Template for generating error messages
const example = {
code: "ERR_AUTH_TOKEN_EXPIRED",
message: "Your session has expired. Please log in again.",
severity: "warning",
action: "redirect:/login",
};
const result = await ai.generate([
"Generate 5 more error objects in the same format as this example:",
JSON.stringify(example, null, 2),
"Cover: rate limiting, permission denied, not found, validation error, server error.",
].join("\n\n"));इस पैटर्न की कुंजी सही उदाहरण चुनना है। यह प्रतिनिधि होना चाहिए लेकिन एज-केस-भारी नहीं — आप चाहते हैं कि AI आपके उदाहरण से सामान्यीकरण करे, न कि उसकी विचित्रताओं की नकल करे। दो उदाहरण एक से बेहतर हैं जब आउटपुट प्रारूप में कई विविधताएँ हों, लेकिन तीन से अधिक उदाहरण शायद ही कभी मूल्य जोड़ते हैं और आपके संदर्भ विंडो का उपभोग करने लगते हैं।
पैटर्न 4: द इटरेटिव रिफ़ाइनमेंट लूप
AI से एक प्रॉम्प्ट में अंतिम, सही परिणाम माँगना एक जूनियर डेवलपर से बिना किसी पुनरावृत्ति के प्रोडक्शन कोड शिप करने के लिए कहने जैसा है। यह कभी-कभी काम करता है, लेकिन यह आमतौर पर कुछ ऐसा उत्पन्न करता है जिसमें महत्वपूर्ण पुन: कार्य की आवश्यकता होती है। इटरेटिव रिफ़ाइनमेंट लूप AI इंटरैक्शन को एक बातचीत के रूप में मानता है, व्यापक शुरू करता है और संकुचित होता जाता है।
- राउंड 1 — एक व्यापक समाधान या कंकाल उत्पन्न करें। अभी विवरण न माँगें।
- राउंड 2 — आउटपुट की समीक्षा करें और विशिष्ट दिशा दें। यह हिस्सा अच्छा है, उस हिस्से को बदलें, यह मामला जोड़ें।
- राउंड 3 — विवरण पॉलिश करें। एरर हैंडलिंग, एज केस, नामकरण, दस्तावेज़ीकरण।
प्रत्येक राउंड AI को अधिक संदर्भ देता है कि आप वास्तव में क्या चाहते हैं, क्योंकि आपकी प्रतिक्रिया उस कोड के लिए विशिष्ट होती है जो उसने अभी उत्पन्न किया। यह पहले प्रॉम्प्ट में हर विवरण का अनुमान लगाने की कोशिश करने से कहीं अधिक कुशल है। AI को भी लाभ होता है क्योंकि यह एक बार में समस्या के एक स्तर पर ध्यान केंद्रित कर सकता है — पहले संरचना, फिर विशिष्टताएँ, फिर पॉलिश।
पैटर्न 5: द रोल प्रीफ़िक्स
AI मॉडल कई डोमेन के टेक्स्ट पर प्रशिक्षित होते हैं, और वे प्रॉम्प्ट करने पर विभिन्न व्यक्तित्व धारण कर सकते हैं। रोल प्रीफ़िक्स पैटर्न स्पष्ट रूप से AI को कोड माँगने से पहले एक भूमिका और दृष्टिकोण प्रदान करता है, जो इसे उस संदर्भ के लिए उपयुक्त आउटपुट उत्पन्न करने के लिए तैयार करता है।
// Generic
"Review this function for security issues."
// Role-prefixed
"You are a security engineer reviewing a pull request. Focus on:
- Injection vulnerabilities in the SQL query construction
- Missing input validation on the user ID parameter
- Hardcoded credentials or secrets
Review this function:"रोल प्रीफ़िक्स पैटर्न विशेष रूप से समीक्षा कार्यों, रीफ़ैक्टरिंग और दस्तावेज़ीकरण उत्पादन के लिए शक्तिशाली है। जब आपको ऐसे कोड की आवश्यकता है जो एक्सेसिबिलिटी मानकों का पालन करता है, तो प्रीफ़िक्स लगाएं आप एक एक्सेसिबिलिटी विशेषज्ञ हैं। जब आप प्रदर्शन के लिए अनुकूलन कर रहे हैं, तो प्रीफ़िक्स लगाएं आप एक प्रदर्शन इंजीनियर हैं। AI अपने तर्क और आउटपुट को आपके द्वारा अनुरोधित दृष्टिकोण से मेल खाने के लिए समायोजित करता है।
पैटर्न 6: द आउटपुट कॉन्ट्रैक्ट
AI कोडिंग के साथ सबसे निराशाजनक अनुभवों में से एक है ऐसा उत्तर प्राप्त करना जो सही दिखता है लेकिन सूक्ष्म रूप से आउटपुट प्रारूप बदल देता है, व्याख्यात्मक पाठ जोड़ता है जो आपने नहीं माँगा, या महत्वपूर्ण भागों को छोड़ देता है। आउटपुट कॉन्ट्रैक्ट पैटर्न यह निर्दिष्ट करके इसे रोकता है कि रिस्पॉन्स में वास्तव में क्या होना चाहिए और, उतना ही महत्वपूर्ण, इसमें क्या नहीं होना चाहिए।
"Generate a React component for a file upload button.
Output contract:
- Return ONLY the component code in a single code block
- No explanation text before or after
- Include TypeScript props interface
- Include CSS module import
- Do NOT include usage examples or test files
- File name: FileUpload.tsx"आउटपुट कॉन्ट्रैक्ट विशेष रूप से मूल्यवान है जब आप AI आउटपुट को किसी अन्य टूल या वर्कफ़्लो में पाइप कर रहे हैं। यदि रिस्पॉन्स हमेशा एक ही संरचना का पालन करता है, तो आप इसे विश्वसनीय रूप से पार्स कर सकते हैं। यह पैटर्न स्वचालित AI-सहायता प्राप्त पाइपलाइनों के निर्माण की नींव है जिन्हें सुसंगत स्वरूपण की आवश्यकता होती है।
पैटर्न 7: द कॉन्टेक्स्ट विंडो बजट
हर AI मॉडल की एक सीमित संदर्भ विंडो होती है। जब आप बहुत अधिक कोड, दस्तावेज़ीकरण, या बातचीत का इतिहास पेस्ट करते हैं, तो मॉडल भूलने या मतिभ्रम करने लगता है। कॉन्टेक्स्ट विंडो बजट पैटर्न संदर्भ विंडो को एक दुर्लभ संसाधन मानता है और इसे जानबूझकर आवंटित करता है।
- अपने बजट का 60% सबसे प्रासंगिक कोड और कार्य विवरण को आवंटित करें।
- 20% उन उदाहरणों और बाधाओं को आवंटित करें जो कार्य को स्पष्ट करते हैं।
- 20% AI के रिस्पॉन्स स्पेस के लिए आरक्षित रखें — यदि विंडो भरी है, तो आउटपुट काट दिया जाएगा।
जब आपके पास विंडो में फिट होने से अधिक संदर्भ हो, तो सबसे विशिष्ट और प्रासंगिक भागों को प्राथमिकता दें। एक केंद्रित प्रॉम्प्ट जिसमें एक सावधानी से चुनी गई फ़ाइल हो, एक व्यापक प्रॉम्प्ट से अधिक प्रभावी है जिसमें पाँच ढीली-संबंधित फ़ाइलें हों। यदि आवश्यक हो तो AI अधिक संदर्भ माँग सकता है — बातचीत की शुरुआत में ही उसे ऐसा करने की अनुमति दें।
एक केंद्रित प्रॉम्प्ट जिसमें एक सावधानी से चुनी गई फ़ाइल हो, लगातार एक बिखरे हुए प्रॉम्प्ट से बेहतर प्रदर्शन करता है जिसमें पाँच फ़ाइलें हों जिन्हें AI मुश्किल से देख सके।
पैटर्न 8: द स्कैफ़ोल्ड-देन-डिटेल सीक्वेंस
जटिल सुविधाओं में कई चलने वाले हिस्से होते हैं। AI से उन सभी को एक साथ उत्पन्न करने के लिए कहना एक उलझा हुआ परिणाम उत्पन्न करता है जहाँ स्टेट मैनेजमेंट, API कॉल और UI रेंडरिंग को अलग करना मुश्किल होता है। स्कैफ़ोल्ड-देन-डिटेल अनुक्रम समस्या को दो चरणों में तोड़ता है।
पहले, AI से एक स्कैफ़ोल्ड उत्पन्न करने के लिए कहें: कार्यान्वयन विवरण के बिना टाइप डेफ़िनिशन, इंटरफ़ेस और सुविधा की उच्च-स्तरीय संरचना। इस स्कैफ़ोल्ड की समीक्षा करें और पुष्टि करें कि यह आपके मानसिक मॉडल से मेल खाता है। तभी AI से विवरण भरने के लिए कहें — कार्यान्वयन, त्रुटि प्रबंधन, एज केस — एक बार में एक परत।
// Phase 1 — Scaffold
"Design the type structure for a multi-step checkout flow. List the interfaces, enums, and state machine transitions. Do not write implementation yet."
// Phase 2 — Detail (after reviewing scaffold)
"Implement the checkout state machine from the types we agreed on. Include transition validation and error states."यह पैटर्न सबसे महंगी तरह के पुन: कार्य को रोकता है: कार्यान्वयन पूरा होने के बाद संरचना को बदलना। पहले स्कैफ़ोल्ड पर सहमत होकर, आप सुनिश्चित करते हैं कि AI एक ऐसी नींव पर बनाता है जो आपकी आर्किटेक्चर से मेल खाती है, न कि किसी काल्पनिक से।
पैटर्न को एक साथ रखना
ये आठ पैटर्न संयुक्त होने पर सबसे अच्छा काम करते हैं। एक सामान्य सत्र कॉन्टेक्स्ट सैंडविच से शुरू हो सकता है ताकि अनुरोध को फ्रेम किया जा सके, नेगेटिव कॉन्स्ट्रेंट का उपयोग करके अवांछित दृष्टिकोणों को बाहर किया जा सके, इटरेटिव रिफ़ाइनमेंट लूप का पालन करके सही समाधान पर पहुँचा जा सके, और आउटपुट कॉन्ट्रैक्ट के साथ समाप्त किया जा सके ताकि एक साफ़, पार्स करने योग्य परिणाम मिले।
जितना अधिक आप इन पैटर्न का अभ्यास करेंगे, वे उतने ही स्वाभाविक हो जाएंगे। कुछ दिनों में, आप स्वयं को सहज रूप से प्रॉम्प्ट को कॉन्टेक्स्ट सैंडविच के रूप में संरचित करते हुए और बिना सोचे नेगेटिव कॉन्स्ट्रेंट जोड़ते हुए पाएंगे। तब AI-सहायता प्राप्त डेवलपमेंट एक कभी-कभी सहायक उपकरण से आपके कार्यप्रवाह के लगातार विश्वसनीय हिस्से में बदल जाता है।
AI असिस्टेंट के साथ प्रत्येक इंटरैक्शन एक निवेश है। एक अच्छी तरह से संरचित प्रॉम्प्ट लिखने में तीस अतिरिक्त सेकंड लगते हैं लेकिन घंटों की आगे-पीछे बचाता है। सौ इंटरैक्शन में, वे तीस सेकंड दिनों के बचाए गए समय में बदल जाते हैं — और निराशा और प्रवाह के बीच का अंतर।
