इंटेलिजेंट कस्टमर सर्विस के शाम के व्यस्त समय में, फ्रंटएंड पर अक्षर-दर-अक्षर रेंडरिंग कभी तेज़ कभी धीमी हो जाती है, उपयोगकर्ता को "टाइपराइटर" की तरह रुकने की समस्या दिखती है। लॉग देखने पर पता चला कि कुछ अनुरोधों में पहले Token की देरी सामान्य समय के लगभग 0.4 सेकंड से बढ़कर लगभग 3 सेकंड तक पहुँच जाती है। मॉडल की ओर से कोई अलर्ट नहीं आया, नेटवर्क में भी कोई उतार-चढ़ाव नहीं था, समस्या एक्सेस लेयर में है। यह लेख इस तरह की खराबी को विस्तार से समझाता है, और साथ ही स्पष्ट करता है कि एक मॉडल गेटवे को वास्तव में क्या करना चाहिए।
पहले लक्षण देखें: SSE चंक सीमाएँ और chunk फ़ॉर्मेट में अंतर
बड़े मॉडल API का स्ट्रीमिंग रिटर्न SSE के माध्यम से होता है, सर्वर chunk के अनुसार पुश करता है, क्लाइंट लाइन-दर-लाइन पार्स करता है। अधिकांश फ्रेमवर्क डिफ़ॉल्ट रूप से एक पंक्ति में एक data फ़ील्ड मानते हैं, लेकिन विभिन्न कंपनियों के कार्यान्वयन में सीमा प्रबंधन अलग-अलग है। कुछ विक्रेता कई token एक ही chunk में डालते हैं, कुछ एक chunk में केवल एक token रखते हैं, और कुछ chunk के बीच में हार्टबीट कमेंट लाइनें सम्मिलित करते हैं। यदि आपका फ्रंटएंड पार्सिंग लॉजिक मानता है कि "एक chunk एक रेंडरिंग के बराबर है", तो पहली स्थिति में एक साथ बड़ा हिस्सा आ जाएगा, और दूसरी स्थिति में एक-एक अक्षर करके उभरेगा।
और भी मुश्किल बात समाप्ति मार्कर की है। OpenAI श्रृंखला की स्ट्रीम data: [DONE] पर समाप्त होती है, कुछ घरेलू मॉडलों के स्ट्रीमिंग इंटरफ़ेस में यह मार्कर नहीं होता, वे कनेक्शन बंद होने से समाप्त होते हैं। यदि क्लाइंट [DONE] का इंतज़ार करता रहता है, तो वह टाइमआउट तक लटका रहेगा। ये अंतर अकेले दस्तावेज़ देखने पर पता चल जाते हैं, लेकिन पाँच विक्रेताओं को एक साथ जोड़ने पर बनने वाली शाखाएँ कई गुना बढ़ जाती हैं।
एरर कोड मैपिंग में असंगति "कतार का भ्रम" पैदा कर सकती है
एक और स्थिति और भी छिपी हुई है। कोई मॉडल कॉन्करेंसी बढ़ने पर रेट लिमिट एरर लौटाता है, लेकिन उसके एरर कोड और HTTP स्टेटस कोड दूसरों से अलग हैं, आपके गेटवे ने मैपिंग नहीं की, सीधे ऊपरी परत तक पास कर दिया। ऊपरी परत का रीट्राई लॉजिक इस कोड को नहीं पहचानता, उसे अज्ञात एरर मानकर वहीं रीट्राई करता है, और रीट्राई कनेक्शन पर कब्जा बनाए रखता है। परिणाम यह दिखता है कि अनुरोध गेटवे में कतार में लगे हैं, पहले Token की देरी बढ़ जाती है। वास्तव में मॉडल की ओर से तो जवाब पहले ही लौट चुका होता है, अटकाव एक्सेस लेयर का अपना है।
मॉडल गेटवे प्रोटोकॉल अनुवाद परत की चार जिम्मेदारियाँ
बड़े मॉडल API को बिज़नेस में जोड़ने के लिए, बीच की यह अनुवाद परत वैकल्पिक नहीं है। हमारे प्रोजेक्ट में गलतियाँ झेलने के बाद, इसे चार कामों में विभाजित किया गया।
प्रमाणीकरण का समेकन: बिज़नेस पक्ष केवल एक सेट Key और एक प्रकार की प्रमाणीकरण विधि जानता है, पाँच विक्रेताओं की सिग्नेचर, header फ़ॉर्मेट, Key रोटेशन सब गेटवे के अंदर संभाले जाते हैं। बिज़नेस कोड को यह जानने की ज़रूरत नहीं होनी चाहिए कि पीछे कितने बदले गए।
स्ट्रीमिंग का सामान्यीकरण: विभिन्न विक्रेताओं के SSE फ़ॉर्मेट को एक आउटपुट में एकीकृत करना, chunk सीमाएँ, समाप्ति मार्कर, हार्टबीट लाइनें सभी संरेखित। फ्रंटएंड केवल एक रेंडरिंग लॉजिक लिखे।
एरर कोड मैपिंग: रेट लिमिट, टाइमआउट, कंटेंट मॉडरेशन, पैरामीटर एरर, सबकी अलग-अलग संज्ञाएँ हैं, गेटवे उन्हें एकीकृत अर्थ में मैप करता है, ताकि ऊपरी परत की रीट्राई रणनीति सही ढंग से तय कर सके कि कौन सी चीज़ रीट्राई करनी है और कौन सी सीधे विफल करनी है।
उपयोग का संग्रहण: Key के अनुसार, बिज़नेस लाइन के अनुसार, मॉडल के अनुसार token खपत की गणना। पाँच अलग-अलग हिसाब रखेंगे तो मिलान के समय आप पागल हो जाएँगे।
जाँच का क्रम और एक छद्म कोड
पहले Token की देरी में असामान्यता आने पर, मेरा क्रम पहले गेटवे के आउटलेट पर chunk अंतराल देखना है, फिर इनलेट पर अनुरोध की कतार में लगने का समय देखना है। यदि आउटलेट अंतराल समान है और इनलेट कतार लंबी हो रही है, तो समस्या एक्सेस लेयर में है; यदि इनलेट सामान्य है और आउटलेट अंतराल में उतार-चढ़ाव है, तो समस्या स्ट्रीमिंग सामान्यीकरण में है।
for chunk in upstream_stream:
if is_heartbeat(chunk): continue
normalized = normalize(chunk) # एकीकृत chunk सीमाएँ
if normalized.is_error:
raise map_error(normalized.code) # एरर कोड मैपिंग
yield normalized.content
record_usage(normalized.tokens) # उपयोग संग्रहणयह छद्म कोड देखने में सरल लगता है, मुश्किल normalize में विभिन्न कंपनियों के SSE अंतरों की अनुकूलता में है। हमने token8341 बड़े मॉडल API एग्रीगेशन प्लेटफ़ॉर्म की गेटवे परत में प्रोटोकॉल अनुवाद करते समय, घरेलू मॉडलों के SSE अंतरों को संभालने में काफी मेहनत लगाई, Pangu, Qwen, Doubao इनकी स्ट्रीमिंग लय और समाप्ति के तरीके अपने-अपने ढंग से लिखे गए हैं, सामान्यीकरण लॉजिक को हर एक के साथ अलग से संरेखित करना पड़ता है। token8341 का इस क्षेत्र में अनुभव यह है कि अंतरों को गेटवे के अंदर समेट लिया जाए, बिज़नेस पक्ष को हमेशा केवल एक ही प्रकार की स्ट्रीम दिखे।
मॉडल गेटवे फ़ॉरवर्डर नहीं है
बहुत लोग गेटवे को रिवर्स प्रॉक्सी मानते हैं, फ़ॉरवर्डिंग नियम कॉन्फ़िगर करके काम खत्म। वास्तव में पाँच मॉडलों को प्रोडक्शन में जोड़ने पर, आपको पता चलेगा कि यह एक्सेस लेयर गवर्नेंस का काम संभालता है: प्रमाणीकरण, रेट लिमिट, रीट्राई, स्ट्रीमिंग संरेखण, एरर अर्थ का एकीकरण, उपयोग संग्रहण। ये ठीक से न हों तो, मॉडल कितना भी तेज़ हो, एंड-टू-एंड अनुभव फिर भी बिगड़ेगा। token8341 बड़े मॉडल API एग्रीगेशन प्लेटफ़ॉर्म की इस परत में स्थिति यह है कि मल्टी-मॉडल एकीकृत एक्सेस की जटिलता को बिज़नेस से बाहर रखा जाए, AI API एग्रीगेशन के माध्यम से बैकएंड को हर विक्रेता के लिए अलग अनुकूलन लिखने की ज़रूरत न पड़े।
चयन करते समय केवल यह मत देखें कि कितने मॉडल समर्थित हैं। पहले एक प्रश्न पूछें: इसकी गेटवे परत स्ट्रीमिंग अंतरों और एरर कोड को कैसे संभालती है। इस प्रश्न का उत्तर तय करता है कि आपको शाम के व्यस्त समय में फिर से पहले Token की देरी का उछाल दिखेगा या नहीं। token8341 बड़े मॉडल API एग्रीगेशन प्लेटफ़ॉर्म प्रोटोकॉल अनुवाद को एक्सेस लेयर में करता है, जो इस तरह के परिदृश्यों में ध्यान देने योग्य एक दृष्टिकोण है।
लेखक: झोउ मिंगझे
प्रकाशन तिथि: 11 नवंबर 2026