RAG در لاراول ۱۳ با Embeddings و pgvector
خلاصهٔ کاملتر
توی پروژههای هوش مصنوعی، یه مشکل رایج اینه که ایجنتها وقتی اطلاعات کافی ندارن، به جای اینکه بگن «نمیدونم»، چیزی میسازن که شبیه جواب درسته ولی واقعی نیست. مثلاً اگه بپرسی «سیاست بازگشت کالای آسیبدیده چیه؟» ایجنت یه جواب ظاهراً منطقی میده ولی هیچ ربطی به سیاست واقعی شرکت نداره.
این قسمت از سری آموزشی «Ship AI with Laravel» دقیقاً این مشکل رو حل میکنه. راهحل اینه که به ایجنت یه پایگاه دانش واقعی بدیم که بتونه توش جستجو کنه — نه با کلمات کلیدی، بلکه با معنا.
مفهوم محوری این قسمت، Embedding هاست. Embedding یعنی تبدیل متن به یه بردار عددی که معنای جمله رو در خودش داره. مثلاً دو جملهی «چطور کالای آسیبدیده رو پس بدم؟» و «اگه بستهام شکسته رسید چیکار کنم؟» با کلمات مختلف نوشته شدن، ولی از نظر معنایی به هم نزدیکن، پس بردارهاشون هم توی فضای ریاضی به هم نزدیک میشن. این پایهی جستجوی معنایی (Semantic Search) هست.
برای پیادهسازی، یه مدل KnowledgeArticle ساخته میشه که یه ستون وکتور داره. این ستون با استفاده از اکستنشن pgvector توی PostgreSQL تعریف میشه و ۱۵۳۶ بُعد داره — که استاندارد مدلهای embedding مثل OpenAI هست. بعد از طریق Laravel AI SDK و Embeddings Facade، برای هر مقاله یه بردار تولید میشه.
یه دستور Artisan هم نوشته میشه که هشت مقالهی FAQ رو به دیتابیس اضافه میکنه و embedding هر کدوم رو هم تولید میکنه. برای جستجو از متد جدید whereVectorSimilarTo که لاراول ۱۳ اضافه کرده استفاده میشه. وقتی این سیستم توی مرورگر تست میشه، حتی با کلماتی که هیچ شباهتی به متن اصلی ندارن، مقالهی درست پیدا میشه.
در مرحلهی آخر، این قابلیت بهعنوان یه ابزار (Tool) به ایجنت پشتیبانی وصل میشه. دستورالعمل ایجنت هم آپدیت میشه تا بفهمه وقتی سوال دربارهی سیاستهای شرکته، باید اول توی knowledge base جستجو کنه. نتیجه اینه که الان وقتی کاربر میپرسه «سیاست بازگشت کالا چیه؟»، ایجنت جواب رو از مستندات واقعی میخونه و میده.
قسمت بعدی سری قراره از vector store های میزبانیشده توسط پرووایدر و ابزار FileSearch استفاده کنه تا ایجنت بتونه کل فایلهای PDF رو جستجو کنه — بدون اینکه لازم باشه منطق جستجو رو خودمون بنویسیم.
نکات کلیدی:
- Embedding یعنی تبدیل متن به بردار عددی که معنا رو حفظ میکنه
- pgvector یه اکستنشن PostgreSQL برای ذخیره و جستجوی وکتوره
- لاراول ۱۳ متد whereVectorSimilarTo رو به Eloquent اضافه کرده
- ستون embedding با ۱۵۳۶ بُعد تعریف میشه (سازگار با مدلهای OpenAI)
- ایجنت از این سیستم بهعنوان یه Tool استفاده میکنه تا جوابها رو از مستندات واقعی بگیره
- جستجوی معنایی حتی با کلمات کاملاً متفاوت از متن اصلی هم کار میکنه




