65 पॉइंट द्वारा xguru 2024-08-06 | 7 टिप्पणियां | WhatsApp पर शेयर करें
  • पिछले 1 साल में हर हफ्ते कई घंटों तक large language models के साथ इंटरैक्ट करते हुए, इनकी लगातार अधिक कठिन काम हल करने की क्षमता से मैं प्रभावित होता गया हूँ
    • इसके परिणामस्वरूप, research projects और personal projects में कोड लिखने की मेरी गति कम-से-कम 50% बढ़ गई
  • ऑनलाइन LLM की उपयोगिता के बारे में बात करने वाले लोग ज़्यादातर या तो हद से ज़्यादा आशावादी होते हैं या हद से ज़्यादा निराशावादी
  • भविष्य पर बहस करने के बजाय, मैं पिछले 1 साल में LLM का उपयोग करके अपनी research क्षमता बेहतर करने और coding projects में मदद लेने के 50 बातचीत-आधारित उदाहरण दिखाना चाहता हूँ
  • LLM के मेरे उपयोग के उदाहरण
    • पहले कभी इस्तेमाल न की गई तकनीक के साथ पूरा web app बनाना
    • अलग-अलग frameworks का उपयोग, उन्हें पहले हाथ से आज़माए बिना सीखना
    • दर्जनों programs को C या Rust में बदलकर performance को 10~100 गुना बेहतर करना
    • बड़े codebase को घटाकर project को काफ़ी सरल बनाना
    • पिछले 1 साल में लगभग हर research paper के शुरुआती experiment code लिखना
    • लगभग हर नीरस काम या one-off script को automate करना
    • नए package या project setup और configuration के लिए web search को लगभग पूरी तरह बदल देना
    • error message debugging के लिए web search का लगभग 50% तक विकल्प बनना
  • अगर इन्हें श्रेणियों में बाँटें, तो ये 2 तरह के हैं
    1. सीखने में मदद: ऐसे काम करने लायक बनाना जो पहले मुश्किल थे
    2. उबाऊ कामों का automation: मुझे उन कामों पर ध्यान देने देना जिनमें मैं सबसे अच्छा हूँ और कठिन समस्याएँ हल करने देना
  • सबसे महत्वपूर्ण बात यह है कि ये उदाहरण वे तरीके हैं जिनसे मुझे वास्तव में LLM का उपयोग करके मदद मिली
    • ये प्रभावशाली features दिखाने के लिए नहीं, बल्कि मेरे वास्तविक काम निपटाने की ज़रूरत से निकले हैं

Nuance

  • इंटरनेट जिस एक चीज़ को ठीक से नहीं संभाल पाता, वह है nuance। मैं यह दावा नहीं करूँगा कि आज के LLM दुनिया पर राज करने वाले हैं, और न ही यह कि भविष्य के models क्या कर पाएँगे
    • मैं सिर्फ़ इस बात पर चर्चा करूँगा कि क्या आज के models मेरे लिए उपयोगी हैं
  • आपको यह जिज्ञासा हो सकती है कि language models की उपयोगिता को सही ठहराने के लिए मैं यह क्यों लिख रहा हूँ। लेकिन लगता है कि academia, software engineering, और media में बहुत से लोग खुलेआम यह कहते हैं कि LLM कोई योगदान नहीं देते, यह बस एक और hype cycle है, और कुछ वर्षों में दुनिया पर कोई असर डाले बिना गायब हो जाएँगे
    • मैं यह तर्क दूँगा कि वे ग़लत हैं, क्योंकि मौजूदा LLM पहले से ही उपयोगी हैं
  • इसके उलट, कुछ लोग यह भी कहते हैं कि आज के models सभी programmers की जगह ले सकते हैं, और लोगों को programming सीखनी ही नहीं चाहिए
    • मैं उनके दावों का सीधा खंडन करने की कोशिश नहीं कर रहा हूँ
  • मैं पूरी तरह समझता हूँ कि LLM के कई हानिकारक प्रभाव हो सकते हैं। मेरा मतलब misinformation, abuse, surveillance, job displacement, वगैरह सबसे है। मैं जल्द ही LLM के हानिकारक प्रभावों पर अपने विचारों के बारे में एक लेख लिखने वाला हूँ। लेकिन यह इस सवाल से अलग मुद्दा है कि language models उपयोगी हो सकते हैं या नहीं
  • मैं अच्छी तरह समझता हूँ कि आप LLM का उपयोग नहीं करना चाह सकते, क्योंकि ये hallucination करते हैं, तथ्यों को घुमा-फिराकर दोहराते हैं, और robustness की कमी के कारण असफल हो सकते हैं
    • लेकिन यह लेख उस बारे में नहीं है
    • मेरा मानना है कि इन विफलताओं के बावजूद models उपयोगी हो सकते हैं
  • इन models को train करने की नैतिकता संदिग्ध है। आप सोच सकते हैं कि इन्हें लोगों की अनुमति के बिना उनके data पर train किया गया, या उन लोगों के बारे में जो models को स्पष्ट रूप से train कराने के लिए कम वेतन पर काम करते हैं। मैं मानता हूँ कि यह एक समस्या है
    • लेकिन यह लेख उस बारे में नहीं है
  • जैसा कि मैं कई बार कह चुका हूँ, यह लेख सिर्फ़ इस बारे में बात करेगा कि अभी मौजूद models उपयोगी हैं या नहीं

मेरी पृष्ठभूमि की कहानी

  • मैं आम तौर पर किसी बात पर आसानी से विश्वास करने वाला व्यक्ति नहीं हूँ। 10 साल पहले security community में crypto hype देख चुका हूँ, लेकिन blockchain पर paper लिखने से पूरी तरह बचा। मैंने कभी Bitcoin नहीं रखा। मैं हर दावे को लेकर संदेहशील हूँ
  • जब किसी ने पहली बार मुझसे कहा कि यह AI तकनीक बहुत उपयोगी होगी और रोज़मर्रा के काम करने के तरीके को काफ़ी बदल देगी, तो मेरी प्रतिक्रिया थी, "जब तक खुद न देख लूँ, मैं विश्वास नहीं करूँगा"
  • मैं एक security researcher हूँ। पिछले 10 सालों से मेरा रोज़ का काम यह दिखाना रहा है कि AI models untrained environments का सामना करने पर कितने बुरी तरह विफल होते हैं। मैंने यह दिखाया है कि machine learning models के input में थोड़ा-सा बदलाव करके output को बहुत ग़लत बनाया जा सकता है, या यह कि अधिकांश machine learning models training dataset के कुछ खास उदाहरण याद रखते हैं और उपयोग के समय उन्हें दोहराते हैं। मैं इन systems की सीमाओं को पूरी तरह समझता हूँ
  • इसके बावजूद, मैं यह कह रहा हूँ कि मौजूदा large language models ने इंटरनेट बनने के बाद से productivity में सबसे बड़ा सुधार किया है। अगर आज मुझे किसी यादृच्छिक programming task के लिए इंटरनेट तक पहुँच या नवीनतम language model तक पहुँच, इन दोनों में से केवल एक चुनना हो, तो आधे से ज़्यादा मामलों में मैं language model चुनूँगा

[ मैं LLM का उपयोग कैसे करता हूँ ]

