एकाइ 6 / 12

डिबगिङ र रूट कारण विश्लेषण

लाभ:

  • सानो प्रजनन योग्य उदाहरणमा बग घटाउने र पूर्ण प्रमाणको साथ AI मा सार्न सक्ने क्षमता
  • सस्तो नियन्त्रणको साथ प्रमाण-आधारित परिकल्पनाहरू परीक्षण गर्ने र मूल कारण पत्ता लगाउने क्षमता
  • मूल कारण समाधान गर्ने क्षमता र लक्षणलाई प्याच गर्नुको सट्टा रिग्रेसन परीक्षणको साथ सुरक्षित गर्ने क्षमता

डिबगिङ भनेको सफ्टवेयरले अप्रत्याशित रूपमा व्यवहार गर्नुको कारण पत्ता लगाउने र यसलाई ठीक गर्ने प्रक्रिया हो। यो काम हो जहाँ विकासकर्ताले सबैभन्दा धेरै समय बिताउँछ र धेरै थकित हुन्छ; किनकी धेरैजसो गल्ती जहाँ देखिने ठाउँमा हुदैन तर केहि कदम पछाडी लुकेको हुन्छ । AI एक शक्तिशाली सोच साझेदार हो जसले यस अनुसन्धानलाई गति दिन्छ - तर मात्र यदि तपाईंले यसलाई सही प्रमाण दिनुभयो भने। प्रमाण बिना डिबग गर्ने क्षेत्र हो जहाँ AI ले सबैभन्दा धेरै भ्रम उत्पन्न गर्दछ।

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

किन प्रमाण सबै कुरा हो?

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

डिबगिङमा, AI लाई जासूसको सहायकको रूपमा सोच्नुहोस्: तपाईंले जति धेरै प्रमाणहरू प्रस्तुत गर्नुहुन्छ, यसले उत्पन्न गर्ने परिकल्पना त्यति नै सही हुन्छ। यदि त्यहाँ कुनै प्रमाण छैन भने, सहायकले अनुमान मात्र गर्नेछ र तपाईंलाई गलत ट्रेलमा लैजान सक्छ।

सुझाव: AI मा बग पोर्ट गर्नु अघि, यसलाई सबैभन्दा सानो पुन: उत्पादन गर्न मिल्ने उदाहरणमा घटाउनुहोस्। त्रुटि ट्रिगर गर्ने सबैभन्दा सानो कोड र इनपुटले तपाइँ र मोडेल दुवैका लागि चीजहरूलाई एकदम सजिलो बनाउँछ; प्रायः यस कमीको समयमा तपाईले कारण आफैं फेला पार्नुहुन्छ।

चरण-दर-चरण: मूल कारण विश्लेषण प्रवाह

  1. लक्षण स्पष्ट गर्नुहोस्। "के हुँदैछ, के हुने आशा गर्नुभएको थियो?" दुईलाई एउटै वाक्यमा लेख्नुहोस्।
  2. प्रमाण जम्मा गर्नुहोस्। पूर्ण त्रुटि सन्देश, स्ट्याक ट्रेस, सान्दर्भिक लग लाइनहरू, ट्रिगर प्रविष्टि, संस्करण जानकारी।
  3. परिकल्पना उत्पन्न गर्नुहोस्। AI बाट "3 सम्भावित कारणहरू जसले यस लक्षणलाई व्याख्या गर्छ र म कसरी प्रत्येकको लागि परीक्षण गर्छु?" सोध्नुहोस्।
  4. पहिले सस्तो परिकल्पना परीक्षण गर्नुहोस्। लग थप्नुहोस्, मान छाप्नुहोस्, परीक्षण चलाउनुहोस्। के प्रमाणले परिकल्पनालाई पुष्टि गर्छ?
  5. मूल कारण ठीक गर्नुहोस्, लक्षण होइन। प्याचको साथ लक्षणलाई मौन पार्नुको सट्टा, मूल कारणलाई सम्बोधन गर्नुहोस्।
  6. प्रमाणित गर्नुहोस् र रिग्रेसन परीक्षण थप्नुहोस्। त्रुटि हराएको हेर्नुहोस्; त्यसपछि एक परीक्षण लेख्नुहोस् जसले त्यो त्रुटि समात्नेछ ताकि यो फिर्ता आउँदैन।

तीन मिनी केसहरू

