A Literate Programming Environment for Human and Machine Agents
यह शोध पत्र एक लिटरेट प्रोग्रामिंग वातावरण प्रस्तुत करता है जो एक नेम-ग्राफ आर्किटेक्चर के माध्यम से निष्पादन योग्य कोड, प्राकृतिक भाषा और संरचित डेटा को एकीकृत करता है, जिससे लार्ज लैंग्वेज मॉडल्स के लिए संदर्भ अनुकूलित होता है और मशीन एजेंटों को मानव IDE के तुलनीय सिंबल-अवेयर टूल्स प्रदान किए जाते हैं।
मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें
कंप्यूटिंग के आधुनिक युग में, कार्यशाला में एक नए प्रकार का साथी आया है: भाषा मॉडल (language model)। ये विशाल, लचीली प्रणालियाँ हैं जिन्हें मानव पाठ के विशाल पुस्तकालयों पर प्रशिक्षित किया गया है, जो निर्देशों को पढ़ने और आश्चर्यजनक प्रवाह के साथ कोड लिखने में सक्षम हैं। कई लोगों के लिए, यह बदलाव क्षमता के अचानक विस्तार जैसा महसूस होता है, जो नौसिखियों को स्क्रिप्ट बनाने और विशेषज्ञों को विशाल प्रणालियों से निपटने की अनुमति देता है। फिर भी, एक मौलिक तनाव बना हुआ है। जबकि ये मशीनें भाषा को संसाधित कर सकती हैं, वे वास्तव में यह नहीं "सीखतीं" या याद नहीं रखतीं कि बातचीत समाप्त होने के बाद क्या हुआ। वे पूरी तरह से उस टेक्स्ट पर निर्भर करती हैं जो वर्तमान में उनके सामने दृश्यमान है, जो संदर्भ की एक सीमित खिड़की है जिसे लगातार प्रासंगिक विवरणों के साथ भरना पड़ता है। यदि कोई प्रोग्रामर चाहता है कि मशीन कोड के पीछे के तर्क को समझे, तो वह तर्क कोड के ठीक साथ मौजूद टेक्स्ट में होना चाहिए। यह इस चुनौती को जन्म देता है कि हम सॉफ्टवेयर कैसे लिखें। पारंपरिक रूप से, कोड और उस कोड की मानवीय व्याख्याओं को अलग-अलग स्थानों पर रखा जाता था, या ऐसी टिप्पणियों (comments) में दबा दिया जाता था जिन्हें मशीनें अक्सर अनदेखा कर देती हैं। लेकिन यदि मशीन को एक सच्चा सहयोगी बनना है, तो प्रोग्राम की कहानी और प्रोग्राम स्वयं एक ही प्रारूप में एक साथ, अगल-बगल जीवित रहने चाहिए जिसे मनुष्य और मशीन दोनों समान आसानी से पढ़ सकें।
यह एक नया वातावरण है जिसे 'notlob' कहा जाता है, जिसे शोधकर्ता एडम टी. बर्क द्वारा बनाया गया है, इस केंद्रीय समस्या का समाधान करता है। यह कार्य 'लिटरेट प्रोग्रामिंग' (literate programming) के एक पुराने विचार की ओर लौटने का प्रस्ताव करता है, लेकिन इसे एक ऐसे युग के लिए अपडेट करता है जहाँ मानव और कृत्रिम एजेंट दोनों एक ही दस्तावेज़ पढ़ रहे हैं। इस प्रणाली में, एक सॉफ्टवेयर प्रोजेक्ट कोड, दस्तावेज़ीकरण और परीक्षणों के अलग-अलग फ़ाइलों का संग्रह नहीं है। इसके बजाय, यह एक एकल, प्रवाहमय दस्तावेज़ है जो एक निबंध की तरह दिखता है। टेक्स्ट विचारों, प्रेरणा और डिज़ाइन की व्याख्या करता है, जबकि निष्पादन योग्य निर्देश सीधे गद्य (prose) के भीतर अंतर्निहित होते हैं। शोधकर्ताओं ने एक कामकाजी प्रणाली बनाई है जो इस संयुक्त दस्तावेज़ को सत्य के प्राथमिक स्रोत के रूप में मानती है। जब सिस्टम इस फ़ाइल को पढ़ता है, तो वह केवल शब्दों को नहीं देखता; बल्कि यह एक विस्तृत मानचित्र बनाता है कि प्रत्येक नाम, अवधारणा और कोड का एक-दूसरे से कैसे संबंध है। यह मानचित्र, जिसे लेखक 'नेम-ग्राफ' (name-graph) कहते हैं, मशीन एजेंट को कीवर्ड खोजने के बजाय, विचारों के बीच तार्किक संबंधों का अनुसरण करने की अनुमति देता है, ठीक वैसे ही जैसे एक मानव पाठक पुस्तक के माध्यम से विचार के धागे का अनुसरण करता है।
notlob का डिज़ाइन तीन सरल अवलोकनों द्वारा संचालित है कि प्रोग्रामिंग कैसे बदल रही है। पहला, कृत्रिम बुद्धिमत्ता के साथ काम करते समय सॉफ्टवेयर को निर्दिष्ट और व्यवस्थित करने के लिए प्राकृतिक भाषा सबसे प्रमुख तरीका बन गई है। दूसरा, कंप्यूटर-जनित जाँच जो यह सत्यापित करती है कि कोड अभी भी काम कर रहा है, पहले से कहीं अधिक मूल्यवान है, जो एजेंटों के लिए एक विश्वसनीय फीडबैक लूप के रूप में कार्य करती है। तीसरा, इन भाषा मॉडलों की वर्तमान पीढ़ी उस टेक्स्ट की मात्रा पर अत्यधिक निर्भर है जिसे वे एक बार में देख सकते हैं। इसे संबोधित करने के लिए, शोधकर्ताओं ने एक ऐसी भाषा बनाई है जहाँ स्पष्टीकरण, निष्पादन और सत्यापन सभी एक ही फ़ाइल में स्थित हैं। एक विशिष्ट दस्तावेज़ एक शीर्षक और एक परिचय के साथ शुरू होता है, जिसके बाद प्रोग्राम का मुख्य तर्क आता है। इसके बाद परीक्षण और संदर्भों के लिए एक अनुभाग आता है, जो एक साधारण रेखा द्वारा अलग किया गया है। सिस्टम विशिष्ट मार्करों का उपयोग करता है ताकि गद्य के एक टुकड़े, कोड के एक ब्लॉक, एक संपत्ति (property) जो हमेशा सत्य होनी चाहिए, और एक विशिष्ट परीक्षण मामले के बीच अंतर किया जा सके। उदाहरण के लिए, एक अनुभाग एक गणितीय अनुक्रम का वर्णन कर सकता है, जिसके तुरंत बाद उसे उत्पन्न करने वाला कोड हो, और फिर एक टेक्स्ट ब्लॉक हो जो बताता है कि कोड को कुछ नियमों को संतुष्ट करना चाहिए। सिस्टम फिर इन नियमों को चलाता है ताकि यह सुनिश्चित किया जा सके कि कोड वैसा ही व्यवहार करता है जैसा कि टेक्स्ट दावा करता है।
इसे सफल बनाने के लिए, शोधकर्ताओं ने एक पार्सर विकसित किया है जो नामों को सिस्टम की सबसे महत्वपूर्ण वस्तु मानता है। पारंपरिक प्रोग्रामिंग में, एक नाम केवल एक वेरिएबल या फंक्शन का लेबल होता है। notlob में, एक नाम एक 'फर्स्ट-क्लास सिटीजन' है जो लिखित व्याख्या को निष्पादन योग्य कोड से जोड़ता है। जब सिस्टम एक फ़ाइल को प्रोसेस करता है, तो वह एक ग्राफ बनाता है जो किसी अवधारणा का वर्णन करने वाले टेक्स्ट को उसके कार्यान्वयन वाले कोड से, और उसे सत्यापित करने वाले परीक्षणों से जोड़ता है। यह संरचना एक मशीन एजेंट को एक उच्च-स्तरीय विचार से उस विशिष्ट कोड की पंक्तियों तक जाने, या यह खोजने की अनुमति देती है कि किसी विशिष्ट अवधारणा का उपयोग कहाँ किया गया है, बिना फ़ाइलों के समुद्र में खोए। सिस्टम में ऐसे उपकरण शामिल हैं जो इस मानचित्र को मानक प्रारूपों में निर्यात कर सकते हैं, जिससे अन्य सॉफ़्टवेयर प्रोजेक्ट के विभिन्न हिस्सों के बीच संबंधों को क्वेरी कर सकें। यह इस बात की नकल करता है कि कैसे एक मानव प्रोग्रामर यह खोजने के लिए एक इंटीग्रेटेड डेवलपमेंट एनवायरनमेंट (IDE) का उपयोग करता है कि कोई फंक्शन कहाँ परिभाषित है या उसे कौन कॉल करता है, लेकिन यह इसे फ़ाइल संरचना के बजाय टेक्स्ट के अर्थ को समझकर करता है।
शोधकर्ताओं ने कई कामकाजी प्रोग्राम बनाकर इस वातावरण का परीक्षण किया, जिसमें संख्याओं को रोमन अंकों में बदलने का एक टूल और पेट्री नेट्स (Petri nets) पर आधारित एक वेब-आधारित गेम शामिल है, जो उन प्रणालियों को मॉडल करने के लिए उपयोग किए जाने वाले आरेख हैं जिनमें परस्पर क्रिया करने वाले भाग होते हैं। एक प्रयोग में, उन्होंने एक प्रोजेक्ट को शून्य से लिखने में मदद करने के लिए एक कृत्रिम एजेंट का उपयोग किया। एजेंट को लक्ष्य का एक उच्च-स्तरीय विवरण और कुछ खाली फंक्शन सिग्नेचर दिए गए थे। एजेंट ने फिर कोड भरा, परीक्षण लिखे, और गद्य को व्यवस्थित किया, और यह सब करते हुए notlob दस्तावेज़ की संरचना का पालन किया। एजेंट टेक्स्ट और कोड के बीच विसंगतियों का पता लगाने में सक्षम था, जैसे कि एक फंक्शन की परिभाषा में बेमेल होना, और उसने स्पष्टीकरण मांगा। एक अन्य मामले में, सिस्टम ने एक डिजिटल सिग्नल प्रोसेसिंग प्रोजेक्ट में एक सूक्ष्म बग को खोजने में मदद की जिसे अन्य परीक्षण विधियों द्वारा छोड़ दिया गया था। बग एक ऐसी गणना से संबंधित था जो कुछ स्थितियों के तहत अस्थिर हो जाती थी, और एजेंट के 'प्रॉपर्टी टेस्ट्स', जो निबंध के हिस्से के रूप में लिखे गए थे, ने सफलतापूर्वक त्रुटि को उजागर किया।
हालाоं, शोधकर्ताओं ने यह भी देखा कि एजेंट पूर्ण नहीं थे। कई मामलों में, एजेंट दस्तावेज़ के घोषणात्मक (declarative) भागों की उपेक्षा करने लगे, जैसे कि औपचारिक गुण और संरचनात्मक नियम, और इसके बजाय कोड लिखने के तात्कालिक कार्य पर ध्यान केंद्रित किया। वे कभी-कभी टेक्स्ट को एक बाधा के बजाय एक सुझाव के रूप में देखते थे, जिससे ऐसी विसंगतियां पैदा हुईं जिन्हें ठीक करने के लिए मानवीय हस्तक्षेप की आवश्यकता पड़ी। शोधकर्ताओं ने नोट किया कि यह गतिशीलता मानव सॉफ्टवेयर टीमों के लिए परिचित है, जहाँ वरिष्ठ डेवलपर्स को अक्सर यह सुनिश्चित करने के लिए हस्तक्षेप करना पड़ता है कि दस्तावेज़ और कोड संरेखित रहें। अध्ययन बताता है कि हालांकि ये भाषा मॉडल शक्तिशाली हैं, फिर भी उन्हें एक ऐसी संरचना से लाभ होता है जो कोड और व्याख्या को निकट संपर्क में रहने के लिए मजबूर करती है। notlob वातावरण वह संरचना प्रदान करता है, जो प्रोग्राम के सिद्धांत और कोड के अभ्यास को एक ही स्थान पर रखने का एक तरीका है।
यह कार्य अन्य दृष्टिकोणों से भी खुद को अलग करता है जो प्रोग्रामिंग में भाषा मॉडलों के उपयोग पर विचार करते हैं। कुछ विधियाँ प्राकृतिक भाषा विवरण को एक अलग विनिर्देश (specification) के रूप में मानती हैं जो कोड लिखे जाने से पहले आता है, एक ऐसी प्रक्रिया जो योजना और परिणाम के बीच अलगाव पैदा कर सकती है। अन्य मॉडल पर कोड लिखे जाने के बाद उसका सारांश या पुनरुत्पादन करने पर निर्भर करते हैं। notlob एक अलग पथ लेता है क्योंकि यह विनिर्देश, कोड और परीक्षणों को एक ही, पुनरावृत्ति योग्य (iterative) कार्यक्षेत्र में सह-स्थित करता है। यह मनुष्यों और मशीनों को तीनों तत्वों पर एक साथ काम करने, तर्क और व्याख्या को एक साथ परिष्कृत करने की अनुमति देता है। शोधकर्ता तर्क देते हैं कि यह दृष्टिकोण अधिक प्रभावी है बजाय इसके कि प्राकृतिक भाषा को केवल एक प्रॉम्प्ट या एक अलग दस्तावेज़ माना जाए। गद्य और कोड को एक ही अविभाज्य हिस्से बनाकर, सिस्टम यह सुनिश्चित करता है कि भाषा मॉडल की 'कॉन्टेक्स्ट विंडो' में सबसे प्रासंगिक जानकारी भरी हो।
notlob का कार्यान्वयन एक ओपन-सोर्स प्रोजेक्ट है जो वर्तमान में तीन स्थापित प्रोग्रामिंग भाषाओं का समर्थन करता है: हैस्केल (Haskell), पायथन (Python), और टाइपस्क्रिप्ट (TypeScript)। इसमें कमांड-लाइन टूल्स का एक सेट शामिल है जो उपयोगकर्ताओं को प्रोजेक्ट को बनाने, परीक्षण करने और विज़ुअलाइज़ करने की अनुमति देता है। एक टूल दस्तावेज़ को एक मानक वेब पेज के रूप में रेंडर कर सकता है, जबकि दूसरा 'नेम-ग्राफ' के दृश्य मानचित्र को उत्पन्न कर सकता है, जो दिखाता है कि प्रोजेक्ट के विभिन्न भाग एक-दूसरे से कैसे जुड़े हैं। शोधकर्ताओं ने एक "क्रिटिक" (critic) एजेंट बनाने के लिए भी सिस्टम का उपयोग करने का प्रयोग किया, जो एक कृत्रिम बुद्धिमत्ता है जिसे परियोजनाओं की तार्किक निरंतरता और शैली की समीक्षा करने का कार्य सौंपा गया है। यह एजेंट त्रुटियों की पहचान करने और सुधार के सुझाव देने में सक्षम था, और कभी-कभी विविध दृष्टिकोण प्रदान करने के लिए अलग-अलग व्यक्तित्व (personas) अपनाता था। ये प्रयोग बताते हैं कि यह वातावरण न केवल कोड के निर्माण, बल्कि पूरे प्रोजेक्ट की आलोचनात्मक समीक्षा और शोधन का भी समर्थन कर सकता है।
अंततः, यह शोध पत्र एक ऐसे भविष्य के लिए एक दृष्टि प्रस्तुत करता है जहाँ सॉफ्टवेयर विकास मानव और मशीन के बीच एक सहयोगात्मक कार्य है, जो टेक्स्ट और कोड की एक साझा भाषा पर आधारित है। notlob वातावरण यह दावा नहीं करता है कि वह प्रोग्रामिंग में कृत्रिम बुद्धिमत्ता की सभी समस्याओं को हल कर देगा, न ही यह वादा करता है कि मशीनें जल्द ही अपने आप पूर्ण सॉफ्टवेयर लिख लेंगी। इसके बजाय, यह एक व्यावहारिक उपकरण प्रदान करता है जो विचार और कार्यान्वयन के बीच के संबंध को अधिक पारदर्शी और मजबूत बनाता है। निबंध और निष्पादन योग्य कोड को एक ही, परस्पर जुड़े हुए अस्तित्व के रूप में मानकर, सिस्टम विचार और कार्यान्वयन के बीच के अंतर को पाटने में मदद करता है। यह कार्य सुझाव देता है कि प्रोग्रामिंग का भविष्य अधिक कोड लिखने के बारे में नहीं, बल्कि बेहतर कहानियाँ लिखने के बारे में है जिनका कोड पालन कर सके, यह सुनिश्चित करते हुए कि सिस्टम का तर्क मशीन के लिए उतना ही स्पष्ट हो जितना कि मानव के लिए।
अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?
आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।