मेरे लिए पूरा application बनवाना

  • पिछले साल मैंने एक quiz बनाया था ताकि यह जाँचा जा सके कि GPT-4 कुछ चुनिंदा tasks को हल करने की क्षमता का कितना अच्छा अनुमान लगा सकता है। वह quiz काफ़ी लोकप्रिय हुआ और 1 करोड़ से अधिक page views दर्ज किए
  • मैंने GPT-4 से इस application का शुरुआती version ज़्यादातर लिखवाया। मैंने application की basic structure माँगकर शुरुआत की, और फिर अलग-अलग features को धीरे-धीरे बनवाने वाले सवालों की एक शृंखला के ज़रिए यह किया
  • यह बातचीत कुल 30,000 शब्दों तक पहुँची और उस समय के नवीनतम GPT-4 model की पूरी क्षमता का उपयोग किया गया
    • [वास्तविक prompts और answers यहाँ छोड़ रहा हूँ]
  • GPT-4 के साथ बातचीत में मैंने कई तरह से अनुरोध किए
    • शब्दों में यह बताने वाले messages से कि मैं क्या चाहता हूँ और model से पूरी implementation माँगने तक, से लेकर खास बदलावों का अनुरोध करने वाले messages तक ("औसत score से तुलना करने के बजाय, क्या आप KDE का उपयोग करके percentile बता सकते हैं?")
    • इसमें ऐसे पूरी तरह अधूरे सवाल भी शामिल थे जहाँ मैंने सिर्फ़ error message copy-paste कर दिया (जैसे "Plotting: numpy.linalg.LinAlgError: singular matrix"), या ऐसे मामले जहाँ मैंने एक सरल one-off जवाब माँगा ("ऐसा कौन-सा तरीका है जिससे JavaScript में string से लोड की गई सामग्री वाले iframe को page में जोड़ा जाए?")
  • language model प्रभावी क्यों है
    • यह तरीका इसलिए काम करता है क्योंकि language models उन चीज़ों को अच्छी तरह हल करते हैं जिन्हें लोग पहले ही हल कर चुके हैं
    • इस quiz का 99% हिस्सा बस basic HTML था, जिसके साथ Python webserver backend था, और ऐसा कुछ कोई और भी लिख सकता था
  • यह quiz रोचक और लोगों को पसंद आने का कारण इसके पीछे की तकनीक नहीं, बल्कि quiz की सामग्री थी। और जब सारे उबाऊ हिस्से automate हो जाएँ, तो quiz बनाना बहुत आसान हो जाता है
  • मुझे पूरा यक़ीन है कि language model की मदद के बिना मैं शायद यह quiz बनाता ही नहीं
    • क्योंकि मुझे शुरुआत से पूरा web application लिखने में समय लगाने में रुचि नहीं थी
    • और यह बात एक ऐसे व्यक्ति की ओर से है जिसे programming करना आता है!
  • मेरा मानना है कि मौजूदा models भी इतने सक्षम हैं कि ज़्यादातर लोग सिर्फ़ solution माँगकर ऐसे सार्थक काम कर सकते हैं जिन्हें वे पहले कभी हल नहीं कर पाते
  • आगे मैं ऐसे कुछ और उदाहरण दूँगा जहाँ models ने मेरे लिए पूरे applications लिखे, और जब मैं उन्हें जारी करूँगा तो साफ़ बताऊँगा कि वे language model की मदद से बनाए गए थे

नई तकनीकों के लिए tutor की भूमिका

  • पहले मैं नए frameworks के साथ कदम मिलाने की कोशिश करता था, लेकिन एक व्यक्ति के पास उपलब्ध समय सीमित होता है
  • अपने काम के कारण मैं अपना ज़्यादातर समय नवीनतम research developments को follow करने में लगाता हूँ, न कि नवीनतम JavaScript frameworks के developments को follow करने में।
  • किसी विशेष research area के बाहर कोई नया project शुरू करते समय आम तौर पर दो विकल्प होते हैं
    • पहला, जो आता है उसी का उपयोग करना,
    • दूसरा, कोई नया (आमतौर पर बेहतर) तरीका सीखना
  • यहाँ language models मदद करते हैं। Docker, Flexbox, React जैसे ज़्यादातर नए frameworks या tools दूसरों के लिए नए नहीं हैं। दुनिया भर में ऐसे हज़ारों से लेकर लाखों तक लोग होंगे जो इन्हें गहराई से समझते हैं। मौजूदा language models भी ऐसे ही हैं।
  • किसी static tutorial को पढ़ने के बजाय, जो किसी खास पाठक को मानकर किसी खास लक्ष्य तक पहुँचाने के लिए लिखा गया हो, आप language model के साथ interact करके वह सीख सकते हैं जो काम पूरा करने के लिए ज़रूरी है।
  • इस साल की शुरुआत में जब मैं एक LLM evaluation framework बना रहा था, मैं LLM-generated code को एक restricted environment में चलाना चाहता था
    • Docker इस काम के लिए एकदम सही tool था, लेकिन मैंने इसे पहले कभी इस्तेमाल नहीं किया था।
  • Docker का उपयोग करना project का लक्ष्य नहीं था, वह सिर्फ लक्ष्य तक पहुँचने के लिए ज़रूरी tool था
    • मैं Docker का सिर्फ 10% समझना चाहता था ताकि मुझे भरोसा हो सके कि मैं इसे सबसे बुनियादी तरीके से सुरक्षित रूप से इस्तेमाल कर रहा हूँ
  • 90 के दशक में शायद मुझे Docker इस्तेमाल करने पर कोई किताब खरीदनी पड़ती, उसके शुरुआती कुछ अध्याय पढ़ने पड़ते, फिर बाकी छोड़ते हुए यह समझना पड़ता कि जो मैं करना चाहता हूँ वह कैसे करूँ
    • पिछले 10 वर्षों में यह इतना बेहतर हुआ कि आप Docker इस्तेमाल करने के online tutorials खोजते, उन्हें follow करते, और फिर error messages खोजकर देखते कि क्या किसी और को भी वही समस्या हुई है
  • लेकिन आज के समय में आप language model से Docker सिखाने को कह सकते हैं
    • Docker को set up और run करने के बाद मुझे समझ आया कि Linux पर चलाते समय permissions की समस्या है। इसे हल करना था, इसलिए मैंने model से मदद माँगी
    • इसी दौरान मुझे Podman के बारे में पता चला, और मैंने model से Docker-specific code को उसके equivalent Podman version में rewrite करने को कहा
    • और जब मुझे यह समझना था कि Docker container में host का GPU कैसे pass through किया जाए, तब भी मैंने उससे पूछा

