فنی و توسعه

معماری بایتیرا: مسیر یک پرسش از کاوش سایت تا پاسخ

بایتیرا اول صفحات سایت شما را می‌خواند و به قطعه‌های جست‌وجوپذیر تبدیل می‌کند؛ بعد برای هر پرسش، مرتبط‌ترین قطعه‌ها را پیدا می‌کند و فقط از روی همان‌ها پاسخ می‌سازد.

نویسنده

تیم بایتیرا

تاریخ انتشار

۲۵ تیر ۱۴۰۵

زمان مطالعه

7 دقیقه

خلاصه

بایتیرا اول صفحات سایت شما را می‌خواند و به قطعه‌های جست‌وجوپذیر تبدیل می‌کند؛ بعد برای هر پرسش، مرتبط‌ترین قطعه‌ها را پیدا می‌کند و فقط از روی همان‌ها پاسخ می‌سازد.

بایتیرا دو مسیر جدا دارد: مسیر «ساخت دانش» که صفحات سایت شما را می‌خواند و به قطعه‌های قابل جست‌وجو تبدیل می‌کند، و مسیر «پاسخ» که برای هر پرسش، مرتبط‌ترین قطعه‌ها را پیدا می‌کند و فقط از روی همان‌ها جواب می‌سازد. مهم‌ترین تصمیم، یعنی «آیا اصلاً پاسخی در محتوای شما هست؟»، پیش از نوشتن متن گرفته می‌شود. وقتی این مسیر را بشناسید، می‌دانید هر تنظیم و هر تغییر محتوا دقیقاً کجا اثر می‌گذارد.

لایه‌های سیستم به زبان ساده

لازم نیست برنامه‌نویس باشید تا این بخش را دنبال کنید. کافی است بدانید هر لایه چه کاری می‌کند:

  • بخش عمومی و ویجت: سایت و داشبورد با Next.js ساخته شده‌اند و ویجت یک اسکریپت سبک و مستقل است. ویجت با یک تگ اسکریپت روی سایت شما بارگذاری می‌شود و داخل Shadow DOM اجرا می‌شود تا استایل سایت و ویجت با هم تداخل نکنند.
  • سرویس اصلی: روی Django و DRF است. تنظیمات ربات، دامنه‌های مجاز، محدودیت‌ها و پاسخ به پرسش‌ها از این‌جا مدیریت می‌شود.
  • پایگاه داده: همه‌چیز در PostgreSQL نگهداری می‌شود و بردارهای معنایی با افزونه pgvector در همان پایگاه داده ذخیره می‌شوند، بدون پایگاه داده جداگانه برای بردارها. هر جست‌وجو پیش از مقایسه بردارها به داده همان پروژه محدود می‌شود.
  • کارهای پس‌زمینه: کارهای طولانی مثل کاوش سایت با Celery و Redis از چرخه درخواست جدا می‌شوند، پس اجرای کاوش، داشبورد یا گفت‌وگوها را معطل نمی‌کند.
لایهکارش چیستآنچه شما کنترل می‌کنید
ویجتنمایش گفت‌وگو روی سایتنام ربات، پیام خوشامد، رنگ، جایگاه دکمه، آواتار
سرویس اصلیبررسی دامنه، محدودیت‌ها و ساخت پاسخدامنه‌های مجاز، زبان پاسخ، متن پیام جایگزین
پایگاه دانشنگهداری قطعه‌ها و بردارهامحتوای سایت، فیلد اطلاعات کسب‌وکار
کارهای پس‌زمینهکاوش و پردازش صفحاتزمان اجرای کاوش دوباره

مسیر ساخت دانش: از نشانی سایت تا پایگاه دانش

این مسیر یک بار هنگام راه‌اندازی و بعد هر بار که کاوش دوباره را اجرا می‌کنید طی می‌شود.

گام ۱: کاوش صفحات

