इकाई 1 / 12

सॉफ़्टवेयर टीमों के लिए कृत्रिम बुद्धिमत्ता: कार्यशील मॉडल और सीमाएँ

लाभ:

  • यह समझाने की क्षमता कि एक कोडिंग सहायक एक भाषा मॉडल और टोकन, संदर्भ विंडो, मतिभ्रम की अवधारणाओं के रूप में कैसे काम करता है
  • ऐसे सॉफ़्टवेयर कार्यों में अंतर करने की क्षमता जहां एआई मानसिक मानचित्र के साथ मजबूत और कमज़ोर है
  • प्रस्ताव-उत्पादन-सत्यापन के बुनियादी कार्य चक्र को अपने कार्यों में लागू करने की क्षमता

एक सॉफ़्टवेयर डेवलपर का दिन शायद ही कभी "स्क्रैच से कोड लिखने" में व्यतीत होता है। रियल टाइम; किसी अन्य द्वारा लिखे गए कोड को पढ़ना, बग को पुन: उत्पन्न करने का प्रयास करना, लॉग को स्कैन करना (चलते समय एप्लिकेशन द्वारा उत्पादित लॉग लाइनें), परीक्षण लिखना, पीआर लिखना (पुल अनुरोध - एक मर्ज अनुरोध जहां टीम समीक्षा के लिए एक कोड परिवर्तन सबमिट किया जाता है) स्पष्टीकरण और दस्तावेज़ीकरण को अद्यतन करना। आर्टिफिशियल इंटेलिजेंस (एआई) एक गति गुणक है जो इन सभी अनदेखी नौकरियों को छू सकता है। लेकिन इसे सुरक्षित रूप से उपयोग करने की पहली शर्त सही ढंग से समझना है कि यह क्या है और क्या नहीं है।

इस इकाई में, हम सबसे पहले कोडिंग सहायक की अंतर्निहित तकनीक को सरल भाषा में समझाते हैं; फिर हम मॉडल की ताकत और कमजोरियों का एक मानसिक मानचित्र बनाते हैं; अंत में, हम बुनियादी कामकाजी अनुशासन स्थापित करते हैं जिसे हम पूरे मॉड्यूल में उपयोग करेंगे: प्रस्ताव, उत्पादन, सत्यापन। ये तीन चरण अगली ग्यारह इकाइयों की रीढ़ हैं।

नोट: यह मॉड्यूल एक सामान्य प्रशिक्षण है। सुरक्षा-महत्वपूर्ण सॉफ़्टवेयर (भुगतान प्रसंस्करण, स्वास्थ्य देखभाल, प्रमाणीकरण, महत्वपूर्ण बुनियादी ढांचे) में एआई आउटपुट एक योग्य इंजीनियर द्वारा समीक्षा और अनुमोदन का विकल्प नहीं है। एआई एक सहायक है; हस्ताक्षरकर्ता इंजीनियर है.

एक कोडिंग सहायक वास्तव में क्या करता है?

अधिकांश कोडिंग सहायक एक बड़े भाषा मॉडल पर बनाए जाते हैं (एलएलएम-एक एआई जो बड़ी मात्रा में टेक्स्ट और कोड पर प्रशिक्षित होता है जो अगले सबसे संभावित "खंड" की भविष्यवाणी करता है)। मॉडल मनुष्य की तरह कोड को "समझ" नहीं पाता है; यह आपके द्वारा दिए गए संदर्भ की सबसे संभावित निरंतरता उत्पन्न करता है, उदाहरणों के विशाल पूल से सीखे गए पैटर्न के आधार पर। यह प्रतीत होता है कि सरल तंत्र व्यवहार में आश्चर्यजनक रूप से कुशल परिणाम देता है - क्योंकि अधिकांश सॉफ़्टवेयर में दोहराए जाने वाले पैटर्न होते हैं: एक HTTP अनुरोध, एक लूप, एक शून्य जांच, एक परीक्षण पैटर्न।

यहां तीन पद महत्वपूर्ण हैं। टोकन सबसे छोटी इकाई है जिसे मॉडल पाठ को विभाजित करके संसाधित करता है; यह मोटे तौर पर कुछ अक्षर या एक शब्द का हिस्सा है। संदर्भ विंडो टोकन की वह मात्रा है जिसे मॉडल एक बार में "देख" सकता है; आपका कोड, त्रुटि संदेश और निर्देश इस विंडो में फिट होने चाहिए। प्रॉम्प्ट आपके द्वारा मॉडल को दिए गए सभी निर्देश और संदर्भ हैं। आपके द्वारा प्राप्त आउटपुट की गुणवत्ता सीधे तौर पर इन दोनों पर निर्भर करती है: आप मॉडल को जितना बेहतर संदर्भ और स्पष्ट निर्देश देंगे, आपको उतना ही बेहतर परिणाम मिलेगा। खराब इनपुट खराब आउटपुट उत्पन्न करता है, भले ही वह एक स्मार्ट मॉडल हो - सॉफ्टवेयर का क्लासिक "कचरा अंदर, कचरा बाहर" नियम एआई पर भी लागू होता है।