नया project शुरू करना

  • बचपन में मेरी पहली programming language Java थी। मुझे programming बहुत पसंद थी, लेकिन नए project की खाली स्क्रीन देखना बिल्कुल पसंद नहीं था। खासकर Java में!
    • एक Hello World program को compile करना भी मुश्किल लगता था, क्योंकि यह समझना पड़ता था कि public static void main string args क्या करता है, parentheses कहाँ लगते हैं, कौन-सा अक्षर फिर से uppercase है, और braces व brackets जगह-जगह क्यों हैं
  • इसलिए मैंने वही किया जो कोई भी बच्चा करता। मैंने अपने पिता से कहा कि वे ही यह कर दें
  • 20 साल बाद भी किसी अनजाने framework का उपयोग करके नया project शुरू करना मुझे अब भी पसंद नहीं है
    • boilerplate हटाने में बहुत समय लगता है और मुझे समझ नहीं आता कि मैं क्या कर रहा हूँ
  • उदाहरण के लिए, हाल ही में मैं CUDA code लिखकर GPU पर किसी naive Greedy search की performance benchmark करना चाहता था, ताकि किसी और की efficient और optimized CPU implementation से उसकी तुलना कर सकूँ
  • लेकिन मुझे CUDA program लिखना नहीं आता
    • मुझे C लिखना आता है, और मैं GPU के काम करने का तरीका, kernels कैसे काम करते हैं, memory layout वगैरह समझता हूँ
    • लेकिन वास्तव में GPU को काम भेजने वाला code कैसे लिखा जाता है, यह नहीं जानता
    • इसलिए मैंने model से CUDA program का पहला pass लिखने को कहा
    • क्या वह perfect है? बिल्कुल नहीं! लेकिन वह एक शुरुआत है। और मुझे ठीक वही चाहिए
  • यहाँ साफ दिखता है कि code में बहुत-सी गलतियाँ हो सकती हैं
    • असल में यह बिल्कुल भी समस्या नहीं है
    • क्योंकि मैं perfect solution नहीं, एक starting point ढूँढ रहा हूँ
    • अगर भविष्य में models और बेहतर हो जाएँ, तो वह शानदार होगा
    • लेकिन अभी जो हमारे पास है, वह भी पहले से बहुत मददगार है।
  • इससे पूरी तरह अलग, मैं घर पर चल रहे एक दूसरे personal project के लिए Raspberry Pi Pico W का उपयोग कर रहा हूँ
    • यह मेरा इसे पहली बार इस्तेमाल करना था
    • खासकर मैं networking से जुड़ा काम करना चाहता था
    • बेशक, online ऐसे अच्छे tutorials मिल सकते हैं जो बताते हों कि मैं जो करना चाहता हूँ वह कैसे किया जाए
    • लेकिन हाल के internet search results देखें तो ऊपर के 5 परिणाम अक्सर ऐसे बेकार content farms होते हैं जिनमें 2008 का buggy code होता है, जिन्हें सिर्फ SEO के लिए update किया गया है, और वे अब भी काम नहीं करते
  • इसलिए मैंने इसके बजाय language model से कहा कि वह मुझे सिखाए कि मैं जो चाहता हूँ वह कैसे करूँ
    • मैंने पहले microcontrollers के साथ काम किया है, इसलिए मुझे मोटे तौर पर पता है कि वे कैसे काम करते हैं
    • लेकिन Pico W के साथ मैंने पहले कभी काम नहीं किया था
    • मुझे बस इतनी मदद चाहिए थी कि मैं सभी dependencies के साथ शुरुआत कर सकूँ, बाकी मैं खुद समझ सकता था
  • किसी नए microcontroller के लिए मैं जो पहला "hello world" program हमेशा लिखता हूँ, वह LED blink करवाने वाला होता है
    • इससे यह test किया जा सकता है कि क्या आप device पर code compile और upload कर सकते हैं, क्या सभी pins सही तरह से configured हैं, और कुल मिलाकर आप क्या कर रहे हैं
    • इसलिए आप बस blinking program माँग सकते हैं। (फिर से, क्या यह internet पर मौजूद है? लगभग निश्चित रूप से हाँ। लेकिन तब मुझे उसे खुद ढूँढना पड़ता।)
  • यह code चला लेने के बाद मुझे समझ आ जाता है कि आगे क्या करना है
    • मुझे Python कैसे काम करता है, यह पता है (मानें या न मानें!)
    • इसलिए खास MicroPython वाले हिस्से को पार करके मैं वहीं से editing जारी रख सकता हूँ
  • और जब किसी दूसरी समस्या पर अटकता हूँ जिसमें special handling चाहिए होती है, तो मैं model से मदद माँग सकता हूँ
    • उदाहरण के लिए, यहाँ मैंने model से WiFi से connect करने वाला script लिखने को कहा
  • और फिर जब दोबारा अटकता हूँ, जैसे MQTT server से connect करना हो, तो फिर model से मदद माँग लेता हूँ
  • अब मैं यह लगातार कर रहा हूँ। इस section की शुरुआत में दिया गया उदाहरण भी कोई hypothetical बात नहीं है
    • मैं Flexbox का उपयोग कैसे करें, यह पूछ रहा हूँ, क्योंकि HTML layout सीखने का नया तरीका tables की जगह div का उपयोग करना था

code को सरल बनाना

  • एक security researcher के रूप में मुझे अक्सर ऐसे नए repositories मिलते हैं जिनमें किसी और के research project की हज़ारों lines का code होता है, और मुझे यह समझकर उस पर attack करना होता है कि वह कैसे काम करता है
    • अगर हर कोई साफ-सुथरा code लिखता, तो यह इतना कठिन नहीं होता, लेकिन दुनिया ऐसी नहीं है
    • researchers को clean code publish करने के लिए प्रोत्साहन नहीं मिलता
    • इसलिए लोग अक्सर काम तो करने वाला, लेकिन घटिया code submit कर देते हैं। (मैं भी ऐसा करता हूँ)
  • मैं यहाँ research से जुड़े examples साझा नहीं कर सकता, लेकिन जिस personal project पर काम कर रहा हूँ उसका एक example दे सकता हूँ
    • मुझे Conway's Game of Life के प्रति अस्वस्थ स्तर का जुनून है
    • हाल ही में मैं Python में कुछ life patterns को evaluate करने का तेज़ तरीका ढूँढ रहा था
    • इसके लिए golly नाम का एक बेहतरीन C++ tool है, लेकिन मैं अपना Python code C++ में फिर से नहीं लिखना चाहता था
  • golly में एक CLI tool है जो वही काम करता है जो मुझे चाहिए था
    • मुझे सिर्फ यह जानना था कि उसे सही तरीके से call कैसे किया जाए
    • इसके लिए पहला कदम था लगभग 50 अलग-अलग command-line options को support करने वाले C++ code को लेकर उसे इतना सीमित करना कि वह सिर्फ वही एक काम सही-सही करे जो मुझे चाहिए
    • इसलिए मैंने 500 lines का पूरा C++ code LLM में डाल दिया और उससे वही काम करने वाली एक छोटी file माँगी
  • और फिर क्या हुआ? वह पूरी तरह काम कर गया
    • उसके बाद मैंने C++ code के चारों ओर Python wrapper माँगा। वह भी अच्छी तरह काम कर गया
  • यह उन चीज़ों में से एक है जिन्हें करना इतना झंझट भरा होता कि लेखक खुद भी शायद कभी न करता
    • लेकिन अब क्योंकि मैं बस पूछ सकता हूँ, मेरे पास ऐसा कुछ है जो मूल Python code से 100 गुना तेज़ है
  • मैं ऐसा काफ़ी बार करता हूँ। Python में बिल्कुल वही काम करने वाला एक और example भी है
  • इनमें से कोई भी काम मुश्किल नहीं है
    • लेकिन हर बार ऐसा करने पर काफ़ी समय बचता है
    • और मुझे लगता है कि यही आज के LLMs के कमाल होने की बड़ी वजहों में से एक है
    • यह flashy नहीं है, और "यह रहा वह उबाऊ तरीका जिससे मैंने अपनी ज़िंदगी आसान बनाने के लिए LLM इस्तेमाल किया" कहकर शायद internet points भी ज़्यादा न मिलें, लेकिन असल में यही हो रहा है

