تست سیستم هوش مصنوعی لاراول، بدون حتی یک تماس با API
خلاصهٔ کاملتر
تو قسمت دهم سری «Ship AI with Laravel» نویسنده سراغ چیزی میره که تا اینجای سری عقب افتاده بود: تست. به گفتهٔ نویسنده، بعد از ساختن ایجنتها، ابزارها، پایگاه دانش، چت استریمی، failover و میدلورها، حالا باید به این سؤال جواب داد که کدی که به یه مدل زبانی وصله رو چطور تست میکنن.
مشکل روشنه: تو تستسوییت نمیشه واقعاً به OpenAI درخواست زد. هم کنده، هم هر بار اجرا هزینه میبره، هم جواب مدل هر دفعه فرق داره و assertionها هیچوقت پایدار نمیمونن. راهحلی که نویسنده جلو میذاره سیستم faking خود SDKه — همون منطق آشنای fake کردن Mail و Notification و Queue تو لاراول: جوابها رو از قبل تعریف میکنی و بعد چک میکنی که پرامپت درست بیرون رفته باشه.
کار با یه مرتبسازی کوچیک شروع میشه؛ میدلورها به فضای نام AI/middleware منتقل میشن. بعد تستهایی نوشته میشه که مطمئن بشن ایجنت پرامپت درست میگیره، کانتکست گفتگو رو نگه میداره و خروجی قطعی و قابلپیشبینی برمیگردونه.
یکی از نکتههای جالب، preventStrayPromptsه: با این گارد، هر تماس ناخواسته با هوش مصنوعی تو مسیرهایی که اصلاً نباید ایجنت رو صدا بزنن — مثل ساختن تیکت — لو میره و تست میشکنه. پرامپتهای صفشده هم تست میشن: TicketClassifier باید روی یه ثبت معتبر وارد صف بشه و روی ورودی نامعتبر اصلاً وارد صف نشه.
ابزارهای سفارشی مستقیم مقابل رکوردهای واقعی دیتابیس تست میشن و همینجا یه تست شکستخورده، یه ناهماهنگی تو factory رو لو میده که نویسنده جلوی دوربین درستش میکنه — به گفتهٔ خودش، دقیقاً همون باگی که تستها قراره بگیرن. اندپوینت چت هم با feature test از نظر احراز هویت، اعتبارسنجی و تعامل درست با ایجنت بررسی میشه.
راهاندازی vector store و seed شدن پایگاه دانش هم با fake کردن ساخت store، آپلود سند و تولید embedding تست میشه. ته کار، هر دوازده تست پاس میشن، سریع اجرا میشن و هیچوقت به یه API بیرونی دست نمیزنن — یعنی میتونی روی هر commit اجراشون کنی بدون نگرانی از هزینه یا flaky شدن. قسمت بعدی سراغ امنیت میره: محافظت از ایجنت مقابل prompt injection و غربال کردن پیامها با یه مدل زبانی محلی، قبل از اینکه چیزی به OpenAI برسه.
نکات کلیدی:
- تست کد هوش مصنوعی با درخواست واقعی به OpenAI کند، پرهزینه و ناپایداره
- سیستم faking خود SDK مثل fake کردن Mail و Queue کار میکنه: جواب از پیش تعریفشده، بعد assert روی پرامپت
- preventStrayPrompts تماسهای ناخواستهٔ AI رو تو مسیرهای بیربط لو میده
- پرامپتهای صفشده، ابزارهای سفارشی، اندپوینت چت و seed شدن پایگاه دانش همگی تستپذیرن
- نتیجه: دوازده تست سریع و قطعی، مناسب اجرا روی هر commit




