युनिट 2 / 12

स्क्रिप्टिंग आणि स्वयंपूर्ण

नफा:

  • इनलाइन पूर्णतेसह कार्य प्रकार दुरुस्त करण्यासाठी चॅट मोड मॅप करण्याची क्षमता
  • शक्तिशाली उत्पादन प्रॉम्प्ट लिहिण्याची क्षमता ज्यामध्ये इनपुट/आउटपुट कॉन्ट्रॅक्ट, एज केसेस आणि स्टाइल मर्यादा समाविष्ट आहेत
  • विलीन करण्यापूर्वी व्युत्पन्न केलेला कोड आणि कोणतेही नवीन प्रस्तावित अवलंबित्व प्रमाणित करण्याची क्षमता

विकसकाचा AI सह संपर्काचा पहिला बिंदू बहुतेक वेळा स्वयंपूर्ण असतो — एक वैशिष्ट्य जे तुम्ही टाइप करता तेव्हा पुढील ओळ सुचवते — किंवा चॅट विंडोमध्ये "ते फंक्शन टाइप करा" असे म्हणते. ते दोघेही एकच इंजिन वापरतात परंतु भिन्न शाखांची आवश्यकता असते. या युनिटमध्ये, आम्ही यादृच्छिक "ते लिहा" मधून एका अभियांत्रिकी चरणात कोड जनरेशनचे रूपांतर करतो ज्याचे आउटपुट अंदाजे आणि पडताळण्यायोग्य आहे.

तुमच्या टायपिंग मशीनला गती देणाऱ्या साधनातून AI ला तुम्ही सेट केलेल्या मर्यादांमध्ये काम करणाऱ्या प्रशिक्षणार्थीकडे वळवणे हे ध्येय आहे. चांगले मार्गदर्शन करणारा शिकाऊ वेळ वाचवतो; एक दिशाहीन शिकाऊ व्यक्ती एक गोंधळ निर्माण करतो जी तुम्हाला नंतर साफ करावी लागेल.

दोन वापर मोड: इनलाइन पूर्णता आणि चॅट

तुम्ही तुमच्या एडिटरमध्ये टाईप करताच इनलाइन पूर्णता येते; तुम्ही फंक्शन स्वाक्षरी किंवा टिप्पणी ओळ टाइप करा आणि ते बाकीचे सुचवते. हे वेगासाठी उत्तम आहे, परंतु त्याचा एक संकुचित संदर्भ आहे: तो फक्त जवळच्या भागात कोड पाहतो. म्हणूनच जेव्हा तुम्ही टिप्पणीमध्ये तुमचा हेतू स्पष्टपणे लिहिता तेव्हा ते उत्तम कार्य करते. उदाहरणार्थ, //वापरकर्ता ईमेल सत्यापित करा, जर अवैध टिप्पणी खाली दिलेल्या सूचनेमध्ये लक्षणीय सुधारणा करत असेल तर ValidationError टाका.

चॅट मोड मोठ्या आणि संरचित कार्यांसाठी आहे: "या वर्गात पृष्ठांकन जोडा", "त्या सेवेचा इंटरफेस काढा". येथे तुमच्याकडे भूमिका, संदर्भ आणि स्वरूप देण्याची लक्झरी आहे. सामान्य नियम आहे: लहान आणि प्रवाही कार्ये पूर्ण करणे, विचार आणि रचना आवश्यक असलेल्या कार्यांसाठी संभाषण.

टीप: "टॅब" सह पूर्ण करण्याच्या सूचना आंधळेपणाने स्वीकारू नका. एका सेकंदासाठी सुचवलेली ओळ वाचा; चुकीचे व्हेरिएबल नाव किंवा उलट स्थिती येथून सामान्यतः लीक होते.