एकरस कामों को automate करना

  • ऐसे बहुत से काम होते हैं जिनमें सोचने की ज़रूरत नहीं होती, वे उबाऊ होते हैं, लेकिन फिर भी करने पड़ते हैं
  • काम टालने की एक मुख्य वजह यह जानना होता है कि उसे पूरा करना झुंझलाहट भरा और पीड़ादायक होगा
    • LLM इस तरह की पीड़ा को बहुत कम कर देते हैं, और जब पता हो कि सिर्फ़ दिलचस्प समस्याएँ ही हल करनी हैं, तो किसी काम को शुरू करना बहुत आसान हो जाता है
    • यहाँ मैं ऐसे पूरी तरह रोज़मर्रा के मसलों को देखूँगा जिन्हें मैंने LLM से कहकर हल कराया
  • उदाहरण के लिए, हाल ही में मुझे Python 3.9 में लिखे एक Python प्रोग्राम को disassemble करना था
    • ज़्यादातर Python disassembler सिर्फ़ Python 3.7 से पहले के version पर काम करते थे और 3.9 binary पर चल ही नहीं रहे थे
  • Disassembly कोई बहुत मुश्किल काम नहीं है। ज़्यादातर मामला goto का पीछा करते हुए control flow को फिर से बनाना और गलती न करना होता है
    • सैकड़ों lines के code के लिए हज़ारों op-code को हाथ से बदलने में समय लगाने के बजाय, मैंने LLM से कहा कि वह यह काम कर दे
    • और उसने यह सचमुच बहुत अच्छे से किया! जितना मुझे संभव लगता था, उससे कहीं ज़्यादा बेहतर
  • एक और उदाहरण तब का है जब unstructured data लेकर उसे structured format में ढालना हो
    • जैसे, किसी project पर काम करते समय मुझे लेखकों के नामों के साथ किताबों के शीर्षकों की सूची चाहिए थी
    • तो मैंने online unstructured format में data ढूँढा और LLM से उसे format करने को कहा
  • या हाल ही में, जब मैं किसी defense को bypass करने के तरीके पर एक blog post लिख रहा था, तो मैं उस code का पूरा diff दिखाना चाहता था जिसे बदलना पड़ा था
    • इसलिए मैंने (1) diff और (2) diff को HTMLify करने के पुराने example को paste किया और LLM से कहा कि इस diff को उसी पुराने format में दे
  • एक और उदाहरण के तौर पर, काम के हिस्से के रूप में मुझे अक्सर उन resources के citation बनाने पड़ते हैं जिन्हें मैं इस्तेमाल करता हूँ
    • Google Scholar papers के लिए यह बहुत आसान बना देता है और बस citation copy-paste करना होता है
    • लेकिन web page को cite करना थोड़ा झंझट भरा होता है
    • हाल में मैं LLM से citation बनवाने को कह देता हूँ। (साफ़ कर दूँ, मैं यह जाँचता हूँ कि यह सही है!)
  • मैं ऐसे कम-से-कम 100 और उदाहरण दे सकता हूँ। लेकिन मुझे लगता है बात समझ में आ गई होगी
  • मैं अच्छी तरह समझता हूँ कि कोई इसे देखकर कह सकता है, "बस इतना ही??"
    • लेकिन यह याद रखना चाहिए कि सिर्फ़ 5 साल पहले वे मुश्किल से एक ढंग का paragraph जोड़ पाते थे, पूरी समस्या हल नहीं कर पाते थे

हर उपयोगकर्ता को "power user" बनाना

  • अगर आपने कभी किसी ऐसे व्यक्ति को कोई tool इस्तेमाल करते देखा है जो आपसे काफ़ी कम दक्ष हो, तो वह थोड़ा कष्टदायक हो सकता है
    • आप उन्हें ऐसे काम पर मिनटों, कभी-कभी घंटों खर्च करते देख सकते हैं जिन्हें किसी तरह के macro या parallel application के चतुर इस्तेमाल से automate किया जा सकता है
  • लेकिन यह करने के लिए ज़रूरी मंत्र सीखने में समय लगता है और यह मुश्किल भी है
  • उदाहरण के लिए, हाल ही में मैं Apple Lisa keyboard पर keyboard input संभालने वाला एक Python प्रोग्राम लिखना चाहता था
    • मुझे online कोई ऐसा व्यक्ति मिला जिसने C में यह काम करने के लिए कुछ लिखा था, और उसमें #define KEYNAME key_code जैसे बहुत से statements थे
    • मैं इन्हें एक Python dictionary में बदलना चाहता था जो integer code को उस string से map करे
  • मैं Emacs उपयोगकर्ता हूँ। मुझे पता है कि Emacs में इस समस्या को कैसे हल करना है। यह बहुत कठिन नहीं होगा। अभी रिकॉर्ड किए गए main capture का यह हिस्सा उस effect को पैदा कर सकता था:
    C-h C-s #def [enter] M-f [delete] C-d M-f C-[space] M-f C-w C-a C-y : " M-f ", C-g C-] } C-[ {
  • यह मेरे लिए लगभग स्वाभाविक है, लेकिन इसे स्वाभाविक बनने में मैंने अपनी ज़िंदगी का आधे से ज़्यादा समय Emacs में पर्याप्त दक्ष होने में लगाया है। लेकिन अब अगर editor से जुड़ा LLM हो, तो मैं क्या टाइप करूँगा?
    C-h C-h rewrite these #defines to a dictionary of {keycode: string, ...}
  • फिर अचानक text मेरी आँखों के सामने फिर से लिखा जाता है!
  • ऐसे मामलों में मुझे लगता है कि LLM की संभावित उपयोगिता experts की तुलना में non-experts के लिए अधिक है
    • मॉडल हर किसी का baseline ऊपर उठा देते हैं, और अगर पहले वे कुछ बिल्कुल नहीं कर सकते थे, तो अचानक वे बहुत कुछ कर पाते हैं

API reference की तरह इस्तेमाल करना

  • असली programmer किसी tool के काम करने का तरीका जानना हो तो reference manual पढ़ते हैं
    • लेकिन मैं एक आलसी programmer हूँ, इसलिए मैं चाहता हूँ कि कोई बस जवाब सामने रख दे
    • इसलिए अब मैं language model से पूछता हूँ
  • जब मैं ऐसे उदाहरण दिखाता हूँ, तो कुछ लोग रक्षात्मक होकर कहते हैं, "LLM ने ऐसा कुछ नहीं किया जो आप अपने पास पहले से मौजूद tools से नहीं कर सकते थे!"
    • और वे सही हैं
    • लेकिन search engine ऐसा कुछ नहीं कर सकता जो physical book से नहीं किया जा सकता, और physical book ऐसा कुछ नहीं कर सकती जो source code पढ़कर नहीं किया जा सकता
  • लेकिन इनमें से हर चीज़, बारी-बारी से, पिछली चीज़ की तुलना में आसान हो जाती है
    • और जब कुछ आसान हो जाता है, तो आप उसे ज़्यादा बार, और गुणात्मक रूप से अलग तरीकों से करने लगते हैं
  • prompts वाले उदाहरण
    • "Bash में कौन-सा $ सभी बाकी arguments देता है" यह पूछकर जवाब ले लेना। (और उसके तुरंत बाद अगला सवाल, "इसे कैसे इस्तेमाल करते हैं"!)
    • या जब मुझे जानना हो कि LaTeX में text को लाल कैसे किया जाए, तो अब मैं search या docs पढ़ने के बजाय model से पूछता हूँ
    • और जब मुझे जानना हो कि अलग-अलग GDB commands के बराबर LLDB commands कौन-सी हैं, तब भी मैं यही करता हूँ
    • या जब मुझे समझना हो कि कुछ find commands कैसे काम करते हैं
    • lpr का इस्तेमाल कैसे करें, यह भी
    • LaTeX command को rebind कैसे करें, यह भी
  • वास्तव में, यह उन सबसे आम तरीकों में से एक है जिनमें मैं LLM का उपयोग करता हूँ
    • मैं ऐसे हज़ारों और उदाहरण सिर्फ़ इसलिए नहीं जोड़ सकता क्योंकि Emacs और shell, दोनों में LLM query करने के tools built-in हैं
    • इसलिए 90% मामलों में, जब मैं इनमें से कुछ करना चाहता हूँ, तो मुझे editor छोड़ने की भी ज़रूरत नहीं पड़ती

