मैंने अपने कोडबेस पर AI को भ्रमित (hallucinating) होने से कैसे रोका
AI कोडिंग टूल्स वास्तविक प्रोडक्शन प्रोजेक्ट्स पर विफल हो जाते हैं। वे नए कोड पर अच्छी तरह काम करते हैं, लेकिन इतिहास (history) वाले पुराने कोड पर बिखर जाते हैं।
हमारे फिनटेक (fintech) प्रोजेक्ट का तीन साल का इतिहास है। इसमें दो React फ्रंटएंड, एक एडमिन पैनल और एक FastAPI बैकएंड है। डेटाबेस कई टेबल्स और भारी जॉइन्स (joins) के साथ जटिल है।
हमने तेज़ी से काम करने के लिए AI का उपयोग करने की कोशिश की। यह विफल रहा।
मैंने AI से एक contacts टेबल बनाने के लिए कहा। इसने नाम और ईमेल के लिए नए कॉलम बना दिए। इसे यह अहसास नहीं हुआ कि हमारे पास पहले से ही users टेबल में ये मौजूद हैं। इसने foreign key का उपयोग करने के बजाय डेटा को डुप्लिकेट कर दिया।
AI मूर्ख नहीं था। इसके पास संदर्भ (context) नहीं था। इसने अधूरी जानकारी के साथ निर्णय लिया।
मैंने बेहतर कोड कैसे प्राप्त करें, यह पूछना बंद कर दिया। मैंने यह पूछना शुरू किया कि AI को सही निर्णय लेने के लिए किस संदर्भ (context) की आवश्यकता है।
हमने एक संरचित वर्कफ़्लो (structured workflow) बनाया। AI उतना ही अच्छा है जितना कि वह संदर्भ जो आप उसे प्रदान करते हैं। हमने उस संदर्भ को स्पष्ट बनाया।
हमारा सेटअप इस प्रकार है:
- ADR डायरेक्टरी: हमने Architecture Decision Records के लिए एक फोल्डर बनाया। ये फाइलें बताती हैं कि हम विशिष्ट विकल्प क्यों चुनते हैं। एक फाइल AI को नई टेबल्स बनाने से पहले मौजूदा टेबल्स की जांच करने के लिए कहती है। यह यूजर डेटा को डुप्लिकेट करने से मना करती है।
- context.md: यह फाइल हमारे विशिष्ट शब्दों (terms) की व्याख्या करती है। यह AI को बताती है कि हमारे अनूठे शब्द एक-दूसरे से कैसे संबंधित हैं।
- plot.md: यह प्रोजेक्ट का एक उच्च-स्तरीय मैप (high-level map) प्रदान करता है और बताता है कि विभिन्न हिस्से कैसे जुड़ते हैं।
- अनिवार्य टेस्ट (Mandatory Tests): प्रत्येक नए API रूट के लिए टेस्ट केस आवश्यक हैं।
इससे सब कुछ बदल गया। एक बार, AI ने एक साझा यूटिलिटी फंक्शन (shared utility function) को बदल दिया। उस बदलाव ने सिस्टम के आठ अन्य हिस्सों को तोड़ दिया। टेस्ट सुइट (test suite) ने इसे तुरंत पकड़ लिया। AI ने विफलता देखी और एक ऐसा वर्ज़न बनाकर अपनी गलती सुधार ली जो पुराने और नए दोनों आवश्यकताओं को संभाल सके।
बिना टेस्ट के, वह बग प्रोडक्शन तक पहुँच जाता।
AI के साथ एक नए डेवलपर की तरह व्यवहार करें। आप किसी नए कर्मचारी को आपके कोडबेस को न जानने के लिए दोष नहीं देते। आप उसे डॉक्यूमेंटेशन और ऑनबोर्डिंग प्रदान करते हैं। हमने AI के लिए भी वही किया।
हमारा स्ट्रक्चर:
- docs/context.md: प्रोजेक्ट के शब्द और संबंध।
- docs/plot.md: उच्च-स्तरीय कोडबेस मैप।
- docs/adr/: टेबल निर्माण और API स्ट्रक्चर जैसे विशिष्ट नियम।
आपकी टीम के लिए तीन नियम:
- ADRs में विशिष्ट रहें। अस्पष्ट सलाह के बजाय स्पष्ट निर्देश दें।
- डॉक्यूमेंटेशन को आधिकारिक (authoritative) बनाएं। AI को बताएं कि ये नियम सर्वोपरि हैं।
- गलतियों को नियमों में बदलें। हर बार जब AI विफल हो, तो एक नया ADR लिखें।
यह सिस्टम AI को परफेक्ट नहीं बनाता। यह AI को प्रेडिक्टेबल (predictable) बनाता है। हम एक ऐसा कोडबेस चाहते हैं जहाँ AI सुसंगत (consistent) हो ताकि टीम तेज़ी से काम कर सके।