हेतू कोडमध्ये अनुवादित करण्यासाठी पायऱ्या

  1. कराराची व्याख्या करा. फंक्शनचे इनपुट, आउटपुट आणि एरर वर्तन काय आहे? जसे "ईमेल मिळवा, वैध असल्यास सामान्य करा, अवैध असल्यास त्रुटी टाका".
  2. मर्यादा सांगा. बाह्य अवलंबित्व वापरू नका? एक विशिष्ट शैली मार्गदर्शक? कामगिरीची मर्यादा आहे का?
  3. उदाहरण द्या. इनपुट–आउटपुट जोडी (“ali@x.com → वैध, ali@ → त्रुटी”) मॉडेलच्या हेतूचे आकलन अंदाजाकडून अचूकतेकडे हलवते.
  4. लहान तुकडे मागा. एक कार्य, एक जबाबदारी. नंतर पुढील एकावर जा.
  5. तयार केलेला कोड वाचा आणि चालवा. संकलित करणे + एक द्रुत मॅन्युअल प्रयत्न ही सर्वात स्वस्त खात्रीची पायरी आहे.

तीन मिनी केसेस

केस 1 - टिप्पणी-चालित उत्पादन अचूकता वाढवते. एका डेव्हलपरने प्रथम रिकाम्या भागासह तारीख पार्सिंग फंक्शनची विनंती केली आणि 3 फेऱ्यांमध्ये योग्य निकाल मिळाला. दुसऱ्या प्रयत्नात, जेव्हा मी 4-ओळींच्या टिप्पणीसह फंक्शन परिभाषित केले (स्वीकृत स्वरूप, टाइम झोन नियम, त्रुटी स्थिती) आणि विनंती केली तेव्हा पहिल्या फेरीत काम करणारा कोड आला. तेच मॉडेल, त्याच दिवशी; फरक फक्त हेतूच्या स्पष्टतेचा होता.

केस 2 - आवृत्ती निर्दिष्ट न करणे महाग आहे. एका टीमने Node.js साठी तयार केलेल्या कोडमध्ये fs.promises बदलून लेगसी कॉलबॅक-आधारित API सह संघर्ष केला. जेव्हा प्रॉम्प्टमध्ये "Use Node 20, ESM, async/await" ही ओळ जोडली गेली, तेव्हा उत्पादनाने प्रथमच प्रकल्पाचे अनुसरण केले; दुरुस्तीसाठी खर्च केलेली सरासरी 12 मिनिटे रीसेट केली गेली.

प्रकरण 3 - बॉयलरप्लेट कोडमध्ये वास्तविक लाभ. मायक्रोसेवेसाठी 6 नवीन डीटीओ (डेटा ट्रान्सफर ऑब्जेक्ट — लेयर्स दरम्यान डेटा वाहून नेणारा एक साधा डेटा वर्ग) आणि त्यांचे प्रमाणीकरण नियम आवश्यक आहेत. अंदाजे 90 मिनिटांच्या मॅन्युअल कामासाठी जे AI द्वारे उत्पादित आणि पुनरावलोकन केले जाते तेव्हा ते 35 मिनिटांपर्यंत कमी करण्यात आले; कोडची पुनरावृत्ती जास्त असल्याने आणि नमुना स्पष्ट असल्याने, AI ने येथे सर्वात कार्यक्षम क्षेत्रात काम केले.

चार कॉपी करण्यायोग्य टेम्पलेट्स

करारावर आधारित कार्य निर्मिती:

भूमिका: तुम्ही एक मेहनती {{language}} विकसक आहात. फंक्शन करार:- नाव: {{name}}- इनपुट: {{प्रकार आणि त्यांचा अर्थ}}- आउटपुट: {{प्रकार आणि अर्थ}}- त्रुटी स्थिती: {{what is thrown/returned when}}अडचणी: {{no external dependences / style}}} - {1}-external dependences/input>}}} {{output_1}}- {{entry_2}} -> {{error_2}}आधी स्वाक्षरी + लहान योजना, नंतर कोड द्या. लेखन चाचण्या, फक्त कार्य.

विद्यमान शैलीशी जुळण्यासाठी (कोड बेसशी जुळवून घेणे):