شما فقط نشانی سایت را می‌دهید. کاوشگر صفحات را یکی‌یکی باز می‌کند و متن اصلی هر صفحه را از منو، فوتر و بخش‌های تکراری جدا می‌کند. جزئیات این مرحله را در مطلب خزش سایت چطور انجام می‌شود بخوانید.

گام ۲: قطعه‌بندی با هم‌پوشانی

متن هر صفحه به قطعه‌هایی با اندازه مشخص و مقداری هم‌پوشانی تقسیم می‌شود. هم‌پوشانی مهم است: جمله‌ای که دقیقاً روی مرز دو قطعه بیفتد، نباید بافتش را از دست بدهد. به همین دلیل پاراگراف‌های کوتاه و مستقل در سایت شما، قطعه‌های تمیزتری می‌سازند.

گام ۳: ساخت بردار معنایی

برای هر قطعه یک بردار ساخته می‌شود؛ فهرستی از عددها که «معنای» متن را نشان می‌دهد. متن‌هایی که معنای نزدیک دارند، بردارهای نزدیک دارند، حتی اگر کلمه‌هایشان فرق کند. اگر می‌خواهید بیشتر بدانید، بردار معنایی و جست‌وجوی معنایی را ببینید.

گام ۴: به‌روز ماندن

هر صفحه فقط یک بار ذخیره می‌شود، حتی اگر نشانی‌اش به چند شکل نوشته شده باشد. در کاوش دوباره فقط صفحه‌هایی که تغییر کرده‌اند دوباره پردازش می‌شوند و صفحه‌های حذف‌شده از پایگاه دانش بیرون می‌روند.

مسیر پاسخ: وقتی بازدیدکننده می‌پرسد

این مسیر برای هر پیام، از اول تا آخر طی می‌شود:

  • گام ۱: پرسش بازدیدکننده به همان فضای برداری تبدیل می‌شود.
  • گام ۲: نزدیک‌ترین قطعه‌ها فقط در داده پروژه شما جست‌وجو می‌شوند. اگر پرسش ادامه گفت‌وگوی قبلی باشد، مثل «قیمتش چنده؟»، پیام‌های اخیر بازدیدکننده هم در جست‌وجو لحاظ می‌شوند تا معلوم شود منظور کدام محصول است.
  • گام ۳: تصمیم گرفته می‌شود. اگر هیچ قطعه‌ای به‌قدر کافی شبیه نباشد و اطلاعات کسب‌وکار هم خالی باشد، کار همین‌جا تمام می‌شود و پیامی که خودتان نوشته‌اید، مثلاً شماره پشتیبانی، نمایش داده می‌شود.
  • گام ۴: اگر متن مرتبطی پیدا شد، قطعه‌ها همراه با اطلاعات کسب‌وکار، محصولات مرتبط از کاتالوگ (اگر ثبت کرده باشید)، پرسش و چند پیام آخر گفت‌وگو به مدل زبانی داده می‌شوند، با دستور صریح که فقط از همین متن‌ها پاسخ بسازد.
  • گام ۵: پاسخ همراه با صفحه منبع برمی‌گردد تا بازدیدکننده بتواند خودش جزئیات را ببیند.

این الگو در اصطلاح «تولید پاسخ با بازیابی» نام دارد و در مطلب RAG چیست کامل توضیح داده شده است.

چرا تصمیم «پاسخ هست یا نه» اول گرفته می‌شود

اگر ترتیب برعکس بود، مدل زبانی همیشه چیزی می‌نوشت و بعد باید قضاوت می‌کردیم آن متن درست است یا نه. مدل‌های زبانی در نوشتن متن روان و قانع‌کننده بسیار خوب‌اند، حتی وقتی اطلاعات کافی ندارند. همین ویژگی است که به پاسخ ساختگی هوش مصنوعی منجر می‌شود.

با گرفتن تصمیم پیش از تولید، سه چیز به دست می‌آورید:

  • بازدیدکننده به‌جای حدس، مسیر روشن تماس با شما را می‌بیند.
  • برای پرسشی که جوابش در محتوای شما نیست، هزینه تولید متن پرداخت نمی‌شود.
  • آن پرسش در فهرست پرسش‌های بی‌پاسخ داشبورد می‌نشیند و به فهرست کارهای محتوایی شما تبدیل می‌شود.