ऐसी चीज़ें खोजना जिन्हें ढूँढना मुश्किल हो

  • इंटरनेट पर कंटेंट खोजना पहले एक मुश्किल, सीखी हुई skill हुआ करती थी
    • query में कौन-से खास शब्द शामिल करने हैं? क्या वे plural होने चाहिए? singular? past tense?
    • कौन-से शब्द ऐसे हैं जिन्हें आप पेज पर दिखाना नहीं चाहते? क्या आपको X AND Y चाहिए, या X OR Y?
  • अब ऐसा नहीं है
    • मुझे याद भी नहीं कि मैंने आख़िरी बार Google में OR का इस्तेमाल करके query कब लिखी थी
    • यह भी याद नहीं कि results के किसी subset को हटाने के लिए मैंने आख़िरी बार minus (-) का इस्तेमाल कब किया था
    • आजकल ज़्यादातर मामलों में आप बस जो ढूँढ़ना चाहते हैं वह लिख देते हैं, और search engine उसे ढूँढ़ देता है।
  • फिर भी search engine अभी भी 100% natural language query नहीं हैं
    • अभी भी ऐसा लगता है जैसे Reverse-Jeopardy खेल रहे हों, और सवाल के बजाय जवाब में आने वाले keywords इस्तेमाल करने की कोशिश कर रहे हों
    • यह एक ऐसी skill है जिसे हम लगभग सभी ने सीख लिया था और फिर भूल गए कि सीखी थी
  • language model आज कुछ आसान कामों के लिए बस बेहतर हैं, और समय के साथ ऐसे काम बढ़ते जा रहे हैं
    • आप बस टाइप कर सकते हैं, "ठीक है, तो + add के बराबर है, लेकिन ~ क्या है", और यह आपको बता देगा कि जवाब inv है
  • standard search engine से इसे खोजना बहुत मुश्किल है
    • मुझे पता है कि जवाब ढूँढ़ने का कोई न कोई तरीका है
    • शायद मैं "python documentation metaclass add" टाइप करूँ, फिर पेज में ~ खोजूँ, तो जवाब मिल जाएगा
    • लेकिन जो सवाल मेरे मन में है, वही सीधे LLM से पूछना भी काम कर जाता है
  • ऐसा करने से हर बार सिर्फ़ कुछ सेकंड ही बचते हैं, लेकिन जब आप किसी coding task को हल कर रहे हों और पहले से ही एक साथ लाख चीज़ें सँभाल रहे हों, तो बस समस्या को brain dump कर देना और एक सुसंगत जवाब पा लेना कमाल का होता है
  • इसका मतलब यह नहीं कि आज वे इस काम में perfect हैं
    • language model वही जानते हैं जो online काफ़ी बार दोहराया गया हो
    • "काफ़ी बार" का मतलब मॉडल के हिसाब से बदलता है, इसलिए यह सोचने में कुछ mental cycles लगती हैं कि मॉडल से पूछूँ या इंटरनेट से
    • लेकिन मॉडल बेहतर होते रहेंगे
  • या फिर जब भी कोई random crash हो, मैं जो देख रहा हूँ वह मॉडल में dump कर देता हूँ और उससे explanation माँगता हूँ
    • यहाँ मैंने "Remote wildcard transfer issue" टाइप किया, और वही किया
  • एक बिल्कुल अलग उदाहरण में, पिछले साल मैं एक blog post लिख रहा था और चाहता था कि पहले शब्द का पहला अक्षर बड़ा हो और बाकी text उसके चारों ओर wrap हो जाए
    • इसे drop cap कहते हैं। लेकिन मुझे यह पता नहीं था
    • मुझे सिर्फ़ वह effect पता था जो मैं चाहता था, इसलिए मैंने language model से पूछा, "मैं चाहता हूँ कि यह किसी सुंदर किताब जैसा लगे जहाँ text O के आसपास wrap हो", और उसने मुझे ठीक वही दिया जो मैं चाहता था
    • यह भी उस श्रेणी में आता है: "यह मैंने सिर्फ़ LLM की वजह से किया"
    • मुझे नहीं लगता कि इसे करने का तरीका पता लगाने में बहुत समय लगाना मेरे लिए worthwhile होता
    • लेकिन क्योंकि मैं मॉडल से पूछ सकता था, मैंने किया, और इससे मेरी post थोड़ी और अच्छी दिखने लगी

एकबारगी काम हल करना

  • programs दो तरह के होते हैं
    • पहला, वे programs जिन्हें आप ठीक से बनाना चाहते हैं। वे कुछ समय तक रहेंगे और सालों तक maintain करने होंगे, इसलिए उनका साफ़-सुथरा होना मायने रखता है
    • दूसरा, वे programs जो 25 सेकंड के लिए मौजूद रहते हैं। वे किसी task को पूरा करने में मदद करते हैं और फिर तुरंत फेंक दिए जाते हैं
  • जिन मामलों में code quality की मुझे बिल्कुल परवाह नहीं होती और program पूरी तरह standalone होता है, वहाँ अब मैं लगभग पूरी तरह LLM का इस्तेमाल करके लिखता हूँ
  • चेतावनी: इनमें से ज़्यादातर मामले भी ऐसे हैं जिन पर आप कह सकते हैं, "बस इतना ही?"
    • लेकिन जैसा मैंने पहले कहा, किसी भी दिन किसी project में लगाने के लिए समय सीमित होता है
    • और अगर मैं ऐसा program लिखने में समय और mental energy बचा सकता हूँ जिसे फिर कभी इस्तेमाल नहीं करना है, तो मैं वही करूँगा
  • शायद सबसे आम उदाहरण यह है कि किसी research experiment से बने data को visualize करने के लिए plots बनाने में मदद ली जाए
    • ऐसे दर्जनों उदाहरण हैं। शायद 0 से ज़्यादा 100 के क़रीब। वे सब लगभग एक जैसे दिखते हैं, इसलिए यहाँ सिर्फ़ एक ही रख रहा हूँ
  • एक और मिलता-जुलता उदाहरण है जब आपके पास एक format में data हो और आप उसे किसी दूसरे format में बदलना चाहते हों
    • आम तौर पर यह काम सिर्फ़ एक बार करना होता है, और पूरा होते ही script फेंक दी जाती है
  • अगर मुझे चाहिए script काफ़ी सरल हो, तो मैं अक्सर LLM से पूरी की पूरी script लिखने को कहता हूँ
    • उदाहरण के लिए, यहाँ मैंने LLM से ऐसा script लिखने को कहा जो paper को ज़ोर से पढ़कर सुनाए, ताकि मैं देख सकूँ कि उसमें कोई बेवकूफ़ी भरी grammar problem तो नहीं है
  • ज़्यादातर मामलों में, जब मुझे साफ़ नहीं होता कि मुझे क्या चाहिए, तो मैं मॉडल से शुरुआती code माँगकर शुरू करता हूँ और फिर वहाँ से iterate करता हूँ
    • उदाहरण के लिए, यहाँ एक एकबारगी task है जहाँ मुझे data को जल्दी process करना था
    • 2022 में मैं इसे Python में लिखने में 2 मिनट लगाता, और क्योंकि इसे सिर्फ़ एक बार चलाना था, फिर इसके कई घंटों तक चलने का इंतज़ार करता
    • इसे optimize करने में शायद Python program के चलने से भी ज़्यादा समय लग जाता
    • लेकिन अब? मुझे पूरा यक़ीन है कि मैं वही 2 मिनट अपना data processing करने वाला Rust code माँगने में लगाऊँगा
  • या एक और उदाहरण है जहाँ मैंने मॉडल से dataset download करने और शुरुआती processing करने को कहा
    • क्या यह मेरे लिए खुद करना आसान है? शायद हाँ
    • लेकिन यह वह काम नहीं है जिसके बारे में मैं सोचना चाहता हूँ
    • मैं उस research के बारे में सोचना चाहता हूँ जो dataset के साथ करनी है
    • distractions हटाना सिर्फ़ बचने वाले कुछ मिनटों से कहीं ज़्यादा valuable है
  • एक और बार मैं ऐसा program लिख रहा था जिससे pixelated image को छोटे cubes के रूप में 3D print किया जा सके
    • इसके लिए मैं PNG को STL file में बदलना चाहता था, लेकिन यही उस project का मुख्य बिंदु नहीं था
    • यह बस बीच का एक काम था जो होना ज़रूरी था। इसलिए मैंने LLM से इसे हल करने को कहा
  • एक और उदाहरण में, हाल ही में मैं Docker Compose का इस्तेमाल करके एक नया project setup करना चाहता था
    • दिक्कतें आ रही थीं और जो भी हो, मैं बस इसे चलाना चाहता था; बाद में समझ लेता कि गड़बड़ क्या थी
    • इसलिए मैंने कई बार आगे-पीछे किया, बस error messages एक-एक करके copy करता गया, और आख़िर में एक working solution मिल गया।
  • मैं अक्सर खुद को यह करते पाता हूँ कि पहले complete solution माँगता हूँ, फिर उसे modify करने के hints माँगता हूँ
    • यहाँ इस conversation में मैं HTML parse करने वाले program की माँग से शुरू करता हूँ, और फिर वहाँ से API reference या उसे बेहतर बनाने के hints पूछता हूँ
  • एक और बार मैं track करना चाहता था कि समय के साथ computer कितनी memory और CPU इस्तेमाल करता है
    • मैं सही commands ढूँढ़ने और उन्हें एक script में बाँधने में कुछ मिनट खर्च कर सकता था, लेकिन मैंने बस language model से कहा कि वह यह मेरे लिए कर दे
  • हाल ही में मैं थोड़ा electronics बना रहा था, और मेरे पास Arduino पर चलने वाला C program था, लेकिन मैं उसे MicroPython वाले Raspberry Pi Pico पर चलाना चाहता था
    • इस conversion process में कुछ भी दिलचस्प नहीं है। यह बस पूरा होना चाहिए
    • इसलिए खुद करने के बजाय मैंने language model से यह मेरे लिए करने को कहा
  • एक दूसरे project के लिए, मुझे कुछ images को किसी interactive loop के लिए एक अच्छे ML model से classify कराना था
    • मैं इसे खुद भी लिख सकता था, लेकिन मैं मॉडल से यह काम अपने लिए करवा भी सकता था

