𝗔𝘀𝘆𝗻𝗰 𝗦𝗰𝗿𝗮𝗽𝗶𝗻𝗴 𝗜𝘀 𝗕𝗲𝘁𝘁𝗲𝗿 𝗳𝗼𝗿 𝗥𝗔𝗚 𝗜𝗻𝗴𝗲𝘀𝘁𝗶𝗼𝗻
سیستمهای RAG اغلب به دلیل دادههای قدیمی (stale) با شکست مواجه میشوند. صفحه تغییر میکند اما ایندکس شما ثابت میماند. در نتیجه، هوش مصنوعی شما با اطمینان بالا، پاسخهای اشتباه ارائه میدهد.
بسیاری از افراد سعی میکنند این مشکل را با اسکرپرهای همگام (synchronous) ساده حل کنند. شما یک صفحه را فراخوانی میکنید، دادهها را استخراج میکنید و vector store خود را بهروزرسانی میکنید. این رویکرد در محیط عملیاتی (production) مشکلاتی ایجاد میکند.
مشکلات اصلی اسکرپینگ همگام:
- بارگذاری صفحات به دلیل جاوااسکریپت یا بنرهای کوکی زمان زیادی میبرد.
- API شما منتظر تمام شدن اسکرپر میماند که باعث کند شدن سرعت کاربران میشود.
- هنگام اجرای موازی وظایف، با کمبود حافظه یا باز شدن بیش از حد سوکتها مواجه میشوید.
- مدیریت خطاهایی مانند تایماوت (timeout) یا محدودیت نرخ درخواست (rate limit) دشوار است.
اسکرپینگ ناهمگام (Async) از جریان «ارسال، بررسی و بازیابی» استفاده میکند. شما یک وظیفه را ارسال میکنید، یک شناسه کار (job ID) دریافت میکنید و بعداً نتیجه را بررسی میکنید. این کار باعث سریع ماندن اپلیکیشن شما میشود.
چگونه یک خط لوله ورود داده (ingestion pipeline) قابل اعتماد بسازیم:
- اسکرپینگ را از مدیریت درخواستها جدا کنید. اپلیکیشن شما نباید منتظر بارگذاری مرورگر بماند.
- وضعیت کارها را در یک پایگاه داده ذخیره کنید. URL، وضعیت و خطاها را پیگیری کنید.
- از هشهای محتوا (content hashes) استفاده کنید. اگر محتوای صفحه تغییر نکرده است، دوباره آن را embedding نکنید. این کار در زمان و هزینه صرفهجویی میکند.
- از صفهای پیام مرده (dead-letter queues) استفاده کنید. اگر یک کار سه بار با شکست مواجه شد، تلاش مجدد را متوقف کنید. آن را به یک لیست قابل مشاهده منتقل کنید تا بتوانید آن را اصلاح کنید.
- دادههای خود را اعتبارسنجی کنید. از یک طرحواره (schema) استفاده کنید تا دادههای استخراجشده را قبل از رسیدن به vector store بررسی کنید. یک رشته خالی (empty string) بدتر از یک کار شکستخورده است.
اسکرپینگ ناهمگام برای بهروزرسانیهای پسزمینه و بازنشانیهای زمانبندیشده بهترین عملکرد را دارد. این روش برای نیازهای آنی (real-time) که در آن کاربر منتظر یک صفحه تازه است، مناسب نیست.
اگر کاربر بلافاصله به داده نیاز دارد، محتوای کششده (cached) را به او نشان دهید و ایندکس را در پسزمینه بهروزرسانی کنید.
Optional learning community: https://t.me/GyaanSetuAi