یک مثال: فروشگاه آنلاین لوازم آشپزخانه

فرض کنید صاحب یک فروشگاه آنلاین لوازم آشپزخانه هستید و شرایط ارسال به شهرستان‌ها را عوض کرده‌اید.

  • بعد از ویرایش صفحه: تا وقتی کاوش دوباره را اجرا نکرده‌اید، ربات هنوز از نسخه قبلی صفحه پاسخ می‌دهد. کاوش دوباره فقط همان صفحه تغییرکرده را پردازش می‌کند.
  • بازدیدکننده می‌پرسد: «برای شیراز هم ارسال دارید؟» قطعه مربوط به شرایط ارسال بازیابی می‌شود و پاسخ با لینک صفحه ارسال برمی‌گردد.
  • ادامه می‌دهد: «چند روز طول می‌کشد؟» چون پیام قبلی هم در جست‌وجو لحاظ می‌شود، ربات می‌فهمد موضوع هنوز ارسال به شهرستان است.
  • سؤالی بیرون از محتوا: «خرید قسطی دارید؟» اگر این را هیچ‌جا ننوشته باشید، ربات پیام جایگزین شما را با شماره تماس نشان می‌دهد و پرسش در فهرست بی‌پاسخ‌ها ثبت می‌شود. حالا می‌دانید یک خط در صفحه پرسش‌های متداول یا فیلد اطلاعات کسب‌وکار کم دارید.

برداشت‌های نادرست رایج

  • «ربات اینترنت را می‌گردد.» نه. فقط محتوای سایت شما، اطلاعات کسب‌وکار و کاتالوگ محصولاتتان منبع پاسخ‌اند.
  • «مدل زبانی سایت من را حفظ کرده.» نه. هیچ آموزشی روی مدل انجام نمی‌شود؛ در هر پرسش، متن مرتبط تازه بازیابی می‌شود. برای همین با به‌روزرسانی محتوا، پاسخ‌ها هم به‌روز می‌شوند.
  • «تغییر سایت فوراً در پاسخ‌ها دیده می‌شود.» فقط بعد از کاوش دوباره. بعد از هر تغییر مهم، آن را اجرا کنید.
  • «متن داخل تصویر هم خوانده می‌شود.» کاوشگر متن صفحه را می‌خواند. جدول قیمتی که به شکل عکس گذاشته‌اید، برای ربات وجود ندارد.

پرسش‌های رایج

آیا داده سایت من با پروژه‌های دیگر قاطی می‌شود؟

نه. هر جست‌وجو پیش از مقایسه بردارها به داده همان پروژه محدود می‌شود، پس محتوای یک کسب‌وکار هرگز در پاسخ ربات کسب‌وکار دیگری ظاهر نمی‌شود.

چرا ربات به سؤالی که جوابش در سایت هست، پیام جایگزین را نشان می‌دهد؟

معمولاً یکی از این دلیل‌ها: صفحه هنوز کاوش نشده، محتوایش فقط با جاوااسکریپت در مرورگر ساخته می‌شود، اطلاعات داخل تصویر است، یا جمله‌بندی صفحه با زبان مشتری فاصله زیادی دارد. اول فهرست صفحه‌های ایندکس‌شده را ببینید، بعد سراغ متن صفحه بروید.

برای استفاده از ربات باید این فنّاوری‌ها را بشناسم؟

نه. این توضیحات برای این است که بدانید چرا محتوای روشن و کاوش به‌موقع اهمیت دارد. راه‌اندازی ربات پاسخ‌گوی سایت فقط به نشانی سایت و افزودن یک تگ اسکریپت نیاز دارد.

#معماری#Django#Next.js

مطالب مرتبط

معماری بایتیرا: از کاوش سایت تا پاسخ با منبع | بایتیرا