ताकत और कमजोरियों का नक्शा

एआई को सही नौकरियों की ओर निर्देशित करने के लिए, यह जानना आवश्यक है कि यह कहाँ चमकता है और कहाँ लड़खड़ाता है। इस मानचित्र को याद रखने से आप प्रत्येक अगले मिशन के साथ आश्चर्यचकित होंगे, "क्या मुझे यह काम एआई को आउटसोर्स करना चाहिए या इसे स्वयं करना चाहिए?" यह आपको सेकंडों में प्रश्न का उत्तर देने की अनुमति देता है।

इसकी ताकतें हैं: बॉयलरप्लेट कोड उत्पन्न करना, एक भाषा से दूसरी भाषा में अनुवाद करना, एक नियमित अभिव्यक्ति (रेगेक्स) लिखना, एक फ़ंक्शन का वर्णन करना, एक परीक्षण कंकाल बनाना, एक त्रुटि संदेश की व्याख्या करना, दस्तावेज तैयार करना, चर/फ़ंक्शन नामों का सुझाव देना, और मामूली रिफैक्टरिंग (इसके व्यवहार को बदले बिना कोड की संरचना में सुधार करना)।

कमजोरियाँ: आपकी कंपनी-विशिष्ट व्यावसायिक नियमों को जानना, आपके संपूर्ण कोड आधार को याद रखना, वास्तव में कोड को चलाना और सत्यापित करना, नवीनतम लाइब्रेरी संस्करणों को निश्चित रूप से जानना, सौ प्रतिशत गारंटी के साथ सुरक्षा कमजोरियों का पता लगाना। सबसे खतरनाक चीज़ मतिभ्रम है: मॉडल एक गैर-मौजूद फ़ंक्शन, लाइब्रेरी या एपीआई (इंटरफ़ेस जो अनुप्रयोगों के बीच डेटा विनिमय को सक्षम बनाता है) का बहुत ही ठोस भाषा में आविष्कार करता है। यह जोखिम वास्तव में आपके लाभ के लिए हो सकता है, क्योंकि कोड, सादे पाठ के विपरीत, यह देखने के लिए परीक्षण किया जा सकता है कि क्या यह "काम करता है" - बस सत्यापन चरण को न छोड़ें।

मिशन प्रकार

एआई की भूमिका

आदमी की भूमिका

बॉयलरप्लेट/कंकाल तैयार करें

ड्राफ्ट उत्पन्न करता है

अनुकूलन, समीक्षा

कोड विवरण

एक त्वरित सारांश देता है

कोड में महत्वपूर्ण भाग को सत्यापित करता है

लेखन परीक्षण

मामला बताता है

कवरेज और सटीकता की पुष्टि करता है

सुरक्षा-महत्वपूर्ण तर्क

उपयोगी विचार

निर्णय और जिम्मेदारी पूरी तरह से मनुष्यों पर निर्भर है।

एपीआई/लाइब्रेरी उपयोग

नमूना उत्पन्न करता है

अस्तित्व और संस्करण की पुष्टि करता है

वास्तु निर्णय

तरह-तरह के विकल्प

संदर्भ को जानकर चयन करता है और बचाव करता है

चरण दर चरण: बुनियादी कार्य चक्र

  1. कार्य स्पष्ट करें. यदि आप एक वाक्य में वह नहीं लिख सकते जो आप चाहते हैं, तो मॉडल भी नहीं लिख सकता। जितनी जल्दी अनिश्चितता इनपुट में प्रवेश करती है, आउटपुट में उतनी ही अधिक वृद्धि होती है।
  2. संदर्भ दीजिए. प्रॉम्प्ट में प्रासंगिक कोड, पूर्ण त्रुटि संदेश, भाषा/फ्रेमवर्क संस्करण और बाधाएं जोड़ें। यह मत कहो कि "इसे ठीक करो", कहो "पायथन 3.11, फास्टएपीआई 0.110; यह फ़ंक्शन 500 त्रुटि देता है, अनुरोध का मुख्य भाग खाली होने पर यह फट जाता है"।
  3. अधिरोपण भूमिका और प्रारूप. "आप एक वरिष्ठ गो डेवलपर हैं; बस कोड और दो-वाक्य का तर्क दें" जैसी रूपरेखा आउटपुट पर ध्यान केंद्रित करती है।
  4. छोटा मांगो. इसे एक विशाल अनुरोध के बजाय चरणों में तोड़ें; प्रत्येक चरण को अलग से सत्यापित करें. बड़े परिवर्तन जोखिम भरे होते हैं क्योंकि उन्हें सत्यापित करना कठिन होता है और त्रुटियों के छिपने का खतरा होता है।
  5. सत्यापित करें। इसे चलाएं, इसका परीक्षण करें, इसे दृष्टिगत रूप से पढ़ें। असत्यापित AI कोड एक "स्केच" है, "समाधान" नहीं। यह चक्र का सबसे गैर-परक्राम्य कदम है।

