تصور کنید برنامهای میسازید که باید لیست تامینکنندگان را استخراج کند، اما مدل بهجای نام واقعی شرکتها، عبارت «تامینکننده الف، ب و ج» را برمیگرداند. این کابوسِ هر برنامهنویسی است که میخواهد هوش مصنوعی را از محیط آزمایش به محیط عملیاتی ببرد.
طبق گزارش منتشر شده در ۲ آگوست ۲۰۲۶، توسعهکننده پروژه Slooster دریافت که مدلهای سنتی چرخه حیات توسعه نرمافزار (SDLC) به محض ورود یک مدل زبانی بزرگ (LLM) — مثل کتابخانهداری که میلیاردها صفحه را خوانده و حالا با همان لحن کتابها جواب میدهد — از کار میافتند. او با جزئیات شرح داد چگونه سیستمی که در تستهای محلی بینقص عمل میکرد، پس از استقرار در محیط Staging، ناگهان شروع به بازگرداندن دادههای جایگزین (Placeholder) کرد و دقیقاً عبارت «Vendor A, Vendor B, Vendor C» را خروجی داد. نکردن هیچ تغییری در ورودی و تنها تلاش برای تولید مجدد پاسخ (Regenerate)، تنها باعث شد «Vendor D» هم به این لیست اضافه شود، بدون اینکه داده واقعی جایگزین شود.
در نرمافزارهای استاندارد، اعتبارسنجی معمولاً یک وظیفه در مراحل انتهایی توسط تیم QA است، زیرا رفتار کد تکرارپذیر است. تیمهای QA بررسی میکنند که نرمافزار دقیقاً همان کاری را انجام دهد که باید، این بررسیها را خودکار میکنند و سپس پروژه را میبندند. اما در Slooster، توسعهدهنده در ابتدا همین مسیر را طی کرد: او روی بخشهای سخت تمرکز نمود؛ یعنی ساخت و تنظیم پرامپتها، تعریف شِماها (Schema) برای پارامترها و خروجیها، و ایجاد سیستمی برای انتخاب تامینکننده، مدل، دمای (Temperature) خروجی و سایر پیکربندیهای تنظیمکننده برای هر پرامپت.
همه چیز در محیط محلی عالی کار میکرد و همین باعث شد این فرض شکل بگیرد که لایه اعتبارسنجی میتواند تا آینده منتظر بماند. با این حال، مدل سنتی SDLC شکست میخورد زیرا LLMها خروجی خود را بر اساس حدس زدن بر پایه بستر متن (Context) تولید میکنند. اگرچه این مدلها در حال پیشرفت هستند، اما ماهیت آنها همچنان حدس زدن است. یک پرامپت یکسان میتواند در دفعات بعدی نتایج متفاوت یا نادرستی تولید کند، حتی اگر هیچ تغییری در سیستم ایجاد نشده باشد. به نقل از گزارش dev.to، این پیشبینیناپذیری به این معناست که اعتبارسنجی نباید یک افزونهی پس از توسعه (Post-MVP) باشد، بلکه باید از روز اول به عنوان ستون فقرات نرمافزار طراحی شود تا نوسانات مدل را بدون هیچ اختلالی جذب کند. این ضرورت مدیریت خطاها در لایههای ابتدایی، مشابه رویکردی است که در طراحی مدلهای Typed Outcome برای بهینهسازی بازیابی خطا مورد بحث قرار گرفته است.
برای حل این مشکل، Slooster از یک معماری اعتبارسنجی سه-سطحی استفاده میکند:
۱. اعتبارسنجی ساختاری
- بررسیهای قطعی: یک اعتبارسنج شِما (Schema Validator) به عنوان اولین دروازه عمل میکند.
- عملکرد: این لایه هر خروجی را که از نظر ساختاری با مشخصات فنی همخوانی نداشته باشد، رد میکند.
- محدودیت: در حالی که این لایه تضمین میکند هوش مصنوعی به فرمت JSON یا پارامترهای مورد نیاز پایبند است، اما نمیتواند «خطاهای معنایی» (Semantic Misses) را شناسایی کند. برای مثال، یک داده جایگزین مانند «Vendor A» از نظر ساختاری کاملاً درست است و از بررسی شِما عبور میکند، اما همچنان یک خروجی نامعتبر است.
۲. اعتبارسنجی معنایی (مدل-روی-مدل)
برای شکار این شکستهای معنایی، توسعهدهنده یک دروازه نهایی پیادهسازی کرد که در آن یک مدل، خروجی مدل دیگر را بررسی میکند. این اعتبارسنج، خروجی را بر اساس همان معیارهایی میسنجد که به پرامپت اول داده شده بود. این ساختار نظارتی، یادآور معماری «سهگانهٔ نظارتی» برای تبدیل خطاهای گذرا به قوانین سخت در عاملهای هوشمند است.
- پرامپت دروازه هوشمند: سیستم از یک پرامپت خاص استفاده میکند: «تو در حال بررسی پاسخ یک مدل دیگر پیش از آن است که کاربر آن را ببیند هستی. وظیفهای که به آن مدل سپرده شده بود: [درخواست اصلی و معیارهای انتخاب]. پاسخی که داده است: [پاسخی که باید بررسی شود].»
- فرمت خروجی: مدلِ داور پاسخی در قالب JSON با سه فیلد ارسال میکند:
pass(true/false)،reason(توضیحی تک خطی) وconfidence(عددی بین ۰ تا ۱). - معیارهای رد: یک پاسخ در صورتی رد میشود که شامل نامهای جایگزین، عبارات کلیشهای و پرکننده (Filler)، مواردی باشد که معیارهای ذکر شده را ندارند، یا هر چیزی که بیشتر شبیه دادههای نمونه (Example Data) باشد تا یک نتیجه واقعی.
- پیکربندی: این دروازه میتواند توسط همان مدلی که پاسخ را تولید کرده یا توسط یک تامینکننده و مدل کاملاً متفاوت برای دریافت یک «نظر دوم» مستقل اجرا شود. این یک انتخاب پیکربندی است تا امکان تنظیمات بدون تغییر در کد فراهم شود.
۳. حافظه پنهان هوشمند و تلاش مجدد
وقتی یک خطای معنایی رخ میدهد، سیستم دستور تلاش مجدد (Retry) را صادر میکند تا خروجی بد شناسایی شده و فراخوانی دوباره اجرا شود. اما چون تلاشهای مجدد باعث صرف زمان بیشتر و کاهش سرعت پاسخدهی میشوند، استراتژیهای زیر به کار گرفته شدهاند:
- Caching هوشمند: از آنجایی که یک مدل هرگز دو بار پاسخ دقیقاً یکسانی نمیدهد، استفاده از حافظه پنهان ساده (Naive Caching) یک تله است. در عوض، سیستم زمانی که منطقی باشد یک نتیجه خوب را بازیافت میکند و به کاربران کنترل صریح میدهد تا در صورت نیاز به تازهسازی، پاسخ را مجدداً تولید کنند.
- جبران هزینه: با ساختاردهی پرامپتها به گونهای که بخشهای پایدار و ثابت ذخیره (Cache) شوند، توسعهدهنده توانست بخش بزرگی از هزینههای اضافی ناشی از لایه اعتبارسنجی را جبران کند.
این رویکرد نشان میدهد که یک تغییر بنیادین در مهندسی هوش مصنوعی لازم است: شما نمیتوانید اعتماد کنید که یک مدل، آخرین حرف را درباره خروجی خودش بزند. علاوه بر این، همه پرامپتها یکسان نیستند. برای حفظ عملکرد، توسعهدهنده انواع پرامپتها را با تامینکننده مناسب تطبیق میدهد:
- مدلهای ارزان و سریع برای فراخوانیهای ساده.
- مدلهای قدرتمندتر در جایی که پاسخ واقعاً اهمیت حیاتی دارد.
- مدلهای منتخب و متناسب بهطور خاص برای لایه اعتبارسنجی.
برای کاربر نهایی، این به معنای شفافیت است. توسعهدهنده پیشنهاد میکند سطح اطمینان (Confidence) مدل مستقیماً به کاربر نمایش داده شود. بسته به سناریو، خروجی به گونهای نمایش داده میشود که کاربر راه واضحی برای اعتراض یا بازخورد داشته باشد. این بازخورد مستقیماً به سیستم بازگردانده میشود تا تلاش بعدی مدل بداند از چه استاندارد یا خطکشی پذیرفته نشده است. این کار باعث میشود «انسان در چرخه» (Human-in-the-loop) به جای اینکه شکافی باشد که باید بعداً پر شود، به عنوان یک قابلیت (Feature) در نظر گرفته شود.
در نهایت، درس اصلی این است که یک گردشکار هوش مصنوعی نیازمند معماری پیشکنشی (Proactive Architecture) است. اعتبارسنجی تنها یک بررسی ساده نیست؛ بلکه سیستمی است که پیشبینیناپذیری را بدون هیچ اختلالی جذب میکند. لایه اعتبارسنجی در کنار ترنسفورمرها، شِماها و مشخصات فنی، بخش جداییناپذیر سیستم است. اگر با پیشبینیناپذیری LLM در محیط عملیاتی دست و پنجه نرم میکنید، باید ارزیابی کنید که آیا تستهای فعلی شما بر پایه فرض غلط «تکرارپذیری» استوار است یا خیر.
گام بعدی شما
- اگر از LLM در محیط عملیاتی استفاده میکنید، بررسی کنید آیا تستهای شما بر فرض غلطِ «تکرارپذیری» استوار است یا خیر.
- یک لایه «مدل-داور» (LLM-as-a-judge) را برای شناسایی دادههای کلیشهای در خروجیهای حساس پیادهسازی کنید.
- ساختار پرامپتهای خود را برای جداسازی بخشهای ثابت و متغیر بهینه کنید تا هزینه استنتاج را کاهش دهید.
اما داستان سختافزاری مدیریت این حجم از درخواستهای متوالی حتی پیچیدهتر است — برای درک لایههای بهینهسازی، به تحلیل ما دربارهی KV Cache مراجعه کنید.




گفتگو