खाली आमच्या प्रकल्पातील एक उदाहरण फंक्शन आहे; येथे नामकरण, त्रुटी हाताळणे आणि टिप्पणी शैली जाणून घ्या. समान शैलीसह {{new_task}} साठी फंक्शन लिहा. उदाहरण: {{current_code}}

सांगाड्यापासून ते भरण्यापर्यंत (स्टब → अंमलबजावणी):

टिप्पण्यांमधील TODOs नुसार खालील फंक्शन स्केलेटन भरा. स्वाक्षरी आणि रिटर्न प्रकार बदला. अस्तित्वात नसलेले हेल्पर फंक्शन बनवू नका; आवश्यक असल्यास, मला "हे मदतनीस आवश्यक आहे" कळवा. {{skelet_kod}}

पर्यायी ॲप तुलना:

{{task}} साठी 2 भिन्न अंमलबजावणी द्या: (a) वाचनीयतेला प्राधान्य देणे, (b) कार्यप्रदर्शनास प्राधान्य देणे. प्रत्येकाच्या खाली 1 वाक्य "जेव्हा श्रेयस्कर असेल" लिहा.

कमकुवत प्रॉम्प्ट / मजबूत प्रॉम्प्ट

कमकुवत: "मला ईमेल सत्यापन कार्य लिहा."
सशक्त: "TypeScript 5, मानक लायब्ररी फक्त. isValidEmail(इनपुट: स्ट्रिंग): बुलियन लिहा. स्पेस ट्रिम करा, केस असंवेदनशील करा, a@b.co वैध आहे, a@, @b.co, रिकामी स्ट्रिंग अवैध आहे. तुम्ही regex वापरणार असाल तर, अधिक जटिल टिप्पण्या जोडू नका."

शक्तिशाली आवृत्ती; भाषा, आवृत्ती, स्वाक्षरी, एज केसेस आणि शैलीची मर्यादा मिळवते. अशा प्रकारे, व्युत्पन्न केलेला कोड कार्य करतो आणि तुमच्या प्रकल्पात बसतो.

दृष्टीकोन

कधी वापरायचे

लक्ष द्या

इनलाइन पूर्णता

प्रवाहात लहान घाला

ती सूचना वाचल्याशिवाय स्वीकारू नका

गप्पांमध्ये करारावर आधारित उत्पादन

नवीन कार्य/वर्ग

उदाहरण आणि धार केस द्या

शैली नमुन्यानुसार उत्पादन

विद्यमान कोडमध्ये जोडत आहे

वर्तमान नमुना कोड निवडा

कंकाल भरणे

स्वाक्षरी निश्चित, मुख्य भाग रिक्त

स्वाक्षरी बदलणे

कोड डुप्लिकेशन आणि डिपेंडन्सी ट्रॅप

एआय अनेकदा त्याचे काम सोपे करण्यासाठी नवीन लायब्ररीची शिफारस करते. काहीवेळा हे अचूक असते, काहीवेळा ते तुमच्या प्रकल्पावर अनावश्यक अवलंबित्व जोडते किंवा अस्तित्वात नसलेले पॅकेज सुचवते (विभ्रम). नियम: तुम्ही प्रत्येक नवीन अवलंबित्वाची पुष्टी करता. पॅकेज प्रत्यक्षात अस्तित्वात आहे, त्याची देखभाल केली आहे आणि योग्य परवाना आहे याची पडताळणी केल्याशिवाय ते प्रकल्पात जोडू नका. बऱ्याच वेळा नवीन पॅकेजपेक्षा आधीच प्रकल्पात असलेला मदतनीस चांगला असतो.

खबरदारी: AI ने सुचवलेल्या आयात ओळींचे पुनरावलोकन करा. अस्तित्वात नसलेले पॅकेज नाव (जे "टायपो-स्क्वाटिंग" नावाच्या बनावट पॅकेजेससारखे देखील असू शकते) दोन्ही संकलन खंडित करते आणि सुरक्षिततेचा धोका निर्माण करते.

