AI चैट ऐप एक टेक्स्ट चैट इंटरफ़ेस है जहाँ यूज़र मैसेज टाइप करता है, ऐप उसे एक ऐसी सर्विस को भेजता है जो AI मॉडल को कॉल कर सकती है, और ऐप मॉडल का जवाब यूज़र को दिखाता है।
कई प्रोडक्ट्स में, जवाब एक स्ट्रीम के तौर पर आता है, इसलिए यूज़र को पूरा जवाब मिलने का इंतज़ार करने के बजाय धीरे-धीरे टोकन दिखाई देते हैं।
चीज़ों को आसान रखने के लिए, एक छोटी इंटरनल टीम से शुरुआत करें जो एक वेब ऐप का इस्तेमाल करती है, एक बैकएंड सर्विस से बात करती है, और एक मॉडल प्रोवाइडर को कॉल करती है।
एक सर्वर के साथ, प्रोसेस एक लूप की तरह काम करता है। क्लाइंट यूज़र का मैसेज एक सिंगल API सर्वर को भेजता है, API सर्वर बातचीत को लोड करता है ताकि उसे कॉन्टेक्स्ट मिल सके, फिर वह एक मॉडल प्रोवाइडर को कॉल करता है, और आखिर में असिस्टेंट का जवाब क्लाइंट को भेजता है।
इस बेसलाइन पर भी बातचीत का स्टोर ज़रूरी है क्योंकि पेज रिफ्रेश होने पर चैट डिलीट नहीं होनी चाहिए। API सर्वर हर यूज़र मैसेज और असिस्टेंट मैसेज को सेव करता है, और फिर अगली बारी में उसी बातचीत को जारी रखने के लिए उन सेव किए गए मैसेज का इस्तेमाल करता है।
यहाँ एक चैट टर्न है जिसे हम बेसलाइन के तौर पर बना रहे हैं।
इस डायग्राम के चार काम हैं। क्लाइंट इनपुट इकट्ठा करता है और स्ट्रीम को रेंडर करता है, API सर्वर रिक्वेस्ट के पूरे लाइफ़साइकल को संभालता है, कन्वर्सेशन स्टोर मैसेज को सुरक्षित रखता है ताकि रिफ्रेश करने पर भी थ्रेड बना रहे, और मॉडल API असिस्टेंट टोकन बनाता है जिन्हें सर्वर क्लाइंट तक पहुँचाता है।
इसका फंक्शनल दायरा सिर्फ़ प्लेन टेक्स्ट चैट तक सीमित है। इसमें कोई टूल, इमेज या फ़ाइल अपलोड नहीं है, इसलिए हर टर्न पर सिर्फ़ मैसेज स्टोर करना, कॉन्टेक्स्ट तैयार करना और मॉडल को कॉल करना ही मुख्य काम है।
अब एक ऐसी संख्या पर विचार करें जिससे एक ही सर्वर पर दबाव बढ़ जाता है। अगर 2,000 यूज़र एक साथ हों और हर मिनट 2 टर्न हों, तो बैकएंड को प्रति सेकंड लगभग यूज़र टर्न संभालने पड़ते हैं, जिसका मतलब है कि उतने ही पैरेलल मॉडल कॉल भी करने पड़ते हैं।
यह एक संख्या दो ऐसे नॉन-फंक्शनल संकेत पैदा करती है जिनके आधार पर बाकी डिज़ाइन को काम करना होगा। लेटेंसी (देरी) साफ़ दिखने लगती है क्योंकि एंड-टू-एंड समय में मॉडल कॉल का हिस्सा सबसे ज़्यादा होता है, और लागत भी अहम हो जाती है क्योंकि सिस्टम को हर रिक्वेस्ट और हर जेनरेट किए गए टोकन के लिए भुगतान करना पड़ता है।
स्केलिंग से पहले ही, बेसलाइन को आसानी से ऐसे ब्लॉक्स में बांटा जा सकता है जिनका दोबारा इस्तेमाल हो सके और जिनमें से हर एक की अपनी एक ज़िम्मेदारी हो।