तुमचे AI कोडिंग सेटअप हे एक Complicated साधन आहे. तुमचा कोडबेस Complex आहे.
नवीन AI कोडिंग टूल्स एजंट्सना अधिक विश्वसनीय बनवण्याचे आश्वासन देतात. तुम्हाला स्किल्स, सुपरपॉवर्स आणि स्पेक-ड्रिव्हन डेव्हलपमेंटसाठी (spec-driven development) फ्रेमवर्क्स पाहायला मिळतात. ही टूल्स काम करतात. ते एजंट्सना केवळ अंदाज लावण्याऐवजी एक प्रक्रिया फॉलो करण्यास मदत करतात.
पण यात एक सापळा आहे. लोकांना वाटते की एका कामासाठी केलेले उत्तम सेटअप एक सुसंगत (coherent) सिस्टम तयार करते. तसे होत नाही.
हे का घडते हे समजून घेण्यासाठी, Cynefin फ्रेमवर्कचा वापर करा. ते समस्यांचे दोन प्रकारांत वर्गीकरण करते: Complicated आणि Complex.
Complicated समस्या
या समस्यांची उत्तरे शोधता येतात. ती शोधण्यासाठी तुम्ही विश्लेषण आणि कौशल्याचा वापर करता. उदाहरणार्थ, एखादा मॉड्यूल रिफॅक्टर (refactoring) करणे किंवा व्हॅलिडेशन फंक्शन (validation function) लिहिणे. एकदा का तुम्हाला उत्तर मिळाले की, तुम्ही ते पुन्हा करू शकता. बहुतेक AI कोडिंग टूल्स याच श्रेणीत येतात. त्यांचा भर कामाच्या युनिटवर (unit of work) असतो. ते कामांना पुन्हा करता येण्यासारखे (repeatable) आणि पडताळण्यायोग्य (verifiable) बनवतात.
Complex समस्या
या समस्यांची उत्तरे पूर्वअंदाज लावता येत नाहीत. ही सिस्टम विविध भागांचे एक जाळे असते. तुम्ही कृती केल्यानंतरच त्याचे परिणाम दिसून येतात. चाळीस मर्ज केलेले बदल सहा महिन्यांत आर्किटेक्चर बिघडवतील का? एजंट A, एजंट B च्या विरोधात जाईल का? तुम्ही केवळ एका फाईलकडे पाहून ही उत्तरे शोधू शकत नाही. भागांमधील परस्परसंवादामुळे (interaction) या समस्या समोर येतात.
जेव्हा तुम्ही Complicated टूल्सकडून Complex समस्या सोडवण्याची अपेक्षा करता, तेव्हा ताळमेळ बसत नाही.
एखादे टूल एजंटला एक परिपूर्ण फंक्शन लिहून देऊ शकते. पण जर एका कामात userId वापरले असेल आणि दुसऱ्यात user_id वापरले असेल, तर सिस्टम बिघडते. दोन्ही कामे स्वतंत्रपणे "बरोबर" होती. ही त्रुटी 'emergent' आहे. ती युनिटमध्ये नसून परस्परसंवादात असते.
अगदी मोठे context windows देखील हे सोडवू शकत नाहीत. मोठे विंडो तुम्हाला अधिक पाहण्यास मदत करते, पण पाहणे म्हणजे निष्कर्ष काढणे (deducing) नव्हे. तुम्ही संपूर्ण कोडबेस वाचू शकता, तरीही प्रोडक्शन लोडमध्ये (production load) तो डेडलॉक (deadlock) होईल की नाही हे तुम्हाला कळणार नाही. ती एक runtime property आहे.
दोन्ही कसे हाताळायचे:
- Complicated लेयरसाठी: स्किल्स, स्पेक्स (specs) आणि TDD वापरा. यामुळे एजंटचे वैयक्तिक आउटपुट अचूक (rigorous) बनते.
- Complex लेयरसाठी: probe-sense-respond पद्धत वापरा. काय बिघडेल याचा तुम्ही अंदाज लावू शकत नाही. तुम्हाला मर्ज, डिप्लॉय आणि निरीक्षण (observe) करावे लागेल. विविध भाग एकत्र आल्यावर काय होते हे समजून घेण्यासाठी इंटिग्रेशन टेस्ट्स आणि ऑब्झर्व्हेबिलिटीचा (observability) वापर करा.
"चांगले स्पेक तुमची सिस्टम स्थिर करेल" या आश्वासनाच्या जाळ्यात अडकू नका. स्पेक्स युनिटला विश्वसनीय बनवतात. ते सिस्टमला सुसंगत (coherent) बनवत नाहीत.
तुमच्या पद्धतीचा डोमेनशी मेळ बसवा. युनिट परिपूर्ण करण्यासाठी टूल्स वापरा. सिस्टम समजून घेण्यासाठी प्रयोगांचा (experimentation) वापर करा.
Optional learning community: https://t.me/GyaanSetuAi