मुझे कुछ समझाकर बताना

  • मुझे हाल ही में electronics में दिलचस्पी होने लगी है
    • बचपन में मैं electronic products के साथ छेड़छाड़ करता था और कॉलेज में इस पर कुछ classes भी ली थीं
    • लेकिन अब जब मैं असली projects करना चाहता हूँ, तो हज़ारों छोटी-छोटी अनजानी बातों की वजह से कुछ करना मुश्किल हो जाता है
  • मैं practical electronics की कोई किताब पढ़ सकता हूँ, और उससे शायद इस विषय को ठीक से समझ भी सकता हूँ, लेकिन मैं अपना समय पढ़ाई जैसा महसूस होने वाले काम में नहीं बिताना चाहता
    • electronics करने की मेरी आधी वजह तो यह है कि पूरे दिन papers पढ़ने और लिखने से थोड़ा break मिल सके
  • यहाँ LLM की अच्छी बात यह है कि वह दुनिया के सबसे जानकार व्यक्ति जितना विद्वान भले न हो, लेकिन ऐसे हज़ारों-लाखों लोग हैं जिन्हें मेरे electronics से जुड़े सवालों के जवाब पता हैं
    • इसलिए language model को भी शायद वे जवाब पता होंगे
    • और वह हर सवाल का जवाब खुशी-खुशी बता देता है, इसलिए मैं बारीकियों से जूझे बिना वही मज़ेदार हिस्सा कर सकता हूँ जो मैं करना चाहता हूँ
    • और अगर मैं internet पर search करूँ, तो थोड़ी और मेहनत से शायद जवाब मिल ही जाए, लेकिन पूरे दिन जटिल research code पर काम करने के बाद बस model से पूछ लेना जितना आसान है, वह बहुत सुकून देता है
  • इसलिए यहाँ कुछ उदाहरण हैं जहाँ मैंने language model से electronics कैसे काम करता है, इस बारे में बुनियादी सवाल पूछे
    • क्या ये जवाब पूरी तरह सही हैं? कौन जाने
    • लेकिन क्या यह कुछ भी न जानने से बेहतर है?
  • (यह लेख काफ़ी लंबा हो रहा है, और इस बिंदु पर मैं इसे पढ़ने जितना ही लिखने से भी थक चुका हूँ। इसलिए मैं बस ये उदाहरण बिना किसी व्याख्या के छोड़ रहा हूँ।)
    • PCB design के बारे में बुनियादी सवाल
    • soldering के बारे में बुनियादी सवाल
    • capacitor के बारे में बुनियादी सवाल
    • LED के बारे में बुनियादी सवाल
    • floppy disk के बारे में बुनियादी सवाल
  • मैं और भी जारी रख सकता हूँ, लेकिन मुझे लगता है कि बात समझ में आ गई होगी