सामान्य चुका

  • मॉडेलद्वारे निश्चित केलेली स्वाक्षरी असणे. तुम्ही इनपुट/आउटपुट प्रकार निश्चित न केल्यास, प्रत्येक उत्पादनासोबत वेगळी स्वाक्षरी येते आणि एकत्रीकरण अवघड होते.
  • धार प्रकरणे उल्लेख नाही. रिक्त इनपुट, शून्य, ऋण संख्या, खूप मोठे मूल्य — जर तुम्ही हे निर्दिष्ट केले नाही, तर मॉडेल "आनंदी मार्ग" लिहिते, कडा वगळून.
  • सूचनेची चाचणी न करता एकत्रित करणे. कोड काम करत आहे याचा अर्थ असा नाही की तो कार्य करतो.
  • अनावश्यक अवलंबित्व स्वीकारणे. वन-लाइनरसाठी संपूर्ण लायब्ररी जोडल्याने तांत्रिक कर्ज तयार होते.
  • शैलीची विसंगती. उर्वरित प्रकल्पापेक्षा भिन्न नामकरण आणि त्रुटी हाताळणीमुळे कोड बेस खराब होतो.

सारांशात

जेव्हा तुम्ही हेतू स्पष्ट करारामध्ये अनुवादित करता तेव्हा कोड निर्मिती शक्तिशाली असते. लहान, इन-स्ट्रीम कार्यांसाठी आणि संभाषणात संरचना स्थापित करणाऱ्या कार्यांसाठी इनलाइन पूर्णता वापरा. तुम्ही इनपुट/आउटपुट प्रकार, एज केसेस, आवृत्ती आणि शैली निर्दिष्ट करता; मॉडेलचे उदाहरण द्या; प्रत्येक नवीन अवलंबित्व सत्यापित करा; आणि तयार केलेला प्रत्येक भाग चालवा आणि वाचा. AI फॉर्म्युलेक, पुनरावृत्ती कोडमध्ये सर्वोत्तम पैसे देते — तुम्ही सेट केलेल्या मर्यादेत ते तिथेच चालवा.

अर्ज कार्य

तुमच्या प्रोजेक्टमधून एक लहान फंक्शन निवडा जे तुम्हाला लिहायचे आहे. प्रथम ते “करार-आधारित फंक्शन जनरेशन” टेम्प्लेटसह AI वर मुद्रित करा, इनपुट/आउटपुट प्रकार, दोन किनारी केसेस आणि शैलीची मर्यादा देऊन. व्युत्पन्न केलेला कोड संकलित करा आणि दोन भिन्न इनपुटसह प्रयत्न करा. नंतर तेच फंक्शन पुन्हा विचारा, यावेळी कोणत्याही संदर्भाशिवाय “मला हे लिहा” आणि दोन आउटपुट रेषेनुसार तुलना करा: कोणती एज केसेस चुकली, किती सुधारणा आवश्यक आहेत?

चेकलिस्ट

  • [ ] इनलाइन पूर्णतेसह चॅट मोड कुठे वापरायचा हे मला माहीत आहे.
  • मी फंक्शन जनरेशनमध्ये इनपुट/आउटपुट कॉन्ट्रॅक्ट आणि एज केसेस निर्धारित करतो.
  • प्रॉम्प्टमध्ये भाषा आणि आवृत्ती माहिती जोडण्याची मला सवय झाली आहे.
  • मी प्रत्येक उत्पादित तुकडा एकत्र करण्यापूर्वी संकलित करतो आणि त्याची चाचणी करतो.
  • [ ] AI ने प्रस्तावित केलेल्या प्रत्येक नवीन अवलंबित्वाचे अस्तित्व आणि आवश्यकता पडताळून पाहिल्याबद्दल मी पुष्टी करतो.
  • व्युत्पन्न केलेला कोड प्रकल्पाच्या शैलीशी जुळत असल्याचे मी तपासतो.