केस 1 - स्ट्याक ट्रेसले सही फाइलमा नेतृत्व गर्यो। एउटा अनुप्रयोगले निश्चित अनुरोधहरूमा 500 त्रुटि फर्काउँदै थियो। विकासकर्ताले AI लाई पूर्ण स्ट्याक ट्रेस र ट्रिगर गर्ने अनुरोध दियो; मोडेलले परिकल्पना गर्‍यो कि त्रुटि मिति पार्सिङ तहमा कुनै पनि मानको कारणले भएको हो। विकासकर्ताले त्यो लाइनमा लग थप्यो, यसलाई प्रमाणित गर्यो र यसलाई १५ मिनेटमा हल गर्यो; 2 घण्टा अप्रमाणित प्रयोगहरु संग दिन अघि बर्बाद गरियो।

केस 2 - भ्रमले गलत ट्र्याकमा नेतृत्व गर्यो। अर्को विकासकर्ताले केवल "डाटाबेस जडान ड्रप हुँदैछ" लेखे। एआईले कुनै प्रमाण बिना जडान पूल सेटिङको आरोप लगायो; विकासकर्ताले यो सेटिङको साथ 40 मिनेट टिंकरिङ बिताए। वास्तविक कारण नेटवर्क साइडमा टाइमआउट थियो र लगहरू हेरेर मात्र प्रकट भएको थियो। पाठ: प्रमाण बिना लिइएको परिकल्पना मात्र सम्भव छ, भरपर्दो छैन।

केस 3 - फ्ल्याकी त्रुटि समातियो। कहिले काहिँ फेल हुने परिक्षा थियो । AI लाई परीक्षण कोड, असफलता सन्देश, र जानकारी दिइएको थियो "कहिलेकाहीं यो पास हुन्छ, कहिले असफल हुन्छ"; मोडेलले परीक्षणको साझा समय/अर्डर निर्भरतालाई संकेत गर्यो। परीक्षण प्रणालीको स्थानीय समयमा आधारित थियो भनेर समीक्षाले पुष्टि गर्‍यो। एकचोटि घडी फिक्स भयो (ठट्टा), परीक्षण स्थिर भयो।

चार प्रतिलिपि गर्न मिल्ने टेम्प्लेटहरू

प्रमाणमा आधारित परिकल्पना उत्पादन:

म बग डिबग गर्दै छु। तलको प्रमाण।- अपेक्षित व्यवहार: {{अपेक्षित}}- अवलोकन गरिएको व्यवहार: {{अवलोकित}}- त्रुटि सन्देश / स्ट्याक ट्रेस: ​​{{ट्रेस}}- ट्रिगरिङ इनपुट: {{इनपुट}}- वातावरण/संस्करण: {{संस्करण}} ३ वटा सबैभन्दा सम्भावित मूल कारणहरूको सूची बनाउनुहोस् जसले यो ptym व्याख्या गर्दछ। प्रत्येकको लागि: म कसरी परीक्षण गर्छु (सस्तो जाँच) र यदि यो सत्य हो भने यसलाई कसरी ठीक गर्ने। यदि प्रमाण अपर्याप्त छ भने, मलाई थप जानकारी चाहिन्छ भन्नुहोस्।

स्ट्याक ट्रेस व्याख्या गर्दै:

यो स्ट्याक ट्रेस पढ्नुहोस्। त्रुटि सम्भवतः (मूल) बाट सुरु हुन्छ र कुन रेखाहरू केवल श्रृंखलाको निरन्तरता हो भनेर छुट्याउँनुहोस्। पहिले हेर्नको लागि 1-2 ठाउँहरू सुझाव गर्नुहोस्। सम्बन्धित कोड:{{code}}ट्रेस:{{trace}}

न्यूनतम पुन: घटाउ:

तलको कोडले त्रुटि उत्पन्न गर्छ। यसलाई सबैभन्दा सानो उदाहरणमा घटाउनुहोस् जसले अझै त्रुटि ट्रिगर गर्दछ तर अनावश्यक केहि खारेज गर्दछ। तपाईंले हटाउनुभएको प्रत्येक टुक्राले त्रुटिलाई असर गर्दैन भन्ने नसोच्नुहोस्, तर "यदि तपाईंले यसलाई हटाउनुहुँदा त्रुटि गायब हुन्छ भने, त्यसकारण" भन्ने टिप्पणी थप्नुहोस्।{{code}}

पोस्ट-सुधार प्रमाणीकरण र रिग्रेसन परीक्षण:

मूल कारण मान्नुहोस् {{cause}} र म निम्न समाधान गर्छु: {{fix}}.1) के यो समाधानले लक्षणलाई ठीक गर्छ, के यसले कुनै साइड इफेक्ट गर्नेछ? 2) भविष्यमा यो बग समात्ने रिग्रेसन परीक्षण लेख्नुहोस्।

कमजोर प्रम्प्ट / बलियो प्रम्प्ट

कमजोर: "कोडले काम गर्दैन, किन?"
बलियो: "नोड 20 / एक्सप्रेस। POST / अर्डरहरूले 500 फर्काउँछ जब वस्तुहरू शरीरमा खाली स्ट्रिङ हुन्छ; 400 फर्काउनु पर्छ। स्ट्याक ट्रेस: TypeError: अपरिभाषित ('0' पढ्नुहोस्) को गुणहरू पढ्न सकिँदैन — संलग्न पूर्ण ट्रेस र सम्बद्ध ह्यान्डलर हो। मलाई दिनुहोस् कि प्रत्येकले 3 लाई कसरी सम्भवतः यो परीक्षण गर्दछ भनेर व्याख्या गर्नुहोस्। + कोड]"

शक्तिशाली संस्करण; यसले वातावरण, अन्त्य बिन्दु, ट्रिगर इनपुट, सटीक त्रुटि प्रकार, र अपेक्षित व्यवहार दिन्छ। मोडेलले अब भविष्यवाणी गर्न सक्दैन, तर विश्लेषण।

कदम

AI को योगदान

आफ्नो नियन्त्रण

प्रमाण जम्मा गर्दै

के प्रमाण चाहिन्छ, सम्झाउँछ

साँच्चै प्रमाण सङ्कलन

परिकल्पना पुस्ता

सम्भावित कारणहरू सूचीबद्ध गर्नुहोस्

सन्दर्भको साथ प्राथमिकता दिन्छ

परिकल्पना परीक्षण

परीक्षण विधि सिफारिस गर्दछ

व्यक्तिगत रूपमा सञ्चालन र अवलोकन गर्दछ

सुधार

patch सिफारिस गर्नुभयो

के यसले मूल कारण समाधान गर्छ? यो सत्य हो।

प्रतिगमन

परीक्षण लेख्छन्

परीक्षण बिग्रिएको पुष्टि गर्दछ

मूल कारण समाधान गर्दै, लक्षण होइन

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

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

सामान्य गल्तीहरू

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

संक्षेपमा

डिबगिङमा, AI को शक्ति तपाईंले दिनुभएको प्रमाणसँग प्रत्यक्ष समानुपातिक हुन्छ: पूर्ण त्रुटि सन्देश, स्ट्याक ट्रेस, ट्रिगरिङ इनपुट, र अपेक्षित व्यवहार बिना, मोडेलले अनुमान मात्र गर्छ। अनुशासित प्रवाह - लक्षण स्पष्ट गर्नुहोस्, प्रमाणहरू सङ्कलन गर्नुहोस्, परिकल्पना उत्पन्न गर्नुहोस्, सस्तो नियन्त्रणको साथ परीक्षण गर्नुहोस्, मूल कारण ठीक गर्नुहोस्, प्रमाणित गर्नुहोस्, र रिग्रेसन परीक्षण थप्नुहोस् — बगलाई छिटो र स्थायी रूपमा बन्द गर्दछ। एआई एक परिकल्पना जनरेटर हो; तपाईं एक हुनुहुन्छ जसले निर्णय गर्नुहुन्छ कि बग वास्तवमा हल भयो।

आवेदन कार्य

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

चेकलिस्ट

  • [ ] म त्रुटिलाई AI मा सार्नु अघि सबैभन्दा सानो प्रजनन योग्य नमूनामा घटाउँछु।
  • [] म प्रम्प्टमा पूर्ण त्रुटि सन्देश, स्ट्याक ट्रेस, इनपुट र अपेक्षित व्यवहार थप्दैछु।
  • [ ] म एकल परिकल्पनामा बन्द नगरी, सस्तो नियन्त्रण योग्यको साथ सुरु गर्छु।
  • [ ] म प्रमाणित गर्छु कि मैले लक्षणलाई प्याच गर्नुको सट्टा मूल कारण समाधान गरेको छु।
  • [ ] मैले देखेको छु कि फिक्सले वास्तवमा बग फिक्स गर्छ।
  • [ ] म प्रत्येक समाधान गरिएको बगको लागि रिग्रेसन परीक्षण थप्छु।