موتور پیشنهاد محتوا با لاراول، MongoDB و هوش مصنوعی
خلاصهٔ کاملتر
پیشنهاد محتوا فقط با تگزنی یا رندومکردن پستهای مشابه؟ این روشها خیلی وقته که کافی نیستن. پلتفرمهایی مثل Netflix، LinkedIn و Facebook مدتهاست از سیستمهای پیشنهاددهی مبتنی بر هوش مصنوعی استفاده میکنن تا کاربرا رو درگیر نگه دارن. در این مقاله، قدمبهقدم یه موتور پیشنهاد محتوا میسازیم که بهجای تکیه بر کلیدواژه یا تگ، بر اساس معنای واقعی متن کار میکنه.
ایده اصلی اینه که هر پست رو به یه لیست بلند از اعداد (به اسم embedding یا وکتور) تبدیل کنیم. این اعداد نمایانگر «معنا»ی متن هستن. وقتی دو متن از نظر مفهومی به هم نزدیکن، وکتورهاشون هم به هم نزدیکن. مثلاً «Laravel API authentication» و «Securing APIs in Laravel» با کلمات متفاوت نوشته شدن، ولی وکتورهاشون خیلی شبیه همن. بر این اساس میشه از MongoDB Vector Search خواست که نزدیکترین پستها به پست فعلی رو پیدا کنه.
برای تولید امبدینگها از مدل رایگان و اوپنسورس BAAI/bge-small-en-v1.5 روی Hugging Face استفاده میکنیم. یه کلاس سرویس در لاراول میسازیم که متن رو میگیره، به API هاگینگفیس میفرسته و وکتور برگشتی رو تحویل میده:
Http::withHeaders([
'Authorization' => 'Bearer ' . env('HUGGINGFACE_API_KEY'),
])->post(env('HUGGINGFACE_API_URL'), [
'inputs' => $text,
]);این EmbeddingService از Laravel HTTP Client استفاده میکنه و آدرس مدل و کلید API رو از فایل .env میخونه؛ یعنی اگه بعداً خواستی مدل رو عوض کنی، فقط یه خط در .env تغییر میکنه.
برای اتصال لاراول به MongoDB Atlas هم باید پکیج mongodb/laravel-mongodb رو نصب کنی و تنظیمات اتصال رو به config/database.php اضافه کنی:
'mongodb' => [
'driver' => 'mongodb',
'dsn' => env('MONGODB_URI'),
'database' => env('MONGODB_DATABASE'),
],مدل Post هم باید اتصال پیشفرضش روی mongodb تنظیم بشه و فیلدهای title و body قابلپر شدن (fillable) باشن. موقع سید کردن دادهها، بهجای استفاده از Faker (که متنهای بیمعنی تولید میکنه)، باید پستهایی با محتوای واقعی و معنادار داشته باشیم تا شباهت معنایی درست کار کنه.
برای هر پست، امبدینگ متن body تولید میشه و کنار بقیه فیلدها در کالکشن posts در MongoDB ذخیره میشه. بعد از اینکه همه پستها امبدینگ داشتن، میشه یه Vector Search Index روی MongoDB Atlas تعریف کرد تا جستجوی برداری سریع و دقیق انجام بشه.
در نهایت وقتی کاربر یه پست رو باز میکنه، سیستم امبدینگ اون پست رو برمیداره و از MongoDB میخواد شبیهترین وکتورها رو برگردونه. این یعنی پیشنهادها دیگه بر اساس «کلمات مشترک» نیستن، بلکه بر اساس «مفهوم مشترک» هستن — دقیقاً همون چیزی که Netflix و LinkedIn ازش استفاده میکنن.
نکات کلیدی:
- امبدینگ، متن رو به وکتور عددی تبدیل میکنه تا شباهت مفهومی قابل محاسبه بشه
- از مدل رایگان
BAAI/bge-small-en-v1.5روی Hugging Face برای تولید وکتور استفاده میشه - وکتورهای هر پست کنار دادههای اصلی در MongoDB Atlas ذخیره میشن
- MongoDB Vector Search پیدا کردن نزدیکترین پستها رو سریع و دقیق میکنه
- برخلاف روش تگزنی، این سیستم بر اساس معنا پیشنهاد میده نه کلیدواژه
- پکیج
mongodb/laravel-mongodbاتصال لاراول به MongoDB رو فراهم میکنه - دادههای سید باید واقعی و معنادار باشن، نه متنهای تستی Faker