तीन मिनी मामले

केस 1 - समय की बचत वास्तविक लेकिन मामूली है। जब एक टीम ने AI के साथ नए CRUD (क्रिएट-रीड-अपडेट-डिलीट) एंडपॉइंट को तैयार किया, तो पहले ड्राफ्ट का समय लगभग 40 मिनट से घटकर 8 मिनट हो गया। हालाँकि, समीक्षा और परीक्षण के साथ, कुल समय 25 मिनट था; तो वास्तविक लाभ 40 से 25, लगभग 38% है। "हमने 10 गुना तेजी ला दी है" की अपेक्षा के बजाय मापी गई यह दर एक स्थायी लाभ है।

केस 2 - मतिभ्रम महंगा है। एक डेवलपर ने सत्यापन के बिना AI-सुझाए गए request.get_json() कॉल का उपयोग किया; ऐसी कोई विधि नहीं थी (सटीक रूप से प्रतिक्रिया.json())। कोड संकलित नहीं होने पर 20 मिनट बर्बाद हो गए। एक सरल "क्या यह विधि वास्तव में मौजूद है?" सत्यापन से हानि रीसेट हो जाएगी.

केस 3 - अच्छा संदर्भ आउटपुट को दोगुना कर देता है। उसी बग के लिए, एक डेवलपर ने बस "मुझे एक त्रुटि मिल रही है" लिखा और दूसरे ने पूर्ण स्टैक ट्रेस, संस्करण और इनपुट नमूना जोड़ा। बाद वाले को पहले प्रयास में सही समाधान मिल गया; पहले वाले ने तीन मोड़ बिताए। अंतर मॉडल में नहीं, बल्कि इनपुट में था।

चार प्रतिलिपि योग्य टेम्पलेट

एक सामान्य प्रयोजन, शक्तिशाली स्टार्टअप प्रॉम्प्ट:

भूमिका: आप एक अनुभवी {{भाषा}} डेवलपर हैं। कार्य: {{what_want}}संदर्भ:- फ्रेमवर्क/संस्करण: {{framework_and_version}}- बाधाएं: {{प्रदर्शन, शैली, निर्भरता नियम}}नियम:- गैर-मौजूद लाइब्रेरी/फ़ंक्शन का उपयोग न करें; यदि आप निश्चित नहीं हैं, तो इसे "सत्यापित करें" के रूप में चिह्नित करें। - पहले एक संक्षिप्त योजना दें, फिर कोड, फिर औचित्य के 2 वाक्य दें। - परीक्षण योग्य, कार्यशील कोड तैयार करें।

मॉडल में अनिश्चितता को वापस फ़िल्टर करने के लिए:

नीचे दिए गए कार्य को हल करने से पहले, कम से कम 3 बिंदुओं को सूचीबद्ध करें जो आपको प्रश्न के रूप में गायब या अस्पष्ट लगते हैं। मेरे उत्तर देने से पहले कोड न लिखें। कार्य: {{कार्य}}

आउटपुट को स्वयं जांचने के लिए:

आपने निम्नलिखित कोड तैयार किया है. अब अपनी भूमिका बदलें और इस कोड की आलोचना करें: - 3 मामलों (किनारे के मामलों) की सूची बनाएं जो शायद काम न करें। - क्या कोई एपीआई/फ़ंक्शन हैं जिन्हें आप बना सकते थे? मार्क.- सही संस्करण दें.कोड:{{कोड}}

किसी निर्णय को विकल्पों में विभाजित करने के लिए:

{{समस्या}} के लिए 2-3 समाधान दृष्टिकोण सुझाएं। प्रत्येक के लिए: संक्षिप्त विवरण, प्लस/माइनस, कब चुनना है। सारणीबद्ध रूप में दीजिए। मेरे लिए मत चुनो; बस विकल्प स्पष्ट करें.

कमजोर संकेत/मजबूत संकेत

कमज़ोर: "इस कोड में बग ठीक करें।" (कौन सी त्रुटि? कौन सी भाषा? अपेक्षित व्यवहार क्या है?)
मजबूत: "पायथन 3.11 / फास्टएपीआई 0.110। अनुरोध का मुख्य भाग खाली होने पर निम्न समापन बिंदु KeyError के साथ 500 लौटाता है; मैं चाहता हूं कि यह 400 लौटाए और खाली मुख्य भाग पर सार्थक संदेश दे। पहले कारण बताएं, फिर सही फ़ंक्शन दें, फिर इस परिदृश्य के लिए एक परीक्षण लिखें। [कोड]"

