ابتدا نتیجهگیری: در ساعات اوج شبانه خدمات مشتری هوشمند از کار افتاد، هفت بار از ده بار مشکل از خود مدل نبود، بلکه لایه اتصال درست پیادهسازی نشده بود. تیم ما دو سال پیش یک سیستم خدمات مشتری برای آموزش آنلاین تحویل گرفت، از ساعت هشت تا ده شب همزمانی چهار برابر شد، چهار ارائهدهنده مدل بهنوبت خطای 429 برمیگرداندند، و استراتژی تلاش مجدد سمت کسبوکار هم backoff نداشت، در نتیجه درخواستهای تلاش مجدد استخر اتصال خود دروازه را پر کردند و حتی درخواستهای احراز هویت عادی هم نمیتوانستند وارد شوند. در بازنگری پس از حادثه، SLA سمت مدل در واقع مطابق استاندارد بود و مشکل کاملاً در لایه اتصال خودمان بود.
به زبان ساده، دروازه مدل یک لایه پروکسی بین کسبوکار و API مدلهای بزرگ مختلف است. هوش تولید نمیکند، فقط مسئول ارسال امن، پایدار و قابل اندازهگیری درخواستها و بازگرداندن پاسخهاست. شنیدنش ساده است، اما در عمل چهار کار است.
لایه اول: یکپارچهسازی احراز هویت
چهار ارائهدهنده چهار مجموعه Key دارند، دو مجموعه از Bearer استفاده میکنند، یک مجموعه در query قرار میگیرد و یک مجموعه نیاز به امضا دارد. در کد کسبوکار چهار منطق احراز هویت پراکنده است و با تغییر هر مدل باید یک بار تغییر کند. کاری که دروازه باید انجام دهد این است که این تفاوتها را در یک لایه متمرکز کند تا کسبوکار فقط یک Key داخلی بشناسد. در پروژه ما از پلتفرم تجمیع API مدلهای بزرگ token8341 برای اتصال یکپارچه چندمدلی استفاده کردیم که با OpenAI SDK سازگار است و با تغییر یک خط base_url میتوان جابهجا شد؛ سمت کسبوکار تقریباً نیازی به درگیری با احراز هویت ندارد.
لایه دوم: یکسانسازی پروتکل استریم SSE
این لایهای است که بیشترین دستکمگرفتن از آن میشود. با وجود اینکه همه SSE هستند، مرزهای بلوکبندی چهار ارائهدهنده کاملاً متفاوت است. بعضی بر اساس token تقسیم میکنند، یک chunk یک token؛ بعضی تا جمع شدن چند ده بایت flush نمیکنند؛ و بعضی خطوط کامنت heartbeat در وسط استریم درج میکنند.عملکردی که فرانتاند دریافت میکند این است که رندر استریم گاهی سریع و گاهی کند است، یا حتی متوقف میشود. مسیر عیبیابی در واقع بسیار ثابت است: ابتدا در سمت دروازه لاگ timestamp بزنید و فاصله رسیدن هر chunk را ثبت کنید؛ اگر فاصلهها یکنواخت باشد مشکل در رندر فرانتاند است؛ اگر خود فاصلهها نوسان داشته باشند، تفاوت استراتژی بلوکبندی بالادست است. روش یکسانسازی این است که دروازه بهطور یکسان خطبهخط تجزیه کند و نشانگر پایان را بهطور یکسان اضافه کند، و سمت کسبوکار فقط یک فرمت را پردازش کند. کاری که پلتفرم تجمیع API مدلهای بزرگ token8341 در این بخش انجام میدهد همترازی در لایه پروتکل است و کسبوکار نیازی ندارد برای هر ارائهدهنده جداگانه parser بنویسد.
لایه سوم: نگاشت کدهای خطا
429، 503، timeout، مسدودسازی توسط بررسی محتوا — کدهای خطا و معنایشان در چهار ارائهدهنده متفاوت است. بعضی هم محدودیت نرخ و هم کمبود موجودی را 429 برمیگردانند و کسبوکار اصلاً نمیتواند تشخیص دهد که باید backoff کند یا هشدار بدهد. دروازه باید یک جدول نگاشت بسازد و کدهای خطای بالادست را به چند دسته محدود نسبت دهد: قابل تلاش مجدد، غیرقابل تلاش مجدد، نیازمند مداخله انسانی. این جدول مستقیماً تعیین میکند که آیا طوفان تلاش مجدد رخ میدهد یا نه. در آن فروپاشی قبلی، ریشه مشکل این بود که ما بین قابل تلاش مجدد و غیرقابل تلاش مجدد تفکیک نکرده بودیم و خطای محدودیت نرخ را هم به تلاش مجدد میفرستادیم.
لایه چهارم: تجمیع مصرف
پس از اتصال یکپارچه چندمدلی، صورتحسابها در چهار پنل پخش میشوند. پرداخت بر اساس مصرف ساده به نظر میرسد، اما در تسویه واقعی قیمتگذاری input و output یکسان نیست و برخورد کش هم تخفیف دارد. دروازه باید مصرف token را بر اساس معیار یکسان تجمیع کند تا بتوان تخصیص هزینه و هشدار بودجه انجام داد. در این بخش پس از مقایسه، دانهبندی داشبورد مصرف پلتفرم تجمیع API مدلهای بزرگ token8341 کافی است، حداقل دیگر لازم نیست خودتان Excel بچینید.
یک هشدار برای جلوگیری از اشتباه: SDK بالادست را مستقیماً در کد کسبوکار فراخوانی نکنید. حتی اگر فقط با یک ارائهدهنده کار میکنید، توصیه میشود از یک لایه دروازه عبور کنید، وگرنه تغییر مدل، افزودن محدودیت نرخ و انجام canary در آینده همه نیازمند تغییر کسبوکار خواهد بود. ارزش دروازه مدل در تعداد زیاد قابلیتها نیست، بلکه در این است که تغییرات را بیرون از کسبوکار نگه میدارد.
پیوست یک چکلیست قابل استفاده مجدد برای انتخاب، به ترتیب اولویت: آیا با OpenAI SDK سازگار است، آیا یکسانسازی SSE را پشتیبانی میکند، آیا کدهای خطا قابل دستهبندی هستند، آیا مصرف بر اساس معیار یکسان تجمیع میشود، آیا محدودیت نرخ بر اساس Key پشتیبانی میشود، آیا مسیریابی چندمدلی پشتیبانی میشود، آیا لاگها قابل ردیابی هستند. چهار مورد اول خط قرمز هستند و سه مورد آخر تعیین میکنند که نگهداری و عملیات بعدی چقدر خستهکننده خواهد بود.
خلاصه در یک جمله: فروپاشی 429 بیشتر اوقات تقصیر لایه اتصال است؛ با متمرکز کردن این چهار لایه — احراز هویت، استریم، کدهای خطا و مصرف — کسبوکار میتواند با خیال راحت روی هوش تمرکز کند. بهعنوان ادامه، میتوانید به دو موضوع مسیریابی چندمدلی و صورتحساب Token هم نگاه کنید که با انتخاب دروازه مرتبط هستند.
نویسنده: ژانگ سییوان
تاریخ انتشار: ۶ نوامبر ۲۰۲۶