मी आमच्या कोडबेसवर AI ला चुकीची माहिती (hallucinating) देण्यापासून कसे थांबवले
AI कोडिंग टूल्स प्रत्यक्ष प्रोडक्शन प्रोजेक्ट्सवर अपयशी ठरतात. ते नवीन कोडवर चांगले काम करतात, पण इतिहास असलेल्या जुन्या कोडवर ते कोलमडून पडतात.
आमच्या फिनटेक (fintech) प्रोजेक्टचा तीन वर्षांचा इतिहास आहे. यामध्ये दोन React frontends, एक ॲडमिन पॅनेल आणि एक FastAPI backend आहे. डेटाबेस अनेक टेबल्स आणि हेवी जॉइन्समुळे (heavy joins) गुंतागुंतीचा आहे.
आम्ही वेगाने काम करण्यासाठी AI वापरण्याचा प्रयत्न केला. पण ते अपयशी ठरले.
मी AI ला 'contacts' टेबल तयार करण्यास सांगितले. त्याने नावे आणि ईमेलसाठी नवीन कॉलम्स तयार केले. आमच्या 'users' टेबलमध्ये हे आधीच आहेत, हे त्याला समजले नाही. त्याने फॉरेन की (foreign key) वापरण्याऐवजी डेटाची डुप्लिकेशन केली.
AI मूर्ख नव्हते. त्यांच्याकडे पुरेसा संदर्भ (context) नव्हता. अपूर्ण माहितीच्या आधारे त्यांनी निर्णय घेतला.
मी 'चांगला कोड कसा मिळवायचा' हे विचारणे थांबवले. त्याऐवजी, 'चांगले निर्णय घेण्यासाठी AI ला कोणत्या संदर्भाची गरज आहे' हे विचारण्यास सुरुवात केली.
आम्ही एक स्ट्रक्चर्ड वर्कफ्लो (structured workflow) तयार केला. तुम्ही जो संदर्भ देता, त्यानुसारच AI ची कार्यक्षमता ठरते. आम्ही तो संदर्भ स्पष्टपणे मांडला.
आमची सेटअप अशी आहे:
- ADR Directory: आम्ही 'Architecture Decision Records' साठी एक फोल्डर तयार केले. हे फाइल्स आम्ही विशिष्ट निवडी का केल्या, याचे स्पष्टीकरण देतात. एक फाईल AI ला नवीन टेबल्स तयार करण्यापूर्वी अस्तित्वात असलेले टेबल्स तपासण्यास सांगते. ती युजर डेटा डुप्लिकेट करण्यास मनाई करते.
- context.md: ही फाईल आमच्या विशिष्ट संज्ञा (terms) स्पष्ट करते. आमचे युनिक शब्द एकमेकांशी कसे संबंधित आहेत, हे ती AI ला सांगते.
- plot.md: हे प्रोजेक्टचा हाय-लेव्हल मॅप आणि त्याचे विविध भाग एकमेकांशी कसे जोडलेले आहेत, याची माहिती देते.
- Mandatory Tests: प्रत्येक नवीन API रूटसाठी टेस्ट केसेस (test cases) आवश्यक आहेत.
यामुळे सर्व काही बदलले. एकदा, AI ने एक शेअर केलेली युटिलिटी फंक्शन (utility function) बदलली. त्या बदलामुळे सिस्टमचे इतर आठ भाग बिघडले. टेस्ट सुईटने (test suite) हे लगेच पकडले. AI ने ही चूक पाहिली आणि जुन्या व नवीन दोन्ही गरजा पूर्ण करणारी आवृत्ती तयार करून स्वतःची चूक सुधारली.
टेस्ट्स नसत्या तर तो बग प्रोडक्शनपर्यंत पोहोचला असता.
AI कडे एका नवीन डेव्हलपरप्रमाणे वागा. तुमच्या कोडबेसची माहिती नसल्याबद्दल तुम्ही नवीन कर्मचाऱ्याला दोष देत नाही. तुम्ही त्याला डॉक्युमेंटेशन आणि ऑनबोर्डिंग (onboarding) देता. आम्ही AI साठी देखील तेच केले.
आमची रचना:
- docs/context.md: प्रोजेक्टच्या संज्ञा आणि संबंध.
- docs/plot.md: हाय-लेव्हल कोडबेस मॅप.
- docs/adr/: टेबल निर्मिती आणि API स्ट्रक्चरसारखे विशिष्ट नियम.
तुमच्या टीमसाठी तीन नियम:
- ADRs मध्ये नेमकेपणा ठेवा. अस्पष्ट सल्ल्यांऐवजी स्पष्ट सूचना वापरा.
- डॉक्युमेंट्स अधिकृत (authoritative) बनवा. AI ला सांगा की हे नियम सर्वात महत्त्वाचे आहेत.
- चुकांचे रूपांतर नियमांमध्ये करा. जेव्हा जेव्हा AI अपयशी ठरते, तेव्हा एक नवीन ADR लिहा.
ही प्रणाली AI ला परिपूर्ण बनवत नाही. ती AI ला प्रेडिक्टेबल (predictable) बनवते. आम्हाला असा कोडबेस हवा आहे जिथे AI सुसंगत असेल, जेणेकरून टीम वेगाने काम करू शकेल.