ज्ञात solutions से काम हल करना

  • लगभग हर चीज़ ऐसी है जो कोई न कोई पहले ही कर चुका है
    • बहुत कम चीज़ें होती हैं जो आप करना चाहते हैं और वे सच में नई हों
    • और language models पहले देखी हुई चीज़ों के solutions देने में बहुत अच्छे हैं
  • एक हालिया project में मुझे कुछ Python code की performance बेहतर करनी थी
    • (1) मैंने LLM से उसे C में rewrite करने को कहा
    • (2) फिर Python से C code को call करने के लिए interface बनाने को कहा
  • ये काम “मुश्किल” नहीं हैं
    • Python से C में बदलना शायद 1–2 घंटे में किया जा सकता है
    • और Python->C API कैसे काम करता है, यह मुझे ठीक-ठीक नहीं पता, लेकिन docs पढ़कर समझा जा सकता है
    • लेकिन अगर मुझे खुद करना पड़ता, तो शायद मैं कभी नहीं करता
    • क्योंकि यह critical path पर नहीं है, इसलिए जिन चीज़ों को बार-बार चलाने की ज़रूरत नहीं है उन्हें तेज़ बनाने में समय लगाने से बेहतर है इंतज़ार करना और कंप्यूटर को काम करने देना
  • लेकिन साधारण programs के लिए Python से C में बदलना (ज़्यादातर) एक mechanical process है, और Python->C calling convention भी एक ही standard वाला है
    • इसलिए मैं बस LLM से कह देता हूँ कि वह यह मेरे लिए कर दे।
  • उसके बाद से मुझे उम्मीद रहने लगी है कि यह ऐसा काम है जो मैं करवा सकता हूँ, और अब जब भी मुझे तेज़ code का कोई छोटा टुकड़ा चाहिए होता है, मैं Python में बताता हूँ कि क्या चाहिए और optimized C माँग लेता हूँ
  • कभी-कभी मैं यही काम करता हूँ, लेकिन अगर मुझे लगे कि C output की तुलना में Rust output की correctness जाँचना आसान होगा, तो C की जगह Rust output माँगता हूँ
  • एक और उदाहरण के तौर पर, multiprocessing library का इस्तेमाल करके Python function को parallelize करना मुश्किल नहीं है
    • थोड़ा boilerplate code लिखना पड़ता है और फिर यह लगभग अपने-आप हो जाता है
    • लेकिन वह code लिखना थोड़ा दर्दनाक है, और यह उस असली काम में बाधा डालता है जो मैं करना चाहता हूँ
    • अब जब भी इसकी ज़रूरत होती है, मैं बस LLM से कह देता हूँ कि यह मेरे लिए कर दे
  • या अक्सर किसी API को test करते समय मैं शुरुआत में बस एक curl request लिख देता हूँ ताकि चीज़ पहले चलने लगे
    • और जब वह काम करने लगती है और मैं उसे programmatically दोहराना चाहता हूँ, तो उसे Python में बदल देता हूँ
    • पहले मैं अक्सर बहुत भद्दा तरीका अपनाता था और बस os.popen() call करके curl command चला देता था, जो अच्छा नहीं है
    • उसे Python requests library में बदलना बेहतर होगा। लेकिन उसमें समय लगता है, इसलिए मैं नहीं करता था
    • लेकिन अब मैं बस LLM से कह देता हूँ कि यह मेरे लिए कर दे, और मुझे ज़्यादा साफ़ program और जल्दी मिल जाता है
  • यहाँ जिस आने वाले project की बात मैं शायद करूँगा, उसके लिए मुझे यह जानना था कि लोग simple wireless transmitters के साथ किस तरह की चीज़ें इस्तेमाल करते हैं
    • और क्योंकि मुझे असल में एक औसत इंसान जैसा जवाब चाहिए था, LLM इसके लिए बिल्कुल सही विकल्प था!

सामान्य errors ठीक करना

  • 2022 से पहले, अगर किसी मशहूर tool या library में error message आता था, तो मैं आमतौर पर यह protocol follow करता था:
    1. error message copy करो
    2. उसे Google में paste करो
    3. सबसे ऊपर वाला Stack Overflow link खोलो
    4. देखो कि सवाल वही है जो मैं पूछना चाहता हूँ; अगर नहीं, तो 2 पर जाओ
    5. सबसे ऊपर वाला solution अपने काम पर लागू करो
    6. अगर काम न करे, तो 2 पर जाओ, search terms बदलो, प्रार्थना करो, वगैरह
  • सच कहूँ तो, जो tools टूटते हैं वे आमतौर पर उस असली काम से लगभग 5 steps दूर होते हैं जिसे मैं अंततः हल करना चाहता हूँ, और मुझे सच में परवाह नहीं होती कि वे कैसे काम करते हैं; बस काम करना चाहिए
  • 2024 में अब यह कैसा दिखता है?
    1. error message copy करो
    2. LLM से पूछो: “इस error को कैसे ठीक करूँ? [error]”
    3. LLM द्वारा सुझाया गया step-by-step solution लागू करो
    4. अगर काम न करे, तो कहो: “यह काम नहीं किया”
  • इसका दिखाने लायक कोई saved example मेरे पास नहीं है। (या फिर मैं 1 घंटे खोजने पर भी नहीं ढूँढ पाया।) लेकिन इसके पीछे वास्तव में अच्छा कारण है: क्योंकि मैंने इसे सीधे अपने workflow में embed कर दिया है
    • मैं Emacs user हूँ
    • मैंने अपना environment इस तरह set किया है कि जब भी program चले और non-zero status code के साथ बंद हो जाए (यानी कोई समस्या हुई हो), तो वह अपने-आप सबसे नए high-speed LLM को बुलाकर जवाब समझाने के लिए कहे, और साथ ही ऐसा patch भी माँगे जिसे मैं code का bug ठीक करने के लिए सीधे apply कर सकूँ
    • आज के models अभी ज़्यादातर मामलों में इस काम में लेखक को पछाड़ देने जितने अच्छे नहीं हुए हैं, लेकिन वे काफ़ी करीब पहुँच रहे हैं
    • और कभी-कभी जब कहीं कोई typo वाला bug होता है, जिसके बारे में पता होता है कि उसे ढूँढना दुःस्वप्न जैसा होगा, और LLM उसे ठीक कर देता है, तो यह सुखद आश्चर्य देता है

निष्कर्ष

  • ऊपर link की गई सारी conversations पिछले साल LLM के साथ हुई मेरी कुल बातचीत का 2% से भी कम हिस्सा हैं
  • मैंने बाकी conversations इसलिए link नहीं कीं क्योंकि वे model के fail होने के उदाहरण हैं, ऐसा नहीं है (हालाँकि ऐसे उदाहरण बहुत हैं)
    • (1) बल्कि इसलिए कि वे पहले से link की गई conversations जैसे ही patterns दोहराती हैं, या
    • (2) इसलिए कि यह समझाना आसान नहीं है कि उनमें क्या हो रहा है और यह सीधे देखना भी मुश्किल है कि वे क्यों उपयोगी हैं
  • आगे भी इन models का मेरा उपयोग बढ़ता रहेगा, ऐसा मुझे लगता है
  • संदर्भ के लिए, 2023 की तुलना में 2024 में मैंने web interface के ज़रिए LLM queries 30% ज़्यादा कीं, और API queries में बढ़ोतरी का मैं कुल हिसाब नहीं लगा सकता, लेकिन मेरा अनुमान है कि वे कम-से-कम 2 या 3 गुना बढ़ी होंगी

LLM क्या नहीं कर सकता, इसके बजाय यह आकलन करें कि वह क्या कर सकता है

  • इंटरव्यू में उम्मीदवारों का मूल्यांकन करते समय, इस बात पर ध्यान देना चाहिए कि वे क्या कर सकते हैं, न कि इस पर कि वे क्या नहीं कर सकते
  • LLM से तुच्छ सवाल पूछें तो वह अक्षम लग सकता है। उदाहरण के लिए, अगर उससे ऐसी चीनी भाषा में सवाल पूछा जाए जिसे 1 अरब लोग इस्तेमाल करते हैं, तो उसके लिए सही जवाब देना मुश्किल हो सकता है
  • कंप्यूटर साइंस के भीतर भी कई ऐसे क्षेत्र हैं जिन्हें मैं नहीं जानता, जैसे केवल SQL के SELECT स्टेटमेंट तक की जानकारी होना
  • ऑनलाइन यह दावा किया जाता है कि LLM किसी खास task को नहीं कर पाता, इसलिए वह overhyped है; इसे समझना मुश्किल है
    • वाक्य में शब्दों की संख्या नहीं गिन पाता
    • ऐसे सभी शब्दों से शुरू होने वाली कविता नहीं लिख पाता जो 'a' से शुरू हों
    • दो अंकों की संख्याओं का गुणा नहीं कर पाता
    • सूची में से कोई यादृच्छिक तत्व नहीं चुन पाता
  • लेकिन सवाल यह है कि क्या वास्तविक काम में कभी आपने सोचा है कि ऐसे कामों के लिए LLM सही tool है
  • जैसे हम यह नहीं कहते कि 64-बिट पूर्णांकों का भाग अपने दिमाग में न कर पाने से इंसान बेकार है, वैसे ही सिर्फ इसलिए LLM को खारिज करना उचित नहीं कि आपने ऐसा problem बना लिया जिसे वह हल नहीं कर सकता
  • महत्वपूर्ण बात यह है कि क्या ऐसे task मौजूद हैं जिनमें LLM मूल्य दे सकता है
  • प्रोग्रामर पहले से अच्छी तरह जानते हैं कि अलग-अलग उद्देश्यों के लिए अलग-अलग भाषाएँ उपयोगी होती हैं
    • operating system लिखने के लिए C, Python से अधिक उपयुक्त है
    • हम यह नहीं कहते कि Python variables को 32-byte boundary पर align नहीं कर सकता। बस उसका abstraction level अलग है
  • LLM भी इसी तरह बहुत ऊँचे abstraction level पर काम करता है
    • ऐसे कामों के लिए LLM से उम्मीद करना कठिन है जिन्हें एक साधारण program से भी हल किया जा सकता है
    • लेकिन यह अपेक्षा की जा सकती है कि वह दूसरे तरह के काम हल कर सके