शक्तिशाली संस्करण; यह भाषा, संस्करण, वास्तविक त्रुटि, अपेक्षित व्यवहार और आउटपुट प्रारूप देता है। मॉडल को अब भविष्यवाणी करने की ज़रूरत नहीं है।

सामान्य गलतियाँ

  • बिना सत्यापन के भरोसा करना. सबसे आम और सबसे महंगी गलती. जब तक कोड संकलित और परीक्षण न हो जाए, तब तक "हल हो गया" न कहें।
  • बिना सन्दर्भ के प्रश्न पूछना। संस्करण, त्रुटि पाठ और प्रतिबंधों के बिना उत्तर सामान्य और अक्सर गलत होता है।
  • एक बहुत बड़ा अनुरोध. एक बार में 300-लाइन उत्पादन का अनुरोध और समीक्षा करने में सक्षम नहीं होने से गलतियाँ अदृश्य हो जाती हैं।
  • मॉडल के आत्मविश्वास को सबूत समझना. एआई आत्मविश्वास से कुछ गलत कह सकता है; टोन सटीकता का सूचक नहीं है.
  • कंपनी का रहस्य बेतरतीब ढंग से चिपकाया जा रहा है। निजी कुंजियाँ, ग्राहक डेटा या निजी स्रोत कोड को अस्वीकृत टूल में दर्ज नहीं किया जाना चाहिए (हम इस विषय पर इकाई 10 में चर्चा करेंगे)।
युक्ति: प्रत्येक एआई आउटपुट को "यह एक ड्राफ्ट है" के रूप में मानें। यह अकेली मानसिक आदत उन अधिकांश जोखिमों को ख़त्म कर देती है जो आप पूरे मॉड्यूल में देखेंगे।

संक्षेप में

कोडिंग सहायक एक भाषा मॉडल है जो अगले सबसे संभावित खंड की भविष्यवाणी करता है; यह कोड को नहीं समझता, यह पैटर्न उत्पन्न करता है। यही कारण है कि वह दोहरावदार, फार्मूलाबद्ध कार्यों में मजबूत है; इसका उपयोग उस कार्य के लिए सावधानी से किया जाना चाहिए जिसके लिए सत्यापन की आवश्यकता होती है जो आपके संदर्भ के लिए विशिष्ट है। सबसे बड़ा जोखिम मतिभ्रम है, और एकमात्र उपाय सत्यापन है। पूरे मॉड्यूल में हम जिस अनुशासन का पालन करेंगे वह स्पष्ट है: कार्य को स्पष्ट करें, संदर्भ दें, छोटे के लिए पूछें, प्रत्येक वितरण योग्य को मान्य करें।

आवेदन कार्य

पिछले सप्ताह आपके द्वारा किए गए तीन सॉफ़्टवेयर कार्य लिखें (उदाहरण के लिए बग फिक्स, एक परीक्षण, एक रीडमी अपडेट)। प्रत्येक के लिए "ताकत और कमजोरियों का नक्शा" देखें और एक वाक्य में वर्णन करें कि यदि आपने एआई से ऐसा करवाया तो आपकी और एआई की क्या भूमिका होगी। फिर ऊपर दिए गए "स्टार्ट प्रॉम्प्ट" टेम्पलेट के साथ इनमें से एक कार्य एआई को दें और आउटपुट को चलाएं और सत्यापित करें; ध्यान दें कि आपने कितने मिनट बचाए और आपको कितनी गलतियाँ ठीक करनी पड़ीं।

चेकलिस्ट

  • [ ] मुझे एहसास हुआ कि एलएलएम पैटर्न तैयार करता है, न कि कोड को "समझता" है।
  • [ ] मैं टोकन, संदर्भ विंडो और प्रॉम्प्ट की अवधारणाओं को एक वाक्य में समझा सकता हूं।
  • [ ] मैं उन कार्यों के प्रकारों के बीच अंतर कर सकता हूं जहां एआई मजबूत और कमजोर है।
  • [ ] मैं जानता हूं कि मतिभ्रम क्या है और इसका एकमात्र उपाय सत्यापन है।
  • [ ] मैंने "प्रस्तावित करें, उत्पादन करें, सत्यापित करें" चक्र को अपने कार्य के लिए अनुकूलित किया।
  • [ ] मैं एक ठोस उदाहरण में एक मजबूत प्रॉम्प्ट और एक कमजोर प्रॉम्प्ट के बीच अंतर दिखा सकता हूं।