मी एकाच AI प्रदातावर अवलंबून राहणे का थांबवले
मी एका कम्युनिटी फोरमसाठी रिअल-टाइम चॅटबॉट तयार केला. मी फक्त OpenAI API वापरला. ते खूप सोपे वाटत होते.
तीन आठवड्यांनंतर, पीक अवर्समध्ये मला 5xx एरर आला. माझा चॅटबॉट बंद पडला. वापरकर्ते संतप्त झाले. मला जाणीव झाली की प्रोडक्शन ॲप्ससाठी मी एकाच प्रदात्यावर विश्वास ठेवू शकत नाही.
एकाच प्रदात्यासोबत मला अनेक समस्यांना सामोरे जावे लागले:
- Rate limits
- Timeouts
- पूर्णपणे सेवा खंडित होणे (Complete outages)
मी इतर प्रदात्यांचा प्रयत्न केला, पण त्या सर्वांचे फॉरमॅट आणि ऑथेंटिकेशन पद्धती वेगवेगळ्या होत्या. माझा कोड switch-case स्टेटमेंट्सचा गोंधळ बनला.
मला अशा प्रणालीची गरज होती जी:
- विविध प्रदात्यांचे प्रमाणीकरण (Standardize) करेल
- एक प्रदाता अयशस्वी झाल्यास आपोआप पुन्हा प्रयत्न (Retry) करेल
- प्रतिसाद कॅश (Cache) करेल
- व्हेंडर लॉक-इन (Vendor lock-in) टाळेल
मी थर्ड-पार्टी लायब्ररी टाळल्या कारण त्या खूप कडक (rigid) होत्या. त्याऐवजी, मी एका साध्या डिझाइनचा वापर करून कस्टम फॉलबॅक सिस्टम (fallback system) तयार केली.
प्रथम, मी सर्व प्रदात्यांसाठी एक कॉमन इंटरफेस तयार केला. यामुळे कोणताही AI मॉडेल त्याच कोडसह काम करू शकतो.
त्यानंतर, मी एक राउटर क्लास (router class) तयार केला. हा क्लास क्रमाने प्रदात्यांना प्रयत्न करतो. अपयश व्यवस्थापित करण्यासाठी तो exponential backoff आणि साध्या कॅशिंगचा वापर करतो.
याचे लॉजिक खालीलप्रमाणे आहे:
- AI प्रदात्यांसाठी एक abstract base class परिभाषित करा.
- OpenAI आणि इतर प्रदात्यांसाठी विशिष्ट क्लासेस लागू करा.
- तुमच्या प्रदात्यांच्या यादीमधून लूप करण्यासाठी राउटर वापरा.
- जर एखादा प्रदाता अयशस्वी झाला, तर राउटर थांबतो आणि पुढच्या प्रदात्याला प्रयत्न करतो.
अलीकडेच तीन वेळा सेवा खंडित झाल्याच्या वेळी या सिस्टममुळे माझा प्रोजेक्ट वाचला. ही सिस्टम पारदर्शक आणि साधी आहे.
जर तुम्ही AI वापरून काही बनवत असाल, तर या गोष्टी लक्षात ठेवा:
- प्रोडक्शनमध्ये लोकल डिक्शनरीऐवजी कॅशिंगसाठी Redis वापरा.
- तुमचा खर्च तपासण्यासाठी कॉस्ट ट्रॅकिंग (cost tracking) जोडा.
- जलद प्रतिसादांसाठी asynchronous सपोर्ट लागू करा.
- रेट लिमिट्स अधिक चांगल्या प्रकारे हाताळण्यासाठी "Retry-After" हेडर पार्स करा.
जर तुमचा प्रोजेक्ट लहान असेल तर ओव्हर-इंजिनिअरिंग (over-engineer) करू नका. पण जर तुमची सेवा अपटाइमवर (uptime) अवलंबून असेल, तर फॉलबॅक तयार करा.
तुम्ही तुमच्या प्रोजेक्ट्समध्ये प्रदात्याच्या विश्वासार्हतेचे (reliability) व्यवस्थापन कसे करता? तुम्ही फॉलबॅक लेयर वापरता की एकाच व्हेंडरवर अवलंबून राहता?