تصور کنید یک تکه کد JSON ناقص از مدل هوش مصنوعی ارسال شود و بهطور تصادفی یک دستور حذف یا تغییر اشتباه در پایگاهداده مشتریان شما ثبت کند. اگر جریان دادههای مدل را بهعنوان دستورات قابلاعتماد میپذیرید، در واقع درهای سیستم خود را به روی خطاهای فاجعهبار باز کردهاید.
به نقل از راهنمای فنی منتشر شده در dev.to در ۱۶ اوت ۲۰۲۶، برای جلوگیری از این شکستهای سیستمی در اپلیکیشنهای B2B SaaS، یک معماری چهارمرزی پیشنهاد شده است. بسیاری از توسعهدهندگان ارتباط بین مرورگر و مدل را یک لوله ساده میبینند، اما این کار باعث میشود ویژگیهای خاص هر ارائهدهنده به لایه رابط کاربری و منطق کسبوکار نفوذ کند. وقتی یک مدل زبانی بزرگ (LLM) — مثل کتابخانهداری که میلیاردها صفحه را خوانده و حالا با همان لحن جواب میدهد — وظیفه تبدیل یک تماس فروش به یک تسک در CRM را دارد، خطر فقط توهم نیست، بلکه اجرای یک شیء ناقص و تاییدنشده است.
مثلاً اگر مدل در حال تولید یک تسک با تاریخ سررسید باشد و جریان داده دقیقاً بعد از عبارت "due_date": قطع شود، یک بکاند ساده سعی میکند همان تکه ناقص را پردازش کند. این اتفاق یا منجر به کرش سیستم میشود یا بدتر از آن، یک اقدام مبهم و غلط در CRM ثبت میکند. همانطور که در تحلیلهای قبلی ما درباره امنیت مدلهای بازمتن اشاره کردیم، اعتماد کورکورانه به خروجی مدلها بزرگترین حفره امنیتی سیستمهای مدرن است.
معماری چهارمرزی
برای حل این مشکل، این طراحی چهار مرز مجزا را تعریف میکند که باید ایزوله بمانند. این ساختار تضمین میکند که تعویض ارائهدهنده مدل فقط مرز دوم را تحت تأثیر قرار دهد:
- مرورگر به اپلیکیشن: اینجا محل احراز هویت و تعیین سطح دسترسی است. بکاند باید تصمیم بگیرد کاربر اجازه تغییر حساب را دارد یا خیر. کلید API مدل فقط ثابت میکند سرور اجازه فراخوانی ارائهدهنده را دارد، نه اینکه کاربر اجازه دسترسی به CRM را داشته باشد.
- اپلیکیشن به مدل: این مرز مدیریت کلید ارائهدهنده را بر عهده دارد. مرورگر هرگز نباید کلید API مدل را دریافت کند و بکاند تنها دروازهبان این ارتباط است.
- خروجی مدل به اعتبارسنج: جریان داده بهعنوان دادههای نمایشی غیرقابلاعتماد تلقی میشود. سرور تمام دادهها را در یک بافر جمع کرده و پیش از هر اقدامی، تمام فیلدهای ضروری را بررسی میکند. در این زمان کاربر میتواند پیامی مثل «در حال پیشنویس» را ببیند.
- اعتبارسنج به CRM: تنها پس از تایید نهایی، دادهها به یک دستور CRM تبدیل میشوند. این دستور باید خارج از چرخه جریان داده (Stream) باشد تا قطع اتصال مرورگر باعث ثبت دستورات ناقص نشود.
انتخاب رابط مناسب ارائهدهنده
طبق گزارش dev.to، انتخاب مرز مدل بر اساس محدودیتهای تیم صورت میگیرد و نه فقط قیمت. این انتخابها معمولاً در پنج دسته قرار میگیرند:
- OpenAI Direct: برای تیمهایی که سریعترین مسیر توسعه را میخواهند. این روش برای توسعهدهندگان تازهکار سادهتر است اما وابستگی به ویژگیهای خاص OpenAI را افزایش میدهد.
- Anthropic Direct: زمانی استفاده میشود که تیم بهطور تخصصی روی API مدل Claude استاندارد شده باشد.
- Google Gemini Direct: ایدهآل برای اپلیکیشنهایی که در اکوسیستم گوگل هستند. در اینجا باید مراقب بود فیلدهای خاص گوگل به لایههای کنترلر و UI نفوذ نکنند.
- AWS Bedrock: برای سازمانهایی که محدودیتهای سختگیرانه حاکمیتی و خرید در AWS دارند، هرچند تنظیمات ابری آن برای اپلیکیشنهای کوچک پیچیده است.
- Infrai: برای تیمهای کوچک SaaS که میخواهند یک رابط سازگار با OpenAI برای تمام ارائهدهندهها داشته باشند. این سرویس با یک کلید و یک صورتحساب، دسترسی به ۲۹۵ مسیر در ۲۰ ماژول مختلف را فراهم میکند. این رویکرد مشابه راهکارهای یکپارچهسازی است که پلتفرمهایی مانند Routara برای مدیریت متمرکز چندین ارائهدهنده LLM به کار میبرند.
پیادهسازی فنی و اعتبارسنجی
برای اجرای این مدل، یک لایه اعتبارسنجی سختگیرانه ضروری است. این راهنما استفاده از Zod را برای تعریف طرحواره (Schema) پیشنویسهای CRM پیشنهاد میکند. برای مثال، یک شیء CrmDraft باید فیلدهای summary و owner را بهعنوان رشته و due_date را با یک الگوی Regex خاص تایید کند.
در محیطهای Node.js ۲۰ به بالا، جریان کار به این صورت است:
- انتخاب مدل: سرور مدلهای موجود را از طریق درخواست GET فیلتر کرده و مدلهایی را که قابلیت "chat" دارند انتخاب میکند.
- درخواست سختگیرانه: با استفاده از
response_formatوjson_schemaو تنظیمstrict: trueاز اضافه شدن فیلدهای پیشبینینشده توسط مدل جلوگیری میشود. - استریم برای تجربه کاربری: پاسخها برای سرعت بیشتر بهصورت استریم به کاربر میرسند، اما پیش از خروج از آداپتور به متن ساده تبدیل میشوند.
- بافریگ در سرور: سرور همزمان تکهها را در یک بافر جمع میکند. متادیتای درخواستها بهعنوان تلهمتری داخلی میماند و به مرورگر ارسال نمیشود.
- اعتبارسنجی Zod: پس از بسته شدن استریم، بافر توسط Zod بررسی میشود تا صحت ساختار دادهها تایید شود.
- بررسی سیاستها: در نهایت اپلیکیشن بررسی میکند که آیا مالک تعیینشده واقعاً مالک آن حساب است یا خیر.
مکانیسمهای عملیاتی و پایداری
بکاند باید با مدل بهعنوان یک جعبه سیاه برخورد کند. آداپتور باید فقط یک ورودی (پیامها + طرحواره CRM) و یک خروجی داشته باشد. متادیتای درخواست، هزینه هر فراخوانی و تأخیر باید بهعنوان تلهمتری داخلی ذخیره شوند و هرگز بخشی از قرارداد مرورگر نباشند.
در مورد لاگها، بهجای ذخیره متن گفتگوها، باید رویدادهای مرزی ثبت شوند؛ مواردی مثل ID درخواست، مدل انتخابشده و نتیجه اعتبارسنجی. همچنین تیمها باید برای شکستهای متوالی در اعتبارسنجی یا اتمام سهمیه (Rate Limit) هشدار فعال کنند.
مدیریت فشار معکوس (Backpressure) نیز حیاتی است. اگر مرورگر قطع شود، بکاند باید عملیات بالادستی را متوقف کند. اگر کلاینت کند بخواند، سرور باید به سیگنال نوشتن Node.js احترام بگذارد تا حافظه پر نشود.
منطق تلاش مجدد (Retry) نیز باید ایزوله باشد:
- تلاشهای ارائهدهنده: خطاهای ۴۲۹ با رعایت هدر
retry-afterیا تأخیر نمایی مدیریت میشوند. - تلاشهای کلاینت: کلاینت OpenAI را میتوان برای تلاشهای گذرا (مثلاً ۳ بار) تنظیم کرد.
- یکتایی در CRM: چون این تلاشها پیش از نوشتن در CRM رخ میدهند، تسک تکراری ایجاد نمیکنند. با این حال، دستور نهایی CRM باید از کلید یکتایی (Idempotency Key) مخصوص خودش استفاده کند.
محدودیتهای خروجی ساختاریافته
باید بین صحت ساختاری و صحت واقعی تفاوت قائل شد. اعتبارسنجی Zod ثابت میکند چهار فیلد با فرمت درست وجود دارند، اما نمیتواند ثابت کند که مدل در مورد تاریخ سررسید توهم (Hallucination) — یعنی وقتی مدل با اطمینان چیزی میگوید که اصلاً وجود ندارد، شبیه دوستی که خاطرهای را اشتباه تعریف میکند — نداشته است.
برای مدیریت این ریسک، توسعهدهندگان باید:
- یک مجموعه ارزیابی برچسبدار برای تست میزان استناد مدل به متن واقعی داشته باشند.
- برای تغییرات حساس در CRM، تایید انسانی را اجباری کنند.
- بخشهای مربوطه از متن منبع را برای بازبینی ذخیره کنند.
مرزهای قابلیت
تیمها باید بدانند کجا قابلیتهای چت تمام میشود. یک بکاند چت برای محصولات صوتی بلادرنگ مناسب نیست. برای مثال، جلسات صوتی در Infrai در حال حاضر محدود به مناطق غربی هستند و ASR در دایرکتوری مدلها در دسترس نیست. این محدودیتها نشان میدهد که چرا تکیه بر APIهای سازگار با OpenAI در تولیدات پیچیده صوتی میتواند چالشبرانگیز باشد. برای این موارد باید از ارائهدهندگان متخصص استفاده کرد.
همچنین اگر محصولی برای نظارت بر محتوا (Moderation) نیاز است، باید بهعنوان یک بررسی مجزا پیش از نمایش یا اجرا قرار گیرد. در این زمینه، استفاده از مدلهای زبانی بهعنوان طبقهبندیکننده سیاست، روشی موثر برای پیادهسازی APIهای نظارت بر محتوا در حوزههایی مانند فینتک است. اگرچه مدلهای دارای json_schema میتوانند تصمیمات نظارتی ساختاریافته بدهند، اما یک نقطه اتصال (Endpoint) اختصاصی برای نظارت، یک مرز قابلیتی متفاوت است.
این چرخش معماری، هوش مصنوعی را از «موتور» اپلیکیشن به یک «جزء» در پشت یک آداپتور تبدیل میکند. با نگه داشتن نام مدل در تنظیمات استقرار و نسخهبندی پرامپتها، تیمها میتوانند ارائهدهنده را بدون بازنویسی کل منطق احراز هویت یا رندرینگ تعویض کنند.
گام بعدی شما
- بررسی کنید آیا در اپلیکیشن شما، کلیدهای API مدلها به لایه کلاینت نشت کرده است یا خیر.
- برای هر خروجی ساختاریافته مدل، یک طرحواره Zod تعریف کنید تا از ورود دادههای ناقص به دیتابیس جلوگیری شود.
- منطق ثبت داده در CRM را از چرخه استریم جدا کرده و از کلیدهای Idempotency استفاده کنید.
اما مدیریت هزینههای استنتاج در مقیاس بالا چالش دیگری است — به تحلیل ما درباره بهینهسازی هزینه GPU مراجعه کنید.




گفتگو