निष्कर्ष

  • यह लेख लिखने के दो उद्देश्य
    • यह तर्क देना कि LLM व्यक्तिगत रूप से पहले ही मुझे बहुत मूल्य दे रहा है
    • उन लोगों को उपयोग के उदाहरण दिखाना जिन्हें LLM का विचार अच्छा लगता है, लेकिन यह नहीं पता कि यह उनकी कैसे मदद कर सकता है
  • LLM का मूल्य
    • LLM सब कुछ नहीं कर सकता, लेकिन मौजूदा models भी काफ़ी मूल्य दे रहे हैं
    • उदाहरण के लिए, यह CUDA errors की पहचान करने, packages को फिर से install करने का तरीका बताने, किसी program को C में फिर से लिखने, या किसी खास विषय को सिखाने में मदद कर सकता है
    • यह ऐसा काम है जो कोई कॉलेज छात्र कुछ घंटों की मेहनत से कर सकता है, लेकिन ऐसा कॉलेज छात्र उपलब्ध नहीं होता जो कभी भी आपके सवालों का जवाब दे सके। LLM यह कर सकता है
  • LLM का विकास और मौजूदा स्थिति
    • सिर्फ 5 साल पहले तक LLM की सबसे बड़ी क्षमता विश्वसनीय दिखने वाले अंग्रेज़ी पैराग्राफ लिखना थी, और उसकी व्यावहारिक उपयोगिता लगभग शून्य थी
    • लेकिन आज LLM प्रोग्रामिंग कामों की productivity कम-से-कम 50% बढ़ा देता है और उबाऊ कामों को हटा देता है
    • LLMs की वजह से मैंने कई ऐसे projects पूरे किए जिन्हें मैं वरना शायद शुरू भी नहीं करता
  • LLMs की उपयोगिता पर आपत्ति का उत्तर
    • मैं इस दावे से असहमत हूँ कि "LLM overhyped है और उसका कोई वास्तविक मूल्य नहीं है"
    • व्यक्तिगत रूप से LLM मुझे बहुत बड़ा मूल्य दे रहा है
    • 20 साल के प्रोग्रामिंग अनुभव के बाद भी, LLM की वजह से मेरी productivity काफ़ी बढ़ी है
    • मेरा मानना है कि मेरे अलावा भी बहुत से लोग LLMs से लाभ उठा सकते हैं
  • आगे का दृष्टिकोण
    • मौजूदा models भी पहले से बहुत मूल्य दे रहे हैं
    • आने वाले 5 वर्षों में LLMs कैसे विकसित होंगे, इसे लेकर उत्साह और भय दोनों हैं
    • अगली पोस्ट में मैं इस पर अपने पूर्वानुमान साझा करूँगा

7 टिप्पणियां

 
edunga1 2024-08-06

यह एक ऐसा लेख है जिससे आसानी से जुड़ाव महसूस होता है। लेखक ने इसे इतना अच्छी तरह इस्तेमाल किया है कि पढ़ते-पढ़ते थकान होने लगती है..;

ऐसे हज़ारों और उदाहरण न जोड़ पाने की एकमात्र वजह यह है कि Emacs और shell, दोनों में LLM को query करने वाले tools built-in हैं

मुझे भी लगता है कि मैं terminal window से बाहर नहीं निकलता। शायद सभी आलसी developers ऐसे ही इस्तेमाल करते होंगे।
अगर समस्या सरल हो, तो copilot.vim इस्तेमाल करके कोई भी buffer खोलता हूँ और auto-completion से जवाब निकलवा लेता हूँ।
अगर shell command याद न आए, तो copilot-cli का ?? command है, इसलिए search करने की ज़रूरत नहीं पड़ती।
code completion tool तो मुझसे पूछने से पहले ही इरादा समझकर code बना देता है।

जैसा कि मूल लेख में कहा गया है, खोज कैसे करनी है यह तो पता होता है, लेकिन LLM से बिना औपचारिकता के खुलकर पूछ सकते हैं, इसलिए वह और भी अच्छा लगता है.

 
galadbran 2024-08-06

मैं भी copilot-vim इस्तेमाल करता हूँ! मैं पूछना चाहता हूँ कि आप copilot-cli से किस चीज़ का मतलब कर रहे हैं।

 
edunga1 2024-08-06

https://www.npmjs.com/package/@githubnext/github-copilot-cli
यह है!

https://docs.github.com/ko/copilot/…
इसका GitHub CLI extension version भी है, लेकिन इसे इस्तेमाल करने का तरीका थोड़ा अलग है।

 
galadbran 2024-08-08

कमांड लाइन में भी Copilot की मदद मिल रही है, यह अच्छा लग रहा है। धन्यवाद!

 
wedding 2024-08-06

जब मुझे यह पता होता है कि कैसे बनाना है लेकिन टाइप करना आलस लगता है, तो मैं ChatGPT से करवा लेता हूँ.
मुझे लगता है कि इसका सही इस्तेमाल करने के लिए आउटपुट को रिव्यू करना आना चाहिए.

 
xguru 2024-08-06

लेखक LLM के जिन उपयोगों पर ज़ोर देते हैं, वे हैं 1. सीखने में मदद 2. उबाऊ कामों का automation।
इन दिनों मेरे लिए भी बिल्कुल ऐसा ही है। हाल में मैंने जो काम किए हैं, उन्हें देखें तो

  1. OpenSCAD code से board game organizer design करना
  • Fusion से करने की तुलना में, OpenSCAD code लिखवा लेने पर बाद में reuse करना आसान होता है।
  • Parameter handling के लिए कहें तो यह function बनाकर भी अच्छी तरह दे देता है, इसलिए कई जगह इस्तेमाल किया जा सकता है।
  1. scan किए गए card PDF से image extract करके मनचाहे तरीके से adjust करने वाला automation tool Python script लिखना
  • जिन board game का Korean version शायद ठीक से न आए, उन्हें scan करके Hindi localization जैसा काम करने में इस तरह के कई कामों के लिए इसका उपयोग करता हूँ।
  1. shopping mall cart copy करने के लिए JavaScript लिखना
  • कई overseas board game shopping mall से खरीदी गई चीज़ों को forwarding address service वाली तरफ दर्ज करने का काम automate कर रहा हूँ।

बेशक ये काम LLM के बिना भी किए जा सकते हैं, लेकिन बस इसे कह देना ज़्यादा तेज़ है, इसलिए यह Life Hacking के लिए एकदम उपयुक्त है.

 
helloppfm 2024-08-06

इससे काफ़ी सहमति होती है.
AI का इस्तेमाल करते हुए मुझे जो महसूस होता है, यह उससे काफ़ी मिलता-